6cfd594d85
Fix flaky test: flaky /spec/services/whatsapp/providers/whatsapp_cloud_service_spec.rb:17 example build: https://app.circleci.com/pipelines/github/chatwoot/chatwoot/48955/workflows/a2959d25-19ea-4812-ba15-5aac69c43265/jobs/49523 Cause: factory bot can create phone numbers of length 15 digits, which is valid e164, while our regex only handled up to 14 digits
95 lines
4.5 KiB
Ruby
95 lines
4.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe ContactInbox do
|
|
describe 'pubsub_token' do
|
|
let(:contact_inbox) { create(:contact_inbox) }
|
|
|
|
it 'gets created on object create' do
|
|
obj = contact_inbox
|
|
expect(obj.pubsub_token).not_to be_nil
|
|
end
|
|
|
|
it 'does not get updated on object update' do
|
|
obj = contact_inbox
|
|
old_token = obj.pubsub_token
|
|
obj.update(source_id: '234234323')
|
|
expect(obj.pubsub_token).to eq(old_token)
|
|
end
|
|
|
|
it 'backfills pubsub_token on call for older objects' do
|
|
obj = create(:contact_inbox)
|
|
# to replicate an object with out pubsub_token
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
obj.update_column(:pubsub_token, nil)
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
|
|
obj.reload
|
|
|
|
# ensure the column is nil in database
|
|
results = ActiveRecord::Base.connection.execute('Select * from contact_inboxes;')
|
|
expect(results.first['pubsub_token']).to be_nil
|
|
|
|
new_token = obj.pubsub_token
|
|
obj.update(source_id: '234234323')
|
|
# the generated token shoul be persisted in db
|
|
expect(obj.pubsub_token).to eq(new_token)
|
|
end
|
|
end
|
|
|
|
describe 'validations' do
|
|
context 'when source_id' do
|
|
it 'validates whatsapp channel source_id' do
|
|
whatsapp_inbox = create(:channel_whatsapp, sync_templates: false, validate_provider_config: false).inbox
|
|
contact = create(:contact)
|
|
valid_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '1234567890')
|
|
ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '1234567890aaa')
|
|
ci_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '+1234567890')
|
|
expect(valid_source_id.valid?).to be(true)
|
|
expect(ci_character_in_source_id.valid?).to be(false)
|
|
expect(ci_character_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for whatsapp inbox. valid Regex (?-mix:^\\d{1,15}\\z)']
|
|
)
|
|
expect(ci_plus_in_source_id.valid?).to be(false)
|
|
expect(ci_plus_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for whatsapp inbox. valid Regex (?-mix:^\\d{1,15}\\z)']
|
|
)
|
|
end
|
|
|
|
it 'validates twilio sms channel source_id' do
|
|
twilio_sms_inbox = create(:channel_twilio_sms).inbox
|
|
contact = create(:contact)
|
|
valid_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '+1234567890')
|
|
ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '+1234567890aaa')
|
|
ci_without_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '1234567890')
|
|
expect(valid_source_id.valid?).to be(true)
|
|
expect(ci_character_in_source_id.valid?).to be(false)
|
|
expect(ci_character_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,15}\\z)']
|
|
)
|
|
expect(ci_without_plus_in_source_id.valid?).to be(false)
|
|
expect(ci_without_plus_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,15}\\z)']
|
|
)
|
|
end
|
|
|
|
it 'validates twilio whatsapp channel source_id' do
|
|
twilio_whatsapp_inbox = create(:channel_twilio_sms, medium: :whatsapp).inbox
|
|
contact = create(:contact)
|
|
valid_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:+1234567890')
|
|
ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:+1234567890aaa')
|
|
ci_without_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:1234567890')
|
|
expect(valid_source_id.valid?).to be(true)
|
|
expect(ci_character_in_source_id.valid?).to be(false)
|
|
expect(ci_character_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,15}\\z)']
|
|
)
|
|
expect(ci_without_plus_in_source_id.valid?).to be(false)
|
|
expect(ci_without_plus_in_source_id.errors.full_messages).to eq(
|
|
['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,15}\\z)']
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|