From e8851283d81a06b75cbccdfeb8063a1aef59994f Mon Sep 17 00:00:00 2001 From: Bilal Date: Mon, 27 Jul 2020 12:31:50 +0200 Subject: [PATCH] add specs --- config/locales/en.yml | 8 +- config/locales/es.yml | 7 + spec/factories/acquired_media_releases.rb | 10 + ...r_managing_acquired_media_releases_spec.rb | 338 +++++++++++++++++- 4 files changed, 357 insertions(+), 6 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index c5acb94..46f0db3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -47,7 +47,7 @@ en: files: heading: 2 of 3 Files guardian_2_info: - heading: Guardian Information (if company requires) + heading: Second Guardian Information (if company requires) guardian_info: heading: Guardian Information photos: @@ -461,6 +461,10 @@ en: guardian_address_street1: Guardian address guardian_address_street2: Guardian address (Line 2) guardian_address_zip: Guardian zip code + guardian_email: Guardian email + guardian_first_name: Guardian first name + guardian_last_name: Guardian last name + guardian_phone: Guardian phone minor: Is the person a minor? name: Name of property person_address: Address @@ -747,6 +751,8 @@ en: acquired_media_release: create: Import Release update: Save Changes + acquired_media_releases: + create: Import Release appearance_release: create: Import Release update: Save Changes diff --git a/config/locales/es.yml b/config/locales/es.yml index 46f8fce..db3048b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -2,6 +2,8 @@ es: acquired_media_releases: acquired_media_release: no_media: No Media (ES) + create: + notice: The acquired media release has been created (ES) form: guardian_2_info: heading: Guardian Information (if company requires) [ES] @@ -249,6 +251,9 @@ es: guardian_address_street1: Dirección del tutor legal guardian_address_street2: Dirección del tutor legal (Línea 2) guardian_address_zip: Guardian zip code (ES) + guardian_email: Guardian email (ES) + guardian_first_name: Guardian first name (ES) + guardian_last_name: Guardian last name (ES) guardian_name: Nómbre del tutor legal guardian_phone: Número de teléfono del tutor legal minor: El firmante es un menor @@ -358,6 +363,8 @@ es: person_name: Jane Doe person_phone: 555-555-5555 submit: + acquired_media_releases: + create: Import Release (ES) appearance_release: create: Crear Autorización broadcast: diff --git a/spec/factories/acquired_media_releases.rb b/spec/factories/acquired_media_releases.rb index 699d7ac..952f049 100644 --- a/spec/factories/acquired_media_releases.rb +++ b/spec/factories/acquired_media_releases.rb @@ -18,6 +18,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 + factory :acquired_media_release_with_contract_template do after(:build) do |acquired_media_release, _| acquired_media_release.contract_template = build(:acquired_media_release_contract_template) diff --git a/spec/features/user_managing_acquired_media_releases_spec.rb b/spec/features/user_managing_acquired_media_releases_spec.rb index 453a12e..61ac8c8 100644 --- a/spec/features/user_managing_acquired_media_releases_spec.rb +++ b/spec/features/user_managing_acquired_media_releases_spec.rb @@ -12,7 +12,7 @@ feature "User managing acquired_media releases" do expect(country_field_value).to eq "US" end - scenario "creating a release", js: true do + scenario "creating a release for an adult", js: true do contract_template = create(:contract_template, project: project) visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template) @@ -35,11 +35,121 @@ feature "User managing acquired_media releases" do draw_signature file_fixture("signature.png"), "acquired_media_release_signature_base64" end - click_button "I have read and agree to the above" + click_button submit_release_button expect(AcquiredMediaRelease.last.categories).to include("Video Footage") expect(AcquiredMediaRelease.last.categories).to include("Still Photograph") - expect(page).to have_content("Your release was successfully submitted. Thank you.") + 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_acquired_media_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_acquired_media_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_in acquired_media_name_field, with: "Jane Doe" + acquired_media_category_fields + fill_in acquried_media_description_field, with: "Description" + fill_in acquried_media_owner_first_name, with: "Jane" + fill_in acquried_media_owner_last_name, with: "Doe" + fill_in acquired_media_person_title, with: "Ms." + fill_in acquired_media_person_phone, with: "555-5555-5555" + fill_in acquired_media_person_email, with: "person@example.com" + fill_in acquired_media_person_fax, with: "FAX" + fill_in acquired_media_person_address_street_1, with: "Street 1" + fill_in acquired_media_person_address_city, with: "City" + fill_in acquired_media_person_address_state, with: "State" + fill_in acquired_media_release_person_address_zip, with: "ZIP" + + 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"), "acquired_media_release_signature_base64" + + 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_acquired_media_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_in acquired_media_name_field, with: "Jane Doe" + acquired_media_category_fields + fill_in acquried_media_description_field, with: "Description" + fill_in acquried_media_owner_first_name, with: "Jane" + fill_in acquried_media_owner_last_name, with: "Doe" + fill_in acquired_media_person_title, with: "Ms." + fill_in acquired_media_person_phone, with: "555-5555-5555" + fill_in acquired_media_person_email, with: "person@example.com" + fill_in acquired_media_person_fax, with: "FAX" + fill_in acquired_media_person_address_street_1, with: "Street 1" + fill_in acquired_media_person_address_city, with: "City" + fill_in acquired_media_person_address_state, with: "State" + fill_in acquired_media_release_person_address_zip, with: "ZIP" + + 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"), "acquired_media_release_signature_base64" + + 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(AcquiredMediaRelease.last.guardian_2_first_name).to eq 'Second' end scenario "creating a release, if contract template contains signature legal language, it is shown" do @@ -51,6 +161,106 @@ feature "User managing acquired_media releases" do end context "when signed in" do + before do + sign_in current_user + end + + scenario "creating a release for an adult", js: true do + visit new_project_acquired_media_release_path(project) + + fill_in acquired_media_name_field, with: "Jane Doe" + acquired_media_category_fields + + attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false + + click_button import_release_button + + expect(page).to have_content successful_import_message + end + + scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do + visit new_project_acquired_media_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_acquired_media_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 acquired_media_name_field, with: "Jane Doe" + acquired_media_category_fields + 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(AcquiredMediaRelease.last.guardian_first_name).to eq 'Guardian' + end + + scenario "creating a release for a minor with two guardians", js: true do + visit new_project_acquired_media_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 acquired_media_name_field, with: "Jane Doe" + acquired_media_category_fields + 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(AcquiredMediaRelease.last.guardian_first_name).to eq 'Guardian' + expect(AcquiredMediaRelease.last.guardian_2_first_name).to eq 'Second' + end + scenario "creating, updating, destroying a release", js: true do release_data = { name: "Test Acquired Media Release", @@ -65,7 +275,7 @@ feature "User managing acquired_media releases" do visit new_project_acquired_media_release_path(project) by "attaching only a contract" do - attach_file "acquired_media_release[contract]", Rails.root.join(file_fixture("contract.pdf")), visible: false + attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false click_button create_release_button expect(page).to have_invalid_field(acquired_media_name_field) @@ -117,7 +327,7 @@ feature "User managing acquired_media releases" do end end - scenario "viewing the contract PDF" do + scenario "viewing the contract PDF for an adult" do acquired_media_release = create(:acquired_media_release_with_contract_template, :native, project: project, @@ -176,6 +386,25 @@ feature "User managing acquired_media releases" do expect(pdf_body).to have_content("Other files") end + scenario "viewing the contract PDF for a minor" do + acquired_media_release = create(:acquired_media_release_with_contract_template, + :native, + :minor, + project: project, + person_name: "Jane Doe") + + visit project_acquired_media_releases_path(project) + click_link *view_release_pdf_link_for(acquired_media_release) + + expect(content_type).to eq("application/pdf") + expect(pdf_body).to have_content acquired_media_release.guardian_first_name + expect(pdf_body).to have_content acquired_media_release.guardian_last_name + expect(pdf_body).to have_content acquired_media_release.guardian_2_first_name + expect(pdf_body).to have_content acquired_media_release.guardian_2_last_name + expect(pdf_body).to have_content acquired_media_release.guardian_phone + expect(pdf_body).to have_content acquired_media_release.guardian_2_phone + end + scenario "searching for a release", js: true do collection1 = create(:acquired_media_release, name: "EDM Music", project: project) collection2 = create(:acquired_media_release, name: "Classical Music", project: project) @@ -508,4 +737,103 @@ feature "User managing acquired_media releases" do def date_issued t 'contracts.for_office_use_only.description_labels.date_issued' end + + def person_is_minor_checkbox + 'acquired_media_release_minor' + end + + def guardian_2_first_name_field + t 'helpers.label.acquired_media_release.guardian_2_first_name' + end + + def guardian_2_last_name_field + t 'helpers.label.acquired_media_release.guardian_2_last_name' + end + + def guardian_2_phone_field + t 'helpers.label.acquired_media_release.guardian_2_phone' + end + + def guardian_first_name_field + t 'helpers.label.acquired_media_release.guardian_first_name' + end + + def guardian_last_name_field + t 'helpers.label.acquired_media_release.guardian_last_name' + end + + def guardian_phone_field + t 'helpers.label.acquired_media_release.guardian_phone' + end + + def guardian_email_field + t 'helpers.label.acquired_media_release.guardian_email' + end + + def guardian_address_street1_field + t('helpers.label.acquired_media_release.guardian_address_street1') + end + + def guardian_address_city_field + t('helpers.label.acquired_media_release.guardian_address_city') + end + + def guardian_address_state_field + t('helpers.label.acquired_media_release.guardian_address_state') + end + + def guardian_address_zip_field + t('helpers.label.acquired_media_release.guardian_address_zip') + end + + def guardian_photo_field + 'acquired_media_release[guardian_photo]' + end + + def guardian_2_photo_field + 'acquired_media_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.acquired_media_releases.new.guardian_info.heading' + end + + def guardian_photo_heading + t 'public.acquired_media_releases.new.guardian_photo.heading' + end + + def guardian_2_information_heading + t 'public.acquired_media_releases.new.guardian_2_info.heading' + end + + def guardian_2_photo_heading + t 'public.acquired_media_releases.new.guardian_2_photo.heading' + end + + def contract_field + 'acquired_media_release[contract]' + end + + def import_release_button + t 'helpers.submit.acquired_media_releases.create' + end + + def successful_import_message + t 'acquired_media_releases.create.notice' + end end