175 lines
5.5 KiB
Ruby
175 lines
5.5 KiB
Ruby
require "rails_helper"
|
|
|
|
feature "User managing projects" do
|
|
let(:user) { create(:user, :account_manager) }
|
|
|
|
before do
|
|
sign_in(user)
|
|
end
|
|
|
|
scenario "creating a new project", js: true do
|
|
visit new_project_path
|
|
|
|
it_also "requires a project name" do
|
|
click_on "Create Project"
|
|
|
|
expect(page).to have_content "can't be blank"
|
|
end
|
|
|
|
fill_in "Name", with: "Avengers"
|
|
select "Other", from: "Client"
|
|
fill_in "Client name", with: "My Client"
|
|
uncheck "Appearance Release"
|
|
check "Location Release"
|
|
click_on "Create Project"
|
|
|
|
expect(page).to have_content "The project has been created"
|
|
expect(page).to have_content "Avengers"
|
|
expect(page).to have_content /My Client/i
|
|
expect(page).not_to have_content "Appearance Releases"
|
|
expect(page).to have_content "Location Releases"
|
|
end
|
|
|
|
scenario "editing a project", js: true do
|
|
project = create(:project, members: user, account: user.primary_account, name: "Avengers", client_name: "Marvel")
|
|
|
|
visit projects_path
|
|
find('button.btn-white').click
|
|
click_on "Edit"
|
|
|
|
it_also "requires a project name" do
|
|
fill_in "Name", with: ""
|
|
click_on "Update Project"
|
|
|
|
expect(page).to have_content "can't be blank"
|
|
end
|
|
|
|
fill_in "Name", with: "Justice League"
|
|
select "Other", from: "Client"
|
|
fill_in "Client name", with: "DC"
|
|
uncheck "Appearance Release"
|
|
check "Location Release"
|
|
click_on "Update Project"
|
|
|
|
expect(page).to have_content "The project has been updated"
|
|
expect(page).to have_content "Justice League"
|
|
expect(page).to have_content /DC/i
|
|
expect(page).not_to have_content "Appearance Releases"
|
|
expect(page).to have_content "Location Releases"
|
|
end
|
|
|
|
scenario "deleting a project", js: true do
|
|
skip "This functionality is no longer available"
|
|
|
|
project = create(:project, members: user, name: "Avengers", account: user.primary_account)
|
|
create(:appearance_release, project: project)
|
|
|
|
visit projects_path
|
|
|
|
expect(page).to have_content("Avengers")
|
|
|
|
click_on "button"
|
|
accept_alert do
|
|
click_on "Delete"
|
|
end
|
|
|
|
expect(page).to have_content "The project has been deleted"
|
|
expect(page).not_to have_content "Avengers"
|
|
end
|
|
|
|
scenario "all features are enabled" do
|
|
project = create(:project, members: user, account: user.primary_account)
|
|
enable_all_project_features(project)
|
|
|
|
visit project_path(project)
|
|
|
|
expect(page).to have_content("Talent Releases")
|
|
expect(page).to have_content("Appearance Releases")
|
|
expect(page).to have_content("Acquired Media Releases")
|
|
expect(page).to have_content("Material Releases")
|
|
expect(page).to have_content("Music Releases")
|
|
end
|
|
|
|
scenario "some features are disabled" do
|
|
project = create(:project, members: user, account: user.primary_account)
|
|
disable_project_features(project, :material_release, :music_release)
|
|
|
|
visit project_path(project)
|
|
|
|
expect(page).to have_content("Talent Releases")
|
|
expect(page).to have_content("Appearance Releases")
|
|
expect(page).to have_content("Acquired Media Releases")
|
|
expect(page).not_to have_content("Material Releases")
|
|
expect(page).not_to have_content("Music Releases")
|
|
end
|
|
|
|
scenario 'searching for a project', js: true do
|
|
project_1 = create(:project, members: user, account: user.primary_account, name: "America's Greatest TV Show")
|
|
project_2 = create(:project, members: user, account: user.primary_account, name: "Wild Animals")
|
|
|
|
visit projects_path
|
|
|
|
expect(page).to have_content("America's Greatest TV Show")
|
|
expect(page).to have_content("Wild Animals")
|
|
|
|
within 'form#search' do
|
|
fill_in 'Search', with: 'Greatest'
|
|
find('button.rounded-pill-left').click
|
|
end
|
|
|
|
expect(page).to have_content("America's Greatest TV Show")
|
|
expect(page).not_to have_content("Wild Animals")
|
|
expect(page).to have_field('Search', with: 'Greatest')
|
|
end
|
|
|
|
# TODO: What about the welcome page when there are no existing projects?
|
|
|
|
context "for a manager" do
|
|
let(:user) { create(:user, :manager) }
|
|
let!(:project) { create(:project, members: user, account: user.primary_account) }
|
|
|
|
scenario "can manage projects" do
|
|
visit projects_path
|
|
|
|
expect(page).not_to have_link("Create New Project")
|
|
expect(page).to have_link("Edit", href: edit_project_path(project))
|
|
expect(page).not_to have_link("Delete", href: project_path(project))
|
|
# expect(page).to have_link("Archive", href: project_archivals_path(project))
|
|
end
|
|
end
|
|
|
|
context "for an associate" do
|
|
let(:user) { create(:user, :associate) }
|
|
let!(:project) { create(:project, members: user, account: user.primary_account) }
|
|
scenario "cannot manage projects" do
|
|
visit projects_path
|
|
|
|
expect(page).not_to have_link("Create New Project")
|
|
expect(page).not_to have_link("Edit", href: edit_project_path(project))
|
|
expect(page).not_to have_link("Delete", href: project_path(project))
|
|
# expect(page).not_to have_link("Archive", href: project_archivals_path(project))
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def enable_all_project_features(project)
|
|
disable_project_features(project)
|
|
end
|
|
|
|
def disable_project_features(project, *features)
|
|
defaults = {
|
|
appearance_release: true,
|
|
location_release: true,
|
|
material_release: true,
|
|
acquired_media_release: true,
|
|
talent_release: true,
|
|
music_release: true,
|
|
video_analysis: true,
|
|
}
|
|
disabled_features = Array.wrap(features).each_with_object({}) { |feature, hash| hash[feature] = false }
|
|
|
|
project.settings(:features).update(defaults.merge(disabled_features))
|
|
end
|
|
end
|