mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.8 KiB
176 lines
5.8 KiB
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe AtsPrefill do
|
|
let(:template_fields) do
|
|
[
|
|
{
|
|
'uuid' => 'field-1-uuid',
|
|
'name' => 'First Name',
|
|
'type' => 'text',
|
|
'prefill' => 'employee_first_name'
|
|
},
|
|
{
|
|
'uuid' => 'field-2-uuid',
|
|
'name' => 'Last Name',
|
|
'type' => 'text',
|
|
'prefill' => 'employee_last_name'
|
|
}
|
|
]
|
|
end
|
|
|
|
describe '.extract_fields' do
|
|
let(:params) { ActionController::Parameters.new(ats_fields: 'encoded_data') }
|
|
|
|
it 'delegates to FieldExtractor' do
|
|
expected_result = %w[employee_first_name employee_last_name]
|
|
|
|
allow(AtsPrefill::FieldExtractor).to receive(:call).with(params).and_return(expected_result)
|
|
|
|
result = described_class.extract_fields(params)
|
|
expect(result).to eq(expected_result)
|
|
end
|
|
end
|
|
|
|
describe '.merge_values' do
|
|
let(:submitter_values) { { 'field-1-uuid' => 'John' } }
|
|
let(:ats_values) { { 'employee_last_name' => 'Doe' } }
|
|
|
|
it 'delegates to ValueMerger' do
|
|
expected_result = { 'field-1-uuid' => 'John', 'field-2-uuid' => 'Doe' }
|
|
|
|
allow(AtsPrefill::ValueMerger).to receive(:call).with(submitter_values, ats_values,
|
|
template_fields).and_return(expected_result)
|
|
|
|
result = described_class.merge_values(submitter_values, ats_values, template_fields)
|
|
expect(result).to eq(expected_result)
|
|
end
|
|
|
|
it 'handles nil template_fields' do
|
|
allow(AtsPrefill::ValueMerger).to receive(:call).with(submitter_values, ats_values,
|
|
nil).and_return(submitter_values)
|
|
|
|
result = described_class.merge_values(submitter_values, ats_values, nil)
|
|
expect(result).to eq(submitter_values)
|
|
end
|
|
end
|
|
|
|
describe '.find_field_uuid' do
|
|
let(:field_name) { 'employee_first_name' }
|
|
|
|
it 'delegates to FieldMapper.find_field_uuid' do
|
|
expected_uuid = 'field-1-uuid'
|
|
|
|
allow(AtsPrefill::FieldMapper).to receive(:find_field_uuid).with(field_name,
|
|
template_fields).and_return(expected_uuid)
|
|
|
|
result = described_class.find_field_uuid(field_name, template_fields)
|
|
expect(result).to eq(expected_uuid)
|
|
end
|
|
|
|
it 'returns nil for non-existent field' do
|
|
allow(AtsPrefill::FieldMapper).to receive(:find_field_uuid).with('non_existent', template_fields).and_return(nil)
|
|
|
|
result = described_class.find_field_uuid('non_existent', template_fields)
|
|
expect(result).to be_nil
|
|
end
|
|
end
|
|
|
|
describe '.build_field_mapping' do
|
|
it 'delegates to FieldMapper.call' do
|
|
expected_mapping = { 'employee_first_name' => 'field-1-uuid', 'employee_last_name' => 'field-2-uuid' }
|
|
|
|
allow(AtsPrefill::FieldMapper).to receive(:call).with(template_fields).and_return(expected_mapping)
|
|
|
|
result = described_class.build_field_mapping(template_fields)
|
|
expect(result).to eq(expected_mapping)
|
|
end
|
|
|
|
it 'handles nil template_fields' do
|
|
allow(AtsPrefill::FieldMapper).to receive(:call).with(nil).and_return({})
|
|
|
|
result = described_class.build_field_mapping(nil)
|
|
expect(result).to eq({})
|
|
end
|
|
end
|
|
|
|
describe '.clear_cache' do
|
|
it 'exists as a method for future use' do
|
|
expect { described_class.clear_cache }.not_to raise_error
|
|
end
|
|
|
|
it 'returns nil' do
|
|
result = described_class.clear_cache
|
|
expect(result).to be_nil
|
|
end
|
|
end
|
|
|
|
describe 'integration test' do
|
|
let(:params) do
|
|
fields = %w[employee_first_name employee_last_name]
|
|
encoded_fields = Base64.urlsafe_encode64(fields.to_json)
|
|
ActionController::Parameters.new(ats_fields: encoded_fields)
|
|
end
|
|
|
|
let(:submitter_values) { { 'field-1-uuid' => 'Existing Name' } }
|
|
let(:ats_values) { { 'employee_first_name' => 'John', 'employee_last_name' => 'Doe' } }
|
|
|
|
it 'works end-to-end with real service objects' do
|
|
# Extract fields
|
|
extracted_fields = described_class.extract_fields(params)
|
|
expect(extracted_fields).to eq(%w[employee_first_name employee_last_name])
|
|
|
|
# Build field mapping
|
|
field_mapping = described_class.build_field_mapping(template_fields)
|
|
expect(field_mapping).to eq({
|
|
'employee_first_name' => 'field-1-uuid',
|
|
'employee_last_name' => 'field-2-uuid'
|
|
})
|
|
|
|
# Find specific field UUID
|
|
uuid = described_class.find_field_uuid('employee_first_name', template_fields)
|
|
expect(uuid).to eq('field-1-uuid')
|
|
|
|
# Merge values
|
|
merged_values = described_class.merge_values(submitter_values, ats_values, template_fields)
|
|
expect(merged_values).to eq({
|
|
'field-1-uuid' => 'Existing Name', # Should not be overwritten
|
|
'field-2-uuid' => 'Doe' # Should be added from ATS
|
|
})
|
|
end
|
|
end
|
|
|
|
describe 'module structure' do
|
|
it 'includes all expected methods' do
|
|
expected_methods = %i[
|
|
extract_fields
|
|
merge_values
|
|
find_field_uuid
|
|
build_field_mapping
|
|
clear_cache
|
|
]
|
|
|
|
expected_methods.each do |method|
|
|
expect(described_class).to respond_to(method)
|
|
end
|
|
end
|
|
|
|
it 'is a module with module_function' do
|
|
expect(described_class).to be_a(Module)
|
|
|
|
# Check that methods are available as module methods
|
|
expect(described_class).to respond_to(:extract_fields)
|
|
expect(described_class.methods).to include(:extract_fields)
|
|
end
|
|
end
|
|
|
|
describe 'error handling' do
|
|
it 'propagates errors from underlying services' do
|
|
allow(AtsPrefill::FieldExtractor).to receive(:call).and_raise(StandardError, 'Test error')
|
|
|
|
expect { described_class.extract_fields({}) }.to raise_error(StandardError, 'Test error')
|
|
end
|
|
end
|
|
end
|