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.
docuseal/spec/lib/submitters/submit_values_spec.rb

88 lines
2.9 KiB

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Submitters::SubmitValues do
let(:account) { create(:account) }
let(:user) { create(:user, account: account) }
let(:template) { create(:template, account: account) }
let(:submission) { create(:submission, template: template, account: account) }
let(:submitter) { create(:submitter, submission: submission, account: account, uuid: SecureRandom.uuid) }
let(:request) { instance_double(ActionDispatch::Request, remote_ip: '127.0.0.1', user_agent: 'TestAgent') }
before do
allow(request).to receive_messages(
session: instance_double(ActionDispatch::Request::Session, id: 'session_id'),
env: { 'warden' => instance_double(Warden::Proxy, user: user) }
)
# Setup template fields
fields = [
{ 'uuid' => 'field_1', 'name' => 'First Name', 'type' => 'text', 'submitter_uuid' => submitter.uuid },
{ 'uuid' => 'field_2', 'name' => 'Last Name', 'type' => 'text', 'submitter_uuid' => submitter.uuid }
]
template.update!(fields: fields)
submission.update!(template_fields: fields)
# Initialize submitter values
submitter.update!(values: { 'field_1' => 'John', 'field_2' => 'Doe' })
create(:submission_event, submission: submission, submitter: submitter, event_type: 'start_form')
end
describe '.call' do
context 'when values change' do
let(:params) do
{
values: { 'field_1' => 'Jane' }
}
end
it 'creates a form_update event with changes' do
expect do
described_class.call(submitter, ActionController::Parameters.new(params), request, user)
end.to change(SubmissionEvent, :count).by(1)
event = SubmissionEvent.last
expect(event.event_type).to eq('form_update')
expect(event.user).to eq(user)
expect(event.data['changes']).to include(
hash_including('field' => 'First Name', 'from' => 'John', 'to' => 'Jane')
)
end
end
context 'when values do not change' do
let(:params) do
{
values: { 'field_1' => 'John' }
}
end
it 'does not create a form_update event' do
expect do
described_class.call(submitter, ActionController::Parameters.new(params), request, user)
end.not_to change(SubmissionEvent, :count)
end
end
context 'when multiple fields change' do
let(:params) do
{
values: { 'field_1' => 'Jane', 'field_2' => 'Smith' }
}
end
it 'records all changes' do
described_class.call(submitter, ActionController::Parameters.new(params), request, user)
event = SubmissionEvent.last
changes = event.data['changes']
expect(changes.size).to eq(2)
expect(changes).to include(hash_including('field' => 'First Name', 'to' => 'Jane'))
expect(changes).to include(hash_including('field' => 'Last Name', 'to' => 'Smith'))
end
end
end
end