Initial commit
This commit is contained in:
155
spec/features/user_managing_projects_spec.rb
Normal file
155
spec/features/user_managing_projects_spec.rb
Normal file
@@ -0,0 +1,155 @@
|
||||
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
|
||||
click_on "button"
|
||||
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
|
||||
|
||||
# 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
|
||||
Reference in New Issue
Block a user