Compare commits

...

3 Commits

Author SHA1 Message Date
Bilal
4dad4adde2 add safeguard 2020-07-03 18:44:34 +02:00
Bilal
85b99e18f5 add specs 2020-07-03 18:44:27 +02:00
Bilal
08f6380aaa make question answers required 2020-07-03 18:01:34 +02:00
7 changed files with 97 additions and 3 deletions

View File

@@ -32,6 +32,7 @@ class MedicalRelease < ApplicationRecord
# These validations apply to all releases
validates :person_first_name, :person_last_name, presence: true
validates :person_email, email: true, allow_blank: true
validate :valid_answers
acts_as_taggable_on :internal_tags, :tags
@@ -76,4 +77,15 @@ class MedicalRelease < ApplicationRecord
def contract_file_name
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
end
private
def valid_answers
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
if contract_template && contract_template["question_#{index}_text"].present? &&
public_send("question_#{index}_answer").blank?
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
end
end
end
end

View File

@@ -30,7 +30,7 @@
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
<% if @contract_template.public_send("question_#{n}_text").present? %>
<div class="form-row">
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
<%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
</div>
<% end %>
<% end %>

View File

@@ -772,6 +772,8 @@ en:
update:
notice: The material release has been updated
medical_releases:
custom_validation_errors:
question_answer_is_required: answer is required
destroy:
alert: The medical release has been deleted
index:

View File

@@ -282,6 +282,9 @@ es:
form:
photos:
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
medical_releases:
custom_validation_errors:
question_answer_is_required: answer is required (ES)
public:
appearance_releases:
create:

View File

@@ -19,14 +19,29 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
end
it "displays validation errors" do
contract_template = create(:contract_template, project: project)
contract_template = create(:contract_template,
project: project,
question_1_text: "Question 1",
question_2_text: "Question 2"
)
sign_in(user)
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } }
post :create, params: {
account_id: user.primary_account.to_param,
project_id: project,
contract_template_id: contract_template,
medical_release: {
person_address_city: "Albuquerque",
question_2_answer: "Answer 2"
}
}
body = CGI.unescape_html(response.body)
expect(body).to match /Person first name can't be blank/
expect(body).to match /Person last name can't be blank/
expect(body).to match />can't be blank</
expect(body).to match /Question 1 #{question_answer_validation_error}/
expect(body).not_to match /Question 2 #{question_answer_validation_error}/
end
it "responds with success " do
@@ -68,4 +83,8 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
{ signature_base64: data_uri }
end
def question_answer_validation_error
t 'medical_releases.custom_validation_errors.question_answer_is_required'
end
end

View File

@@ -121,6 +121,43 @@ feature "User managing medical releases" do
expect(page).to have_content(successful_submission_message)
expect(MedicalRelease.last.guardian_2_first_name).to eq 'Second'
end
scenario 'when signing release, question answers are required', js: true do
project = create(:project, members: current_user, account: current_user.primary_account)
contract_template = create(:contract_template,
project: project,
question_1_text: 'Question 1',
question_2_text: 'Question 2'
)
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
expect do
click_button submit_release_button
end.to change(MedicalRelease, :count).by(0)
expect(page).not_to have_content(successful_submission_message)
fill_in answer_field_for_question(1), with: 'Answer 1'
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
expect do
click_button submit_release_button
end.to change(MedicalRelease, :count).by(0)
expect(page).not_to have_content(successful_submission_message)
fill_in answer_field_for_question(2), with: 'Answer 2'
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
expect do
click_button submit_release_button
end.to change(MedicalRelease, :count).by(1)
expect(page).to have_content(successful_submission_message)
end
end
context "when signed in as account manager" do
@@ -396,4 +433,8 @@ feature "User managing medical releases" do
def guardian_2_information_heading
t 'public.medical_releases.new.guardian_2_info.heading'
end
def answer_field_for_question(number)
"medical_release[question_#{number}_answer]"
end
end

View File

@@ -22,6 +22,23 @@ RSpec.describe MedicalRelease do
context "for non-native releases" do
it { is_expected.to validate_attachment_of(:contract).on(:non_native) }
end
context "question answers" do
let(:project) { create(:project) }
let(:contract_template) { create(:contract_template, project: project, question_1_text: 'Question 1') }
it "returns validation errors if answers are missing" do
expect do
create(:medical_release, contract_template: contract_template)
end.to raise_exception ActiveRecord::RecordInvalid
end
it "creates release if answers are present" do
expect do
create(:medical_release, contract_template: contract_template, question_1_answer: 'Answer 1')
end.to change(MedicalRelease, :count).by(1)
end
end
end
describe "attachments" do