!@misc_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
- <%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
- <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
- <%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
-
- <%= render "shared/address_fields", form: form, subject: "guardian" %>
+ <%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
<% end %>
diff --git a/app/views/public/talent_releases/new.html.erb b/app/views/public/talent_releases/new.html.erb
index 01f4e72..6af7df2 100644
--- a/app/views/public/talent_releases/new.html.erb
+++ b/app/views/public/talent_releases/new.html.erb
@@ -16,7 +16,7 @@
<% unless @contract_template.guardian_clause.blank? %>
<%= form.form_group :minor do %>
- <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
+ <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<% end %>
<%= card_field_set_tag t(".guardian_clause.heading") do %>
@@ -46,12 +46,12 @@
!@talent_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
- <%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
- <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
- <%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
- <%= render "shared/address_fields", form: form, subject: "guardian" %>
+ <%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
<% end %>
diff --git a/app/views/shared/_address_fields.html.erb b/app/views/shared/_address_fields.html.erb
index 51cda48..8d175bb 100644
--- a/app/views/shared/_address_fields.html.erb
+++ b/app/views/shared/_address_fields.html.erb
@@ -1,14 +1,15 @@
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
<% required = required || false %>
+<% data = data || nil %>
- <%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
+ <%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %>
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
- <%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
- <%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
- <%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
+ <%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6", data: data %>
+ <%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3", data: data %>
+ <%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3", data: data %>
<%= form.form_group "#{field_name_prefix}address_country" do %>
<%= form.label "#{field_name_prefix}address_country" %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 7734d89..ef8b351 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -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:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 91e271f..636e5f2 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -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:
diff --git a/spec/controllers/public/medical_releases_controller_spec.rb b/spec/controllers/public/medical_releases_controller_spec.rb
index 794bdb2..d80325e 100644
--- a/spec/controllers/public/medical_releases_controller_spec.rb
+++ b/spec/controllers/public/medical_releases_controller_spec.rb
@@ -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
diff --git a/spec/features/user_managing_appearance_releases_spec.rb b/spec/features/user_managing_appearance_releases_spec.rb
index 9335a0f..986d427 100644
--- a/spec/features/user_managing_appearance_releases_spec.rb
+++ b/spec/features/user_managing_appearance_releases_spec.rb
@@ -30,6 +30,24 @@ feature 'User managing appearance releases' do
expect(page).to have_content(successful_submission_message)
end
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
scenario 'creating a release for a minor', js: true do
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
@@ -50,6 +68,7 @@ feature 'User managing appearance releases' do
fill_in guardian_first_name_field, with: 'Guardian'
fill_in guardian_last_name_field, with: 'Name'
fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
fill_in_person_address_fields
@@ -60,11 +79,6 @@ feature 'User managing appearance releases' do
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
- fill_in guardian_email_field, with: 'invalid@email'
- click_button submit_release_button
- expect(page).to have_content('Guardian email is not an email')
-
- fill_in guardian_email_field, with: 'valid@email.com'
fill_in_guardian_address_fields
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
@@ -99,6 +113,7 @@ feature 'User managing appearance releases' do
fill_in guardian_first_name_field, with: 'Guardian'
fill_in guardian_last_name_field, with: 'Name'
fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
fill_in_person_address_fields
@@ -109,11 +124,6 @@ feature 'User managing appearance releases' do
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
- fill_in guardian_email_field, with: 'invalid@email'
- click_button submit_release_button
- expect(page).to have_content('Guardian email is not an email')
-
- fill_in guardian_email_field, with: 'valid@email.com'
fill_in_guardian_address_fields
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb
index 59510fb..c65286e 100644
--- a/spec/features/user_managing_medical_releases_spec.rb
+++ b/spec/features/user_managing_medical_releases_spec.rb
@@ -28,6 +28,24 @@ feature "User managing medical releases" do
expect(page).to have_content(successful_submission_message)
end
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
scenario 'creating a release for a minor', js: true do
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
@@ -47,6 +65,7 @@ feature "User managing medical releases" do
fill_in guardian_first_name_field, with: 'Guardian'
fill_in guardian_last_name_field, with: 'Name'
fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: "valid@email.com"
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
fill_in_person_address_fields
@@ -56,11 +75,6 @@ feature "User managing medical releases" do
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
- fill_in guardian_email_field, with: 'invalid@email'
- click_button submit_release_button
- expect(page).to have_content email_validation_error_for('Guardian')
-
- fill_in guardian_email_field, with: 'valid@email.com'
fill_in_guardian_address_fields
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
@@ -94,6 +108,7 @@ feature "User managing medical releases" do
fill_in guardian_first_name_field, with: 'Guardian'
fill_in guardian_last_name_field, with: 'Name'
fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: "valid@email.com"
fill_in person_first_name_field, with: 'Jane'
fill_in person_last_name_field, with: 'Doe'
fill_in_person_address_fields
@@ -103,11 +118,6 @@ feature "User managing medical releases" do
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
- fill_in guardian_email_field, with: 'invalid@email'
- click_button submit_release_button
- expect(page).to have_content email_validation_error_for('Guardian')
-
- fill_in guardian_email_field, with: 'valid@email.com'
fill_in_guardian_address_fields
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
@@ -121,6 +131,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 +443,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
diff --git a/spec/features/user_managing_misc_releases_spec.rb b/spec/features/user_managing_misc_releases_spec.rb
index 00e8528..2b13e05 100644
--- a/spec/features/user_managing_misc_releases_spec.rb
+++ b/spec/features/user_managing_misc_releases_spec.rb
@@ -7,7 +7,7 @@ feature "User managing misc releases" do
context 'when signed out' do
scenario 'creating a release for an adult', js: true do
project = create(:project, members: current_user, account: current_user.primary_account)
- contract_template = create(:misc_release_contract_template,
+ contract_template = create(:misc_release_contract_template,
question_1_text: "Question 1",
project: project)
@@ -30,6 +30,24 @@ feature "User managing misc releases" do
expect(page).to have_content(successful_submission_message)
end
+
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
end
context "when signed in as account manager" do
@@ -177,4 +195,8 @@ feature "User managing misc releases" do
def successful_submission_message
"Your release was successfully submitted. Thank you."
end
+
+ def person_is_minor_checkbox
+ 'misc_release_minor'
+ end
end
diff --git a/spec/features/user_managing_talent_releases_spec.rb b/spec/features/user_managing_talent_releases_spec.rb
index 6362a58..df56bb6 100644
--- a/spec/features/user_managing_talent_releases_spec.rb
+++ b/spec/features/user_managing_talent_releases_spec.rb
@@ -32,6 +32,24 @@ feature "User managing talent releases" do
expect(page).to have_content("Your release was successfully submitted. Thank you.")
end
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_talent_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
scenario "creating a release for a minor", js: true do
contract_template = create(:contract_template, project: project)
@@ -48,6 +66,8 @@ feature "User managing talent releases" do
fill_in guardian_first_name_field, with: "Guardian"
fill_in guardian_last_name_field, with: "Name"
fill_in guardian_phone_field, with: "001101"
+ fill_in guardian_email_field, with: "valid@email.com"
+ fill_in_guardian_address_fields
fill_in person_first_name_field, with: "Jane"
fill_in person_last_name_field, with: "Doe"
fill_in person_address_field, with: "123 Test Lane, New York, NY 10000"
@@ -88,6 +108,9 @@ feature "User managing talent releases" do
fill_in guardian_first_name_field, with: "Guardian"
fill_in guardian_last_name_field, with: "Name"
fill_in guardian_phone_field, with: "001101"
+ fill_in guardian_email_field, with: "valid@email.com"
+
+ fill_in_guardian_address_fields
fill_in guardian_2_first_name_field, with: "Second"
fill_in guardian_2_last_name_field, with: "Guardian"
@@ -387,10 +410,30 @@ feature "User managing talent releases" do
"talent_release[guardian_2_last_name]"
end
+ def guardian_address_street1_field
+ "talent_release[guardian_address_street1]"
+ end
+
+ def guardian_address_city_field
+ "talent_release[guardian_address_city]"
+ end
+
+ def guardian_address_state_field
+ "talent_release[guardian_address_state]"
+ end
+
+ def guardian_address_zip_field
+ "talent_release[guardian_address_zip]"
+ end
+
def guardian_phone_field
"Guardian phone"
end
+ def guardian_email_field
+ "talent_release[guardian_email]"
+ end
+
def guardian_photo_field
"talent_release[guardian_photo]"
end
@@ -505,4 +548,11 @@ feature "User managing talent releases" do
def contract_field
"talent_release[contract]"
end
+
+ def fill_in_guardian_address_fields
+ fill_in guardian_address_street1_field, with: "124 Test Lane"
+ fill_in guardian_address_city_field, with: "New York"
+ fill_in guardian_address_state_field, with: "NY"
+ fill_in guardian_address_zip_field, with: '1000'
+ end
end
diff --git a/spec/models/medical_release_spec.rb b/spec/models/medical_release_spec.rb
index 917c3ef..53860fb 100644
--- a/spec/models/medical_release_spec.rb
+++ b/spec/models/medical_release_spec.rb
@@ -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