Files
old-holivud2/spec/features/user_managing_projects_spec.rb
2020-08-20 06:50:51 +02:00

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