require "rails_helper" feature "User managing acquired_media releases" do let(:current_user) { create(:user, :manager) } let(:project) { create(:project, members: current_user, account: current_user.primary_account) } context "when signed out" do scenario "United States is default country" do contract_template = create(:contract_template, project: project) visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template) expect(country_field_value).to eq "US" end 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) by "filling out the form" do 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" draw_signature file_fixture("signature.png"), "acquired_media_release_signature_base64" end 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 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 contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text) visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template) expect(page).to have_content dummy_signature_legal_text end end context "when signed in" do before do sign_in current_user end scenario "index table shows owner info" do release = create(:acquired_media_release, :with_owner_info, :with_address, project: project) visit project_acquired_media_releases_path(project) expect(page).to have_content owner_info_table_header expect(page).to have_content release.person_first_name expect(page).to have_content release.person_last_name expect(page).to have_content release.person_phone expect(page).to have_content release.person_email expect(page).to have_content release.person_address_street1 expect(page).to have_content release.person_address_city expect(page).to have_content release.person_address_state expect(page).to have_content release.person_address_zip expect(page).to have_content release.person_address_country 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 resize_window_to(1_000, 1_000) do release_data = { name: "Test Acquired Media Release", applicable_media: ApplicableMedium.last.label, territory: Territory.last.label, term: Term.last.label, restriction: Restriction.first.label, restriction_text: "Not available in China", } sign_in current_user visit new_project_acquired_media_release_path(project) by "attaching only a contract" do 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) end by "attaching files" do drop_file Rails.root.join(file_fixture("video_file.mp4")), type: "dropzone" click_button create_release_button expect(page).to have_invalid_field(acquired_media_name_field) end by "filling out the remaining information" do fill_in_release_fields release_data click_button create_release_button expect(page).to have_content(create_release_notice) expect(page).to have_content("1") click_on "Manage" expect(page).to have_link("Download") end it_also "updates an existing release" do click_link "Edit" within ".dropzone" do expect(page).to have_filename("video_file.mp4") end expect(page).to have_filled_in_data(release_data) fill_in_release_fields name: "New name" drop_file Rails.root.join(file_fixture("person_photo.png")), type: "dropzone" click_button update_release_button expect(page).to have_content(update_release_notice) expect(page).to have_content("New name") expect(page).to have_content("2") end it_also "deletes an existing release" do click_button "Manage" accept_alert do click_link "Delete" end expect(page).not_to have_content("New name") end end end scenario "viewing the contract PDF for an adult" do acquired_media_release = create(:acquired_media_release_with_contract_template, :native, project: project, person_name: "Jane Doe", tag_list: "Woman, Brunette", notes: [ build(:note, content: "Note 1", user: build(:user, email: "jane.doe@test.com"), email: "jane.doe@test.com", created_at: DateTime.new(2020, 2, 21, 12, 0, 0), ), build(:note, content: "Note 2", user: build(:user, email: "john.doe@test.com"), email: "john.doe@test.com", created_at: DateTime.new(2020, 2, 20, 11, 0, 0), ), ] ) sign_in(current_user) 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("NOTES") expect(pdf_body).to have_content("Note 1") expect(pdf_body).to have_content("jane.doe@test.com") expect(pdf_body).to have_content("2/21/20 12:00 PM") expect(pdf_body).to have_content("Note 2") expect(pdf_body).to have_content("john.doe@test.com") expect(pdf_body).to have_content("2/20/20 11:00 AM") expect(pdf_body).to have_content("TAGS") expect(pdf_body).to have_content("Woman") expect(pdf_body).to have_content("Brunette") expect(pdf_body).to have_content("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) sign_in current_user visit project_acquired_media_releases_path(project) within "form#search" do fill_in "Search", with: "EDM" click_on "button" end expect(page).to have_content("EDM Music") expect(page).not_to have_content("Classical Music") expect(page).to have_field("Search", with: "EDM") end scenario "edit is visible for non-native release" do create(:acquired_media_release_with_contract_template, name: "EDM Music", project: project) sign_in current_user visit project_acquired_media_releases_path(project) click_on "Manage" expect(page).to have_link("Edit", exact: true) end scenario "edit is not visible for native release" do create(:acquired_media_release_with_contract_template, :native, name: "EDM Music", project: project) sign_in current_user visit project_acquired_media_releases_path(project) click_on "Manage" expect(page).not_to have_link("Edit", exact: true) end context "when the user is account manager" do end context "when the user is project manager" do end context "when the user is associate" do let(:current_user) { create(:user, :associate) } before do sign_in current_user end scenario "should not show download" do collection1 = create(:acquired_media_release_with_contract_template, name: "EDM Music", project: project) visit project_acquired_media_releases_path(project) click_on "Manage" expect(page).not_to have_link("Download", exact: true) end end end private def country_field_value find_field("acquired_media_release[person_address_country]").value end def acquired_media_name_field "acquired_media_release[name]" end def acquried_media_description_field "acquired_media_release[description]" end def acquried_media_owner_first_name "acquired_media_release[person_first_name]" end def acquried_media_owner_last_name "acquired_media_release[person_last_name]" end def acquired_media_person_title "acquired_media_release[person_title]" end def acquired_media_person_phone "acquired_media_release[person_phone]" end def acquired_media_person_email "acquired_media_release[person_email]" end def acquired_media_person_fax "acquired_media_release[person_fax]" end def acquired_media_person_address_street_1 "acquired_media_release[person_address_street1]" end def acquired_media_person_address_city "acquired_media_release[person_address_city]" end def acquired_media_person_address_state "acquired_media_release[person_address_state]" end def acquired_media_release_person_address_zip "acquired_media_release[person_address_zip]" end def acquired_media_category_fields find(:css, "#acquired_media_release_categories_video_footage").set(true) find(:css, "#acquired_media_release_categories_still_photograph").set(true) end def have_filename(filename) have_selector("span[data-dz-name]", text: filename) end def import_acquired_media_release_link(project) ["Import Release", href: new_project_acquired_media_release_path(project)] end def update_acquired_media_release_link(acquired_media_release) ["Edit", href: edit_acquired_media_release_path(acquired_media_release)] end def destroy_acquired_media_release_link(acquired_media_release) ["Delete", href: acquired_media_release_path(acquired_media_release)] end def fill_in_release_fields(data) fill_in "acquired_media_release[name]", with: data[:name] select_exploitable_right "applicable_medium", data[:applicable_medium] select_exploitable_right "territory", data[:territory] select_exploitable_right "term", data[:term] select_exploitable_right "restriction", data[:restriction] fill_in_exploitable_right_field("applicable_medium", data[:applicable_medium_text]) fill_in_exploitable_right_field("territory", data[:territory_text]) fill_in_exploitable_right_field("term", data[:term_text]) fill_in_exploitable_right_field("restriction", data[:restriction_text]) end def select_exploitable_right(name, value) if value.present? select value, from: "acquired_media_release[#{name}_id]" end end def fill_in_exploitable_right_field(name, text) if text.present? fill_in "acquired_media_release[#{name}_text]", with: text end end def view_release_pdf_link_for(acquired_media_release) ["Download", href: acquired_media_release_contracts_path(acquired_media_release, format: "pdf")] end def have_filled_in_data(data) have_field "acquired_media_release[name]", with: data[:name] have_field "acquired_media_release[acquired_medium_id]", with: data[:acquired_medium] have_field "acquired_media_release[acquired_medium_text]", with: data[:acquired_medium_text] have_field "acquired_media_release[territory_id]", with: data[:territory] have_field "acquired_media_release[territory_text]", with: data[:territory_text] have_field "acquired_media_release[term_id]", with: data[:term] have_field "acquired_media_release[term_text]", with: data[:term_text] have_field "acquired_media_release[restriction_id]", with: data[:restriction] have_field "acquired_media_release[restriction_text]", with: data[:restriction_text] end def create_release_button t "helpers.submit.acquired_media_release.create" end def create_release_notice t "acquired_media_releases.create.notice" end def update_release_button t "helpers.submit.acquired_media_release.update" end def update_release_notice t "acquired_media_releases.update.notice" end def destroy_release_alert t "acquired_media_releases.destroy.alert" end def dummy_signature_legal_text 'Some signature legal language' 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 def owner_info_table_header t 'acquired_media_releases.index.table_headers.owner_info' end end