require 'rails_helper' describe Whatsapp::IncomingMessageWhatsappCloudService do describe '#perform' do let!(:whatsapp_channel) { create(:channel_whatsapp, provider: 'whatsapp_cloud', sync_templates: false, validate_provider_config: false) } let(:params) do { phone_number: whatsapp_channel.phone_number, object: 'whatsapp_business_account', entry: [{ changes: [{ value: { contacts: [{ profile: { name: 'Sojan Jose' }, wa_id: '2423423243' }], messages: [{ from: '2423423243', image: { id: 'b1c68f38-8734-4ad3-b4a1-ef0c10d683', mime_type: 'image/jpeg', sha256: '29ed500fa64eb55fc19dc4124acb300e5dcca0f822a301ae99944db', caption: 'Check out my product!' }, timestamp: '1664799904', type: 'image' }] } }] }] }.with_indifferent_access end context 'when valid attachment message params' do it 'creates appropriate conversations, message and contacts' do stub_request(:get, whatsapp_channel.media_url('b1c68f38-8734-4ad3-b4a1-ef0c10d683')).to_return( status: 200, body: { messaging_product: 'whatsapp', url: 'https://chatwoot-assets.local/sample.png', mime_type: 'image/jpeg', sha256: 'sha256', file_size: 'SIZE', id: 'b1c68f38-8734-4ad3-b4a1-ef0c10d683' }.to_json, headers: { 'content-type' => 'application/json' } ) stub_request(:get, 'https://chatwoot-assets.local/sample.png').to_return( status: 200, body: File.read('spec/assets/sample.png') ) described_class.new(inbox: whatsapp_channel.inbox, params: params).perform expect(whatsapp_channel.inbox.conversations.count).not_to eq(0) expect(Contact.all.first.name).to eq('Sojan Jose') expect(whatsapp_channel.inbox.messages.first.content).to eq('Check out my product!') expect(whatsapp_channel.inbox.messages.first.attachments.present?).to be true end it 'increments reauthorization count if fetching attachment fails' do stub_request(:get, whatsapp_channel.media_url('b1c68f38-8734-4ad3-b4a1-ef0c10d683')).to_return( status: 401 ) described_class.new(inbox: whatsapp_channel.inbox, params: params).perform expect(whatsapp_channel.inbox.conversations.count).not_to eq(0) expect(Contact.all.first.name).to eq('Sojan Jose') expect(whatsapp_channel.inbox.messages.first.content).to eq('Check out my product!') expect(whatsapp_channel.inbox.messages.first.attachments.present?).to be false expect(whatsapp_channel.authorization_error_count).to eq(1) end end end end