Fix: added validation for custom and additional attribute (#4260)
This commit is contained in:
parent
14c53b8b54
commit
60a0709de6
3 changed files with 54 additions and 0 deletions
|
@ -50,6 +50,8 @@ class Conversation < ApplicationRecord
|
||||||
validates :account_id, presence: true
|
validates :account_id, presence: true
|
||||||
validates :inbox_id, presence: true
|
validates :inbox_id, presence: true
|
||||||
before_validation :validate_additional_attributes
|
before_validation :validate_additional_attributes
|
||||||
|
validates :additional_attributes, jsonb_attributes_length: true
|
||||||
|
validates :custom_attributes, jsonb_attributes_length: true
|
||||||
|
|
||||||
enum status: { open: 0, resolved: 1, pending: 2, snoozed: 3 }
|
enum status: { open: 0, resolved: 1, pending: 2, snoozed: 3 }
|
||||||
|
|
||||||
|
|
21
app/models/jsonb_attributes_length_validator.rb
Normal file
21
app/models/jsonb_attributes_length_validator.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
class JsonbAttributesLengthValidator < ActiveModel::EachValidator
|
||||||
|
def validate_each(record, attribute, value)
|
||||||
|
return if value.empty?
|
||||||
|
|
||||||
|
@attribute = attribute
|
||||||
|
@record = record
|
||||||
|
|
||||||
|
value.each do |key, attribute_value|
|
||||||
|
validate_keys(key, attribute_value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_keys(key, attribute_value)
|
||||||
|
case attribute_value.class.name
|
||||||
|
when 'String'
|
||||||
|
@record.errors.add @attribute, "#{key} length should be < 1500" if attribute_value.length > 1500
|
||||||
|
when 'Integer'
|
||||||
|
@record.errors.add @attribute, "#{key} value should be < 9999999999" if attribute_value > 9_999_999_999
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -58,6 +58,37 @@ RSpec.describe Conversation, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.validate jsonb attributes' do
|
||||||
|
let(:account) { create(:account) }
|
||||||
|
let(:agent) { create(:user, email: 'agent1@example.com', account: account) }
|
||||||
|
let(:inbox) { create(:inbox, account: account) }
|
||||||
|
let(:conversation) do
|
||||||
|
create(
|
||||||
|
:conversation,
|
||||||
|
account: account,
|
||||||
|
contact: create(:contact, account: account),
|
||||||
|
inbox: inbox,
|
||||||
|
assignee: nil
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'validate length of additional_attributes value' do
|
||||||
|
conversation.additional_attributes = { company_name: 'some_company' * 200, contact_number: 19_999_999_999 }
|
||||||
|
conversation.valid?
|
||||||
|
error_messages = conversation.errors.messages
|
||||||
|
expect(error_messages[:additional_attributes][0]).to eq('company_name length should be < 1500')
|
||||||
|
expect(error_messages[:additional_attributes][1]).to eq('contact_number value should be < 9999999999')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'validate length of custom_attributes value' do
|
||||||
|
conversation.custom_attributes = { company_name: 'some_company' * 200, contact_number: 19_999_999_999 }
|
||||||
|
conversation.valid?
|
||||||
|
error_messages = conversation.errors.messages
|
||||||
|
expect(error_messages[:custom_attributes][0]).to eq('company_name length should be < 1500')
|
||||||
|
expect(error_messages[:custom_attributes][1]).to eq('contact_number value should be < 9999999999')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '.after_update' do
|
describe '.after_update' do
|
||||||
let!(:account) { create(:account) }
|
let!(:account) { create(:account) }
|
||||||
let!(:old_assignee) do
|
let!(:old_assignee) do
|
||||||
|
|
Loading…
Reference in a new issue