add validation for submitters count

pull/381/head
Oleksandr Turchyn 1 year ago committed by Pete Matsyburka
parent babaf1aa48
commit 3d2046f227

@ -80,7 +80,8 @@ module Api
end end
render json: build_create_json(submissions) render json: build_create_json(submissions)
rescue Submitters::NormalizeValues::BaseError, DownloadUtils::UnableToDownload => e rescue Submitters::NormalizeValues::BaseError, Submissions::CreateFromSubmitters::BaseError,
DownloadUtils::UnableToDownload => e
Rollbar.warning(e) if defined?(Rollbar) Rollbar.warning(e) if defined?(Rollbar)
render json: { error: e.message }, status: :unprocessable_entity render json: { error: e.message }, status: :unprocessable_entity

@ -2,8 +2,11 @@
module Submissions module Submissions
module CreateFromSubmitters module CreateFromSubmitters
BaseError = Class.new(StandardError)
module_function module_function
# rubocop:disable Metrics/BlockLength
def call(template:, user:, submissions_attrs:, source:, submitters_order:, params: {}) def call(template:, user:, submissions_attrs:, source:, submitters_order:, params: {})
preferences = Submitters.normalize_preferences(user.account, user, params) preferences = Submitters.normalize_preferences(user.account, user, params)
@ -37,6 +40,10 @@ module Submissions
preferences: preferences.merge(submission_preferences)) preferences: preferences.merge(submission_preferences))
end end
if submission.submitters.size > template.submitters.size
raise BaseError, 'Defined more signing parties than in template'
end
next if submission.submitters.blank? next if submission.submitters.blank?
maybe_add_invite_submitters(submission, template) maybe_add_invite_submitters(submission, template)
@ -44,6 +51,7 @@ module Submissions
submission.tap(&:save!) submission.tap(&:save!)
end end
end end
# rubocop:enable Metrics/BlockLength
def maybe_add_invite_submitters(submission, template) def maybe_add_invite_submitters(submission, template)
template.submitters.each do |item| template.submitters.each do |item|

@ -48,7 +48,7 @@ describe 'Submission API', type: :request do
post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: { post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: {
template_id: templates[0].id, template_id: templates[0].id,
send_email: true, send_email: true,
submitters: [{ role: 'First Role', email: 'john.doe@example.com' }] submitters: [{ role: 'First Party', email: 'john.doe@example.com' }]
}.to_json }.to_json
expect(response).to have_http_status(:ok) expect(response).to have_http_status(:ok)
@ -63,7 +63,7 @@ describe 'Submission API', type: :request do
template_id: multiple_submitters_template.id, template_id: multiple_submitters_template.id,
send_email: true, send_email: true,
submitters: [ submitters: [
{ role: 'First Role', email: 'john.doe@example.com' }, { role: 'First Party', email: 'john.doe@example.com' },
{ email: 'jane.doe@example.com' }, { email: 'jane.doe@example.com' },
{ email: 'mike.doe@example.com' } { email: 'mike.doe@example.com' }
] ]
@ -88,7 +88,7 @@ describe 'Submission API', type: :request do
template_id: templates[0].id, template_id: templates[0].id,
send_email: true, send_email: true,
submitters: [ submitters: [
{ role: 'First Role', email: 'john@example' } { role: 'First Party', email: 'john@example' }
] ]
}.to_json }.to_json
@ -103,7 +103,7 @@ describe 'Submission API', type: :request do
post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: { post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: {
template_id: templates[0].id, template_id: templates[0].id,
send_email: true, send_email: true,
submitters: [{ role: 'First Role', email: 'john.doe@example.com' }] submitters: [{ role: 'First Party', email: 'john.doe@example.com' }]
}.to_json }.to_json
expect(response).to have_http_status(:unprocessable_entity) expect(response).to have_http_status(:unprocessable_entity)
@ -115,14 +115,28 @@ describe 'Submission API', type: :request do
template_id: multiple_submitters_template.id, template_id: multiple_submitters_template.id,
send_email: true, send_email: true,
submitters: [ submitters: [
{ role: 'First Role', email: 'john.doe@example.com' }, { role: 'First Party', email: 'john.doe@example.com' },
{ role: 'First Role', email: 'jane.doe@example.com' } { role: 'First Party', email: 'jane.doe@example.com' }
] ]
}.to_json }.to_json
expect(response).to have_http_status(:unprocessable_entity) expect(response).to have_http_status(:unprocessable_entity)
expect(response.parsed_body).to eq({ 'error' => 'role must be unique in `submitters`.' }) expect(response.parsed_body).to eq({ 'error' => 'role must be unique in `submitters`.' })
end end
it 'returns an error if number of submitters more than in the template' do
post '/api/submissions', headers: { 'x-auth-token': author.access_token.token }, params: {
template_id: templates[0].id,
send_email: true,
submitters: [
{ email: 'jane.doe@example.com' },
{ role: 'First Party', email: 'john.doe@example.com' }
]
}.to_json
expect(response).to have_http_status(:unprocessable_entity)
expect(response.parsed_body).to eq({ 'error' => 'Defined more signing parties than in template' })
end
end end
describe 'POST /api/submissions/emails' do describe 'POST /api/submissions/emails' do

Loading…
Cancel
Save