From de9f4a09e8fe3508236c99003f1df864a19bf8da Mon Sep 17 00:00:00 2001 From: Bilal Date: Mon, 27 Jul 2020 15:52:32 +0200 Subject: [PATCH] add specs --- spec/factories/material_releases.rb | 10 + .../user_managing_material_releases_spec.rb | 281 +++++++++++++++++- 2 files changed, 286 insertions(+), 5 deletions(-) diff --git a/spec/factories/material_releases.rb b/spec/factories/material_releases.rb index d4ac6d5..164979f 100644 --- a/spec/factories/material_releases.rb +++ b/spec/factories/material_releases.rb @@ -15,6 +15,16 @@ FactoryBot.define do end end + trait :minor do + minor true + guardian_first_name "Guardian1" + guardian_last_name "First" + guardian_2_first_name "Guardian2" + guardian_2_last_name "Second" + guardian_phone "1111" + guardian_2_phone "2222" + end + trait :with_photo do photos do path = Rails.root.join("spec", "fixtures", "files", "material_photo.png") diff --git a/spec/features/user_managing_material_releases_spec.rb b/spec/features/user_managing_material_releases_spec.rb index ae69e09..b98f5d6 100644 --- a/spec/features/user_managing_material_releases_spec.rb +++ b/spec/features/user_managing_material_releases_spec.rb @@ -40,6 +40,93 @@ feature "User managing material releases" do expect(MaterialRelease.last.photos.attached?).to eq true 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_material_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 + project = create(:project, members: current_user, account: current_user.primary_account) + contract_template = create(:contract_template, project: project) + + visit new_account_project_contract_template_material_release_path(project.account, project, contract_template) + + expect(page).not_to have_content guardian_information_heading.upcase + expect(page).not_to have_content guardian_photo_heading.upcase + + page.check person_is_minor_checkbox + + expect(page).to have_content guardian_information_heading.upcase + expect(page).to have_content guardian_photo_heading.upcase + expect(page).to have_content guardian_email_field.titleize + + fill_all_fields + + 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' + attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all + fill_in_guardian_address_fields + + draw_signature file_fixture("signature.png"), signature_field + + click_button submit_release_button + + expect(page).to have_content(successful_submission_message) + end + + scenario 'creating a release for a minor with two guardians', js: true do + project = create(:project, members: current_user, account: current_user.primary_account) + contract_template = create(:contract_template, project: project) + + visit new_account_project_contract_template_material_release_path(project.account, project, contract_template) + + expect(page).not_to have_content guardian_2_information_heading.upcase + expect(page).not_to have_content guardian_2_photo_heading.upcase + + page.check person_is_minor_checkbox + expect(page).to have_content guardian_information_heading.upcase + expect(page).to have_content guardian_photo_heading.upcase + expect(page).to have_content guardian_email_field.titleize + + expect(page).to have_content guardian_2_information_heading.upcase + expect(page).to have_content guardian_2_photo_heading.upcase + expect(page).to have_content guardian_2_phone_field.titleize + + fill_all_fields + + 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' + attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all + fill_in_guardian_address_fields + draw_signature file_fixture("signature.png"), signature_field + + fill_in guardian_2_first_name_field, with: 'Second' + fill_in guardian_2_last_name_field, with: 'Guardian' + fill_in guardian_2_phone_field, with: '999' + + click_button submit_release_button + + expect(page).to have_content(successful_submission_message) + expect(MaterialRelease.last.guardian_2_first_name).to eq 'Second' + end + scenario "creating release is possible only after filling all fields", js: true do contract_template = create(:contract_template, project: project) @@ -98,7 +185,7 @@ feature "User managing material releases" do sign_in current_user end - scenario "creating a release", js: true do + scenario "creating a release for and adult", js: true do visit new_project_material_release_path(project) by "attaching only a contract" do @@ -120,13 +207,94 @@ feature "User managing material releases" do click_button create_release_button expect(page).to have_content(create_release_notice) - expect(page).to have_photo("material_photo.png") + expect(page).to have_photo("material_photo.png", visible: :all) click_on "Manage" expect(page).to have_link("Download") end end + scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do + visit new_project_material_release_path(project) + + 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 + visit new_project_material_release_path(project) + + expect(page).not_to have_content guardian_information_heading.upcase + expect(page).not_to have_content guardian_photo_heading + + page.check person_is_minor_checkbox + + expect(page).to have_content guardian_information_heading.upcase + expect(page).to have_content guardian_photo_heading + expect(page).to have_content guardian_email_field.titleize + + fill_in_release_fields name: "Apple Laptop" + attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false + + 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' + attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all + fill_in_guardian_address_fields + + click_button import_release_button + + expect(page).to have_content successful_import_message + expect(MaterialRelease.last.guardian_first_name).to eq 'Guardian' + end + + scenario "creating a release for a minor with two guardians", js: true do + visit new_project_material_release_path(project) + + expect(page).not_to have_content guardian_2_information_heading.upcase + expect(page).not_to have_content guardian_2_photo_heading + + page.check person_is_minor_checkbox + + expect(page).to have_content guardian_information_heading.upcase + expect(page).to have_content guardian_photo_heading + expect(page).to have_content guardian_email_field.titleize + + expect(page).to have_content guardian_2_information_heading.upcase + expect(page).to have_content guardian_2_photo_heading + expect(page).to have_content guardian_2_phone_field.titleize + + fill_in_release_fields name: "Apple Laptop" + attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false + + 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' + attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all + fill_in_guardian_address_fields + + fill_in guardian_2_first_name_field, with: 'Second' + fill_in guardian_2_last_name_field, with: 'Guardian' + fill_in guardian_2_phone_field, with: '999' + + click_button import_release_button + + expect(page).to have_content successful_import_message + expect(MaterialRelease.last.guardian_first_name).to eq 'Guardian' + expect(MaterialRelease.last.guardian_2_first_name).to eq 'Second' + end + scenario "updating an existing release", js: true do material_release = create(:material_release, :non_native, project: project) @@ -190,7 +358,7 @@ feature "User managing material releases" do click_on "Save Changes" expect(page).to have_content("The release has been updated") - expect(page).to have_photo("material_photo.png") + expect(page).to have_photo("material_photo.png", visible: :all) end scenario "viewing the contract PDF" do @@ -419,8 +587,8 @@ feature "User managing material releases" do "material_release[person_address_zip]" end - def have_photo(filename) - have_selector("img[src*='#{filename}']") + def have_photo(filename, visible: true) + have_selector("img[src*='#{filename}']", visible: visible) end def import_material_release_link(project) @@ -542,4 +710,107 @@ feature "User managing material releases" do def date_issued t 'contracts.for_office_use_only.description_labels.date_issued' end + + def person_is_minor_checkbox + 'material_release_minor' + end + + def guardian_2_first_name_field + t 'helpers.label.material_release.guardian_2_first_name' + end + + def guardian_2_last_name_field + t 'helpers.label.material_release.guardian_2_last_name' + end + + def guardian_2_phone_field + t 'helpers.label.material_release.guardian_2_phone' + end + + def guardian_first_name_field + t 'helpers.label.material_release.guardian_first_name' + end + + def guardian_last_name_field + t 'helpers.label.material_release.guardian_last_name' + end + + def guardian_phone_field + t 'helpers.label.material_release.guardian_phone' + end + + def guardian_email_field + t 'helpers.label.material_release.guardian_email' + end + + def guardian_address_street1_field + t('helpers.label.material_release.guardian_address_street1') + end + + def guardian_address_city_field + t('helpers.label.material_release.guardian_address_city') + end + + def guardian_address_state_field + t('helpers.label.material_release.guardian_address_state') + end + + def guardian_address_zip_field + t('helpers.label.material_release.guardian_address_zip') + end + + def guardian_photo_field + 'material_release[guardian_photo]' + end + + def guardian_2_photo_field + 'material_release[guardian_2_photo]' + 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 + + def submit_release_button + 'I have read and agree to the above' + end + + def successful_submission_message + 'Your release was successfully submitted. Thank you.' + end + + def guardian_information_heading + t 'public.material_releases.new.guardian_info.heading' + end + + def guardian_photo_heading + t 'public.material_releases.new.guardian_photo.heading' + end + + def guardian_2_information_heading + t 'public.material_releases.new.guardian_2_info.heading' + end + + def guardian_2_photo_heading + t 'public.material_releases.new.guardian_2_photo.heading' + end + + def contract_field + 'material_release[contract]' + end + + def import_release_button + t 'helpers.submit.material_release.create' + end + + def successful_import_message + t 'material_releases.create.notice' + end + + def signature_field + 'material_release_signature_base64' + end end