181 lines
5.6 KiB
Ruby
181 lines
5.6 KiB
Ruby
require "rails_helper"
|
|
|
|
feature "User managing music releases" do
|
|
let(:current_user) { create(:user, :manager) }
|
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
|
|
|
scenario "can perform crud actions" do
|
|
release_data = attributes_for(:music_release)
|
|
|
|
sign_in current_user
|
|
visit project_music_releases_path(project)
|
|
|
|
by "creating a release" do
|
|
click_link *import_music_release_link(project)
|
|
expect(page).to have_content "For optimal accuracy, please ensure music file names match the source file name in the editing sequence."
|
|
fill_in_release_fields release_data
|
|
fill_in_exploitable_rights
|
|
click_button create_release_button
|
|
expect(page).to have_content(create_release_notice)
|
|
expect(page).to have_content(release_data[:name])
|
|
end
|
|
|
|
and_by "updating an existing release" do
|
|
click_link *update_music_release_link(MusicRelease.last)
|
|
|
|
fill_in_release_fields name: "New release name"
|
|
select "Other", from: "Applicable Media"
|
|
fill_in "Describe other applicable media", with: "New Test"
|
|
|
|
click_button update_release_button
|
|
|
|
expect(page).to have_content(update_release_notice)
|
|
expect(page).to have_content("New release name")
|
|
end
|
|
|
|
and_by "deleting an existing release" do
|
|
click_link *destroy_music_release_link(MusicRelease.last)
|
|
|
|
expect(page).to have_content(destroy_release_alert)
|
|
expect(page).not_to have_content("New release name")
|
|
end
|
|
end
|
|
|
|
scenario "creating a music release with validation errors", js: true do
|
|
sign_in current_user
|
|
visit new_project_music_release_path(project)
|
|
|
|
by "attaching only a contract" do
|
|
attach_file "music_release[contract]", Rails.root.join(file_fixture("contract.pdf")), visible: false
|
|
click_button create_release_button
|
|
|
|
expect(page).to have_invalid_field(music_release_name_field)
|
|
end
|
|
|
|
and_by "attaching files" do
|
|
drop_file Rails.root.join(file_fixture("audio.mp3")), type: "file-info-dropzone"
|
|
click_button create_release_button
|
|
|
|
expect(page).to have_invalid_field(music_release_name_field)
|
|
end
|
|
|
|
and_by "filling out the remaining information" do
|
|
fill_in_release_fields name: "Big Media OST"
|
|
click_button create_release_button
|
|
|
|
expect(page).to have_content(create_release_notice)
|
|
click_on "Manage"
|
|
expect(page).to have_link("Download")
|
|
end
|
|
end
|
|
|
|
scenario "searching for a release", js: true do
|
|
collection1 = create(:music_release, name: "EDM Music", project: project)
|
|
collection2 = create(:music_release, name: "Classical Music", project: project)
|
|
|
|
sign_in current_user
|
|
visit project_music_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
|
|
|
|
context "when the user is account manager" do
|
|
let(:current_user) { create(:user, :account_manager) }
|
|
|
|
before do
|
|
sign_in current_user
|
|
end
|
|
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(:music_release, name: "EDM Music", project: project)
|
|
|
|
visit project_music_releases_path(project)
|
|
|
|
click_on "Manage"
|
|
expect(page).not_to have_link("Download", exact: true)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def music_release_name_field
|
|
"music_release[name]"
|
|
end
|
|
|
|
def import_music_release_link(project)
|
|
["Import Release", href: new_project_music_release_path(project)]
|
|
end
|
|
|
|
def update_music_release_link(music_release)
|
|
["Edit", href: edit_music_release_path(music_release)]
|
|
end
|
|
|
|
def destroy_music_release_link(music_release)
|
|
["Delete", href: music_release_path(music_release)]
|
|
end
|
|
|
|
def fill_in_release_fields(data)
|
|
fill_in "music_release[name]", with: data[:name]
|
|
fill_in "music_release[person_first_name]", with: data[:person_first_name]
|
|
fill_in "music_release[person_last_name]", with: data[:person_last_name]
|
|
|
|
fill_in "music_release_composers_attributes_0_name", with: "composer name"
|
|
fill_in "music_release_composers_attributes_0_affiliation", with: "composer affiliation"
|
|
fill_in "music_release_composers_attributes_0_percentage", with: 100
|
|
fill_in "music_release_composers_attributes_0_cae_number", with: "CAE123456789"
|
|
|
|
fill_in "music_release_publishers_attributes_0_name", with: "publisher name"
|
|
fill_in "music_release_publishers_attributes_0_affiliation", with: "publisher affiliation"
|
|
fill_in "music_release_publishers_attributes_0_percentage", with: 100
|
|
end
|
|
|
|
def create_release_button
|
|
t "helpers.submit.music_release.create"
|
|
end
|
|
|
|
def create_release_notice
|
|
t "music_releases.create.notice"
|
|
end
|
|
|
|
def update_release_button
|
|
t "helpers.submit.music_release.update"
|
|
end
|
|
|
|
def update_release_notice
|
|
t "music_releases.update.notice"
|
|
end
|
|
|
|
def destroy_release_alert
|
|
t "music_releases.destroy.alert"
|
|
end
|
|
|
|
def fill_in_exploitable_rights
|
|
select "Other", from: "Applicable Media"
|
|
fill_in "Describe other applicable media", with: "Test"
|
|
select "Other", from: "Territory"
|
|
fill_in "Describe other territory", with: "Test"
|
|
select "Other", from: "Term"
|
|
fill_in "Describe other term", with: "Test"
|
|
select "Other", from: "Restriction"
|
|
fill_in "Describe other restrictions", with: "Test"
|
|
end
|
|
end
|