1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe Gql::Mutations::Ticket::Article::RetryMediaDownload, :aggregate_failures, type: :graphql do
- let(:query) do
- <<~QUERY
- mutation ticketArticleRetryMediaDownload($articleId: ID!) {
- ticketArticleRetryMediaDownload(articleId: $articleId) {
- success
- errors {
- message
- field
- }
- }
- }
- QUERY
- end
- let(:group) { create(:group) }
- let(:agent) { create(:agent, groups: [group]) }
- let(:customer) { create(:customer) }
- let(:channel) { create(:whatsapp_channel) }
- let(:ticket) { create(:ticket, group:, preferences: { channel_id: channel.id }) }
- let(:article) do
- create(:whatsapp_article, :with_attachment_media_document, ticket: ticket, created_by: customer).tap do |article|
- article.preferences[:whatsapp][:media_error] = true
- article.save!
- article.attachments.delete_all
- end
- end
- let(:variables) { { articleId: gql.id(article) } }
- context "when retrying an article's media download" do
- context 'with an agent', authenticated_as: :agent do
- context 'with a whatsapp article with failed media download' do
- it 'creates the attachment' do
- expect_any_instance_of(Whatsapp::Retry::Media).to receive(:process).and_return(true) # rubocop:disable RSpec/StubbedMock
- gql.execute(query, variables: variables)
- expect(gql.result.data[:success]).to be true
- end
- end
- context 'with a whatsapp article without failed media download' do
- it 'returns a user error' do
- article.preferences.delete(:whatsapp)
- article.save!
- gql.execute(query, variables: variables)
- expect(gql.result.data[:success]).not_to be true
- expect(gql.result.data[:errors].first).to include(
- { 'message' => 'Retrying to download the sent media via WhatsApp failed. The given article is not a media article.' }
- )
- end
- end
- end
- context 'with a customer', authenticated_as: :customer do
- it 'raises an error' do
- gql.execute(query, variables: variables)
- expect(gql.result.error_type).to eq(Exceptions::Forbidden)
- end
- end
- end
- end
|