mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-06-04 21:02:35 +08:00
73 lines
2.6 KiB
Ruby
73 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe CustomAttributeDefinition do
|
|
let(:account) { create(:account) }
|
|
|
|
describe 'validations' do
|
|
describe 'attribute_key format' do
|
|
it 'allows alphanumeric keys with underscores' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: 'order_date_1')
|
|
expect(cad).to be_valid
|
|
end
|
|
|
|
it 'allows hyphens and dots' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: 'order-date.v2')
|
|
expect(cad).to be_valid
|
|
end
|
|
|
|
it 'allows Unicode letters' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: '客户类型')
|
|
expect(cad).to be_valid
|
|
end
|
|
|
|
it 'rejects keys with single quotes' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: "x'||(SELECT 1)||'")
|
|
expect(cad).not_to be_valid
|
|
expect(cad.errors[:attribute_key]).to be_present
|
|
end
|
|
|
|
it 'rejects keys with spaces' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: 'order date')
|
|
expect(cad).not_to be_valid
|
|
end
|
|
|
|
it 'rejects keys with semicolons' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: 'key; DROP TABLE users--')
|
|
expect(cad).not_to be_valid
|
|
end
|
|
|
|
it 'rejects keys with parentheses' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_key: 'key()')
|
|
expect(cad).not_to be_valid
|
|
end
|
|
|
|
it 'allows company custom attributes' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_model: 'company_attribute')
|
|
expect(cad).to be_valid
|
|
end
|
|
|
|
it 'rejects company custom attributes that conflict with standard company fields' do
|
|
cad = build(:custom_attribute_definition, account: account, attribute_model: 'company_attribute', attribute_key: 'domain')
|
|
expect(cad).not_to be_valid
|
|
expect(cad.errors[:attribute_key]).to be_present
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'callbacks' do
|
|
describe '#strip_attribute_key' do
|
|
it 'strips leading and trailing whitespace from attribute_key' do
|
|
cad = create(:custom_attribute_definition, account: account, attribute_key: ' order_date ')
|
|
expect(cad.attribute_key).to eq('order_date')
|
|
end
|
|
|
|
it 'strips leading and trailing whitespace from attribute_display_name' do
|
|
cad = create(:custom_attribute_definition, account: account, attribute_display_name: ' Order Date ')
|
|
expect(cad.attribute_display_name).to eq('Order Date')
|
|
end
|
|
end
|
|
end
|
|
end
|