From 4266e9e72631294783194eaa2c08bb55629b10f0 Mon Sep 17 00:00:00 2001 From: Bilal Date: Thu, 2 Jul 2020 18:06:25 +0200 Subject: [PATCH 1/3] add required label dynamically --- app/assets/javascripts/update_required_status.js | 13 +++++++++++++ app/views/public/appearance_releases/new.html.erb | 12 ++++++------ app/views/public/medical_releases/new.html.erb | 14 ++++++-------- app/views/public/misc_releases/new.html.erb | 14 ++++++-------- app/views/public/talent_releases/new.html.erb | 12 ++++++------ app/views/shared/_address_fields.html.erb | 9 +++++---- 6 files changed, 42 insertions(+), 32 deletions(-) create mode 100644 app/assets/javascripts/update_required_status.js diff --git a/app/assets/javascripts/update_required_status.js b/app/assets/javascripts/update_required_status.js new file mode 100644 index 0000000..a624317 --- /dev/null +++ b/app/assets/javascripts/update_required_status.js @@ -0,0 +1,13 @@ +$(document).on("turbolinks:load", function() { + $("[data-behavior=update-required-status]").click(function(e) { + const required = !!($(this)[0] && $(this)[0].checked); + + + $("[data-required-tag=guardian]").each(function(index, element) { + const labelForField = element.previousSibling; + + element.required = required; + labelForField.classList.add("required"); + }); + }); +}); \ No newline at end of file diff --git a/app/views/public/appearance_releases/new.html.erb b/app/views/public/appearance_releases/new.html.erb index c88d7d6..fc80010 100644 --- a/app/views/public/appearance_releases/new.html.erb +++ b/app/views/public/appearance_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 %> @@ -72,12 +72,12 @@
!@appearance_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %> - <%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
- <%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %> + <%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/public/medical_releases/new.html.erb b/app/views/public/medical_releases/new.html.erb index 7f4dd2f..0f73c32 100644 --- a/app/views/public/medical_releases/new.html.erb +++ b/app/views/public/medical_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.medical_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %> + <%= form.check_box :minor, label: t("helpers.label.medical_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 %> @@ -59,14 +59,12 @@
!@medical_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
-
- <%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6" %> -
- <%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor? %> + <%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/public/misc_releases/new.html.erb b/app/views/public/misc_releases/new.html.erb index 804068d..a2e8c50 100644 --- a/app/views/public/misc_releases/new.html.erb +++ b/app/views/public/misc_releases/new.html.erb @@ -11,7 +11,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 %> @@ -56,14 +56,12 @@
!@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" %> -- 2.47.3 From 61e976ebd29f81725c0aa4555d1eb2838db16fb9 Mon Sep 17 00:00:00 2001 From: Bilal Date: Thu, 2 Jul 2020 19:09:54 +0200 Subject: [PATCH 2/3] add specs --- .../user_managing_appearance_releases_spec.rb | 18 ++++++++++++++ .../user_managing_medical_releases_spec.rb | 18 ++++++++++++++ .../user_managing_misc_releases_spec.rb | 24 ++++++++++++++++++- .../user_managing_talent_releases_spec.rb | 18 ++++++++++++++ 4 files changed, 77 insertions(+), 1 deletion(-) diff --git a/spec/features/user_managing_appearance_releases_spec.rb b/spec/features/user_managing_appearance_releases_spec.rb index 9335a0f..9b974d0 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)) diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb index 59510fb..28186df 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)) 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..5cafffb 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) -- 2.47.3 From aea6aaea5171bf2f06d01f7f49440886c17582ca Mon Sep 17 00:00:00 2001 From: Bilal Date: Thu, 2 Jul 2020 19:30:50 +0200 Subject: [PATCH 3/3] fix specs --- .../user_managing_appearance_releases_spec.rb | 12 ++----- .../user_managing_medical_releases_spec.rb | 12 ++----- .../user_managing_talent_releases_spec.rb | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/spec/features/user_managing_appearance_releases_spec.rb b/spec/features/user_managing_appearance_releases_spec.rb index 9b974d0..986d427 100644 --- a/spec/features/user_managing_appearance_releases_spec.rb +++ b/spec/features/user_managing_appearance_releases_spec.rb @@ -68,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 @@ -78,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' @@ -117,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 @@ -127,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 28186df..76f370e 100644 --- a/spec/features/user_managing_medical_releases_spec.rb +++ b/spec/features/user_managing_medical_releases_spec.rb @@ -65,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 @@ -74,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' @@ -112,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 @@ -121,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' diff --git a/spec/features/user_managing_talent_releases_spec.rb b/spec/features/user_managing_talent_releases_spec.rb index 5cafffb..df56bb6 100644 --- a/spec/features/user_managing_talent_releases_spec.rb +++ b/spec/features/user_managing_talent_releases_spec.rb @@ -66,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" @@ -106,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" @@ -405,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 @@ -523,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 -- 2.47.3