Initial commit: Add logistics and order_detail message types
Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
153
spec/models/concerns/json_schema_validator_spec.rb
Normal file
153
spec/models/concerns/json_schema_validator_spec.rb
Normal file
@@ -0,0 +1,153 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe JsonSchemaValidator, type: :validator do
|
||||
schema = {
|
||||
'type' => 'object',
|
||||
'properties' => {
|
||||
'name' => { 'type' => 'string' },
|
||||
'age' => { 'type' => 'integer', 'minimum' => 18, 'maximum' => 100 },
|
||||
'is_active' => { 'type' => 'boolean' },
|
||||
'tags' => { 'type' => 'array' },
|
||||
'score' => { 'type' => 'number', 'minimum' => 0, 'maximum' => 10 },
|
||||
'address' => {
|
||||
'type' => 'object',
|
||||
'properties' => {
|
||||
'street' => { 'type' => 'string' },
|
||||
'city' => { 'type' => 'string' }
|
||||
},
|
||||
'required' => %w[street city]
|
||||
}
|
||||
},
|
||||
:required => %w[name age]
|
||||
}.to_json.freeze
|
||||
|
||||
# Create a simple test model for validation
|
||||
before_all do
|
||||
# rubocop:disable Lint/ConstantDefinitionInBlock
|
||||
# rubocop:disable RSpec/LeakyConstantDeclaration
|
||||
TestModelForJSONValidation = Struct.new(:additional_attributes) do
|
||||
include ActiveModel::Validations
|
||||
|
||||
validates_with JsonSchemaValidator, schema: schema
|
||||
end
|
||||
# rubocop:enable Lint/ConstantDefinitionInBlock
|
||||
# rubocop:enable RSpec/LeakyConstantDeclaration
|
||||
end
|
||||
|
||||
context 'with valid data' do
|
||||
let(:valid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'age' => 30,
|
||||
'tags' => %w[tag1 tag2],
|
||||
'is_active' => true,
|
||||
'address' => {
|
||||
'street' => '123 Main St',
|
||||
'city' => 'Iceland'
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
it 'passes validation' do
|
||||
model = TestModelForJSONValidation.new(valid_data)
|
||||
expect(model.valid?).to be true
|
||||
expect(model.errors.full_messages).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
context 'with missing required attributes' do
|
||||
let(:invalid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'address' => {
|
||||
'street' => '123 Main St',
|
||||
'city' => 'Iceland'
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
it 'fails validation' do
|
||||
model = TestModelForJSONValidation.new(invalid_data)
|
||||
expect(model.valid?).to be false
|
||||
expect(model.errors.messages).to eq({ :age => ['is required'] })
|
||||
end
|
||||
end
|
||||
|
||||
context 'with incorrect address hash' do
|
||||
let(:invalid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'age' => 30,
|
||||
'address' => 'not-a-hash'
|
||||
}
|
||||
end
|
||||
|
||||
it 'fails validation' do
|
||||
model = TestModelForJSONValidation.new(invalid_data)
|
||||
expect(model.valid?).to be false
|
||||
expect(model.errors.messages).to eq({ :address => ['must be of type hash'] })
|
||||
end
|
||||
end
|
||||
|
||||
context 'with incorrect types' do
|
||||
let(:invalid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'age' => '30',
|
||||
'is_active' => 'some-value',
|
||||
'tags' => 'not-an-array',
|
||||
'address' => {
|
||||
'street' => 123,
|
||||
'city' => 'Iceland'
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
it 'fails validation' do
|
||||
model = TestModelForJSONValidation.new(invalid_data)
|
||||
expect(model.valid?).to be false
|
||||
expect(model.errors.messages).to eq({ :age => ['must be of type integer'], :'address/street' => ['must be of type string'],
|
||||
:is_active => ['must be of type boolean'], :tags => ['must be of type array'] })
|
||||
end
|
||||
end
|
||||
|
||||
context 'with value below minimum' do
|
||||
let(:invalid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'age' => 15,
|
||||
'score' => -1,
|
||||
'is_active' => true
|
||||
}
|
||||
end
|
||||
|
||||
it 'fails validation' do
|
||||
model = TestModelForJSONValidation.new(invalid_data)
|
||||
expect(model.valid?).to be false
|
||||
expect(model.errors.messages).to eq({
|
||||
:age => ['must be greater than or equal to 18'],
|
||||
:score => ['must be greater than or equal to 0']
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
context 'with value above maximum' do
|
||||
let(:invalid_data) do
|
||||
{
|
||||
'name' => 'John Doe',
|
||||
'age' => 120,
|
||||
'score' => 11,
|
||||
'is_active' => true
|
||||
}
|
||||
end
|
||||
|
||||
it 'fails validation' do
|
||||
model = TestModelForJSONValidation.new(invalid_data)
|
||||
expect(model.valid?).to be false
|
||||
expect(model.errors.messages).to eq({
|
||||
:age => ['must be less than or equal to 100'],
|
||||
:score => ['must be less than or equal to 10']
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user