fix: Change contact_inboxes.source_id to text column (#12882)

## Description

Fixes CW-5961 where IMAP email processing failed with
`ActiveRecord::RecordInvalid: Validation failed: Source is too long
(maximum is 255 characters)` error.

This changes the `contact_inboxes.source_id` column from `string` (255
character limit) to `text` (unlimited) to accommodate long email message
IDs that were causing validation failures.

Fixes CW-5961

## Type of change

- [x] Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

- Added spec test validating `source_id` values longer than 255
characters (300 chars)
- All existing `contact_inbox_spec.rb` tests pass (7 examples, 0
failures)
- Migration applied successfully with reversible up/down methods
- Verified `source_id` column type changed to `text` with `null: false`
constraint preserved

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
This commit is contained in:
Vinay Keerthi
2025-11-17 16:09:36 +05:30
committed by GitHub
parent c9823d9409
commit 93374f4327
5 changed files with 26 additions and 4 deletions

View File

@@ -40,6 +40,18 @@ RSpec.describe ContactInbox do
describe 'validations' do
context 'when source_id' do
it 'allows source_id longer than 255 characters for channels without format restrictions' do
long_source_id = 'a' * 300
email_inbox = create(:inbox, channel: create(:channel_email))
contact = create(:contact, account: email_inbox.account)
contact_inbox = build(:contact_inbox, contact: contact, inbox: email_inbox, source_id: long_source_id)
expect(contact_inbox.valid?).to be(true)
expect { contact_inbox.save! }.not_to raise_error
expect(contact_inbox.reload.source_id).to eq(long_source_id)
expect(contact_inbox.source_id.length).to eq(300)
end
it 'validates whatsapp channel source_id' do
whatsapp_inbox = create(:channel_whatsapp, sync_templates: false, validate_provider_config: false).inbox
contact = create(:contact)