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.
88 lines
2.9 KiB
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
|