Initial commit
This commit is contained in:
239
spec/controllers/talent_releases_controller_spec.rb
Normal file
239
spec/controllers/talent_releases_controller_spec.rb
Normal file
@@ -0,0 +1,239 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe TalentReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "responds successfully" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
release = create(:talent_release, project: project,
|
||||
person_first_name: "My",
|
||||
person_last_name: "Release",
|
||||
person_phone: "5551234567",
|
||||
person_email: "jane.doe@test.com")
|
||||
create(:note, notable: release, content: "Some notes here")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content "My Release"
|
||||
expect(response.body).to have_content "555-123-4567"
|
||||
expect(response.body).to have_content "jane.doe@test.com"
|
||||
expect(response.body).to have_content "Some notes here"
|
||||
expect(response.body).to have_link "Import Release"
|
||||
expect(response.body).to have_content "Manage"
|
||||
end
|
||||
|
||||
context "when there are no talent releases" do
|
||||
it "renders an empty message" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("Talent Releases will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
context "when there are many records" do
|
||||
it "paginates the table" do
|
||||
create_list(:talent_release, 20, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link("2", href: project_talent_releases_path(project, page: 2))
|
||||
end
|
||||
end
|
||||
|
||||
context "for xhr request" do
|
||||
it "filters the releases by a query param" do
|
||||
talent_releases = [
|
||||
create(:talent_release, person_name: "Adam Sandler", project: project),
|
||||
create(:talent_release, person_name: "Zoe Perry", project: project),
|
||||
]
|
||||
|
||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||
|
||||
expect(response.body).not_to have_content("Adam Sandler")
|
||||
expect(response.body).to have_content("Zoe Perry")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
it "responds successfully" do
|
||||
get :new, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "responds successfully when guardian photo is not sent" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.to change(TalentRelease, :count).by(1)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :talent_releases]
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
|
||||
it "responds successfully when guardian photo is sent" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: minor_talent_release_params }
|
||||
}.to change(TalentRelease, :count).by(1)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :talent_releases]
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
|
||||
it "enqueues headshot collection job" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.to have_enqueued_job(AddHeadshotCollectionUidToProjectJob).with(project)
|
||||
end
|
||||
|
||||
it "enqueues tagging job" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(TalentRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "TalentRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(TalentRelease).to receive(:save).and_return(false)
|
||||
end
|
||||
|
||||
it "re-renders the form" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.not_to change(TalentRelease, :count)
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
|
||||
it "does not enqueue any jobs" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, talent_release: talent_release_params }
|
||||
}.not_to have_enqueued_job
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
let(:non_native_talent_release) { create(:talent_release, project: project) }
|
||||
let(:native_talent_release) { create(:talent_release, :native, project: project) }
|
||||
|
||||
it "responds successfully for non-native release" do
|
||||
get :edit, params: { project_id: project, id: non_native_talent_release }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "responds with error for native release" do
|
||||
expect{get :edit, params: { id: native_talent_release }}.to raise_exception Pundit::NotAuthorizedError
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:talent_release) { create(:talent_release, project: project) }
|
||||
|
||||
it "responds successfully" do
|
||||
patch :update, params: { project_id: project, id: talent_release, talent_release: talent_release_params }
|
||||
|
||||
expect(response).to redirect_to [project, :talent_releases]
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
|
||||
it "enqueues headshot collection job" do
|
||||
expect {
|
||||
patch :update, params: { project_id: project, id: talent_release, talent_release: talent_release_params }
|
||||
}.to have_enqueued_job(AddHeadshotCollectionUidToProjectJob).with(project)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(TalentRelease).to receive(:save).and_return(false)
|
||||
end
|
||||
|
||||
it "re-renders the form" do
|
||||
patch :update, params: { project_id: project, id: talent_release, talent_release: talent_release_params }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(flash.notice).to be_nil
|
||||
end
|
||||
|
||||
it "does not enqueue any jobs" do
|
||||
expect {
|
||||
patch :update, params: { project_id: project, id: talent_release, talent_release: talent_release_params }
|
||||
}.not_to have_enqueued_job(AddHeadshotCollectionUidToProjectJob)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#destroy" do
|
||||
let!(:talent_release) { create(:talent_release, project: project) }
|
||||
|
||||
it "responds with redirect" do
|
||||
delete :destroy, params: { project_id: project, id: talent_release }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, :talent_releases]
|
||||
end
|
||||
|
||||
it "sets the flash" do
|
||||
delete :destroy, params: { project_id: project, id: talent_release }
|
||||
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
|
||||
it "destroys the record" do
|
||||
expect {
|
||||
delete :destroy, params: { project_id: project, id: talent_release }
|
||||
}.to change(TalentRelease, :count).by(-1)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def talent_release_params
|
||||
attributes_for(:talent_release).merge(exploitable_rights_params)
|
||||
end
|
||||
|
||||
def minor_talent_release_params
|
||||
attributes_for(:talent_release, :minor_with_guardian_photo).merge(exploitable_rights_params)
|
||||
end
|
||||
|
||||
def exploitable_rights_params
|
||||
{
|
||||
applicable_medium_id: ApplicableMedium.last.id,
|
||||
applicable_medium_text: "applicable_media",
|
||||
territory_id: Territory.last.id,
|
||||
territory_text: "territory",
|
||||
term_id: Term.last.id,
|
||||
term_text: "term",
|
||||
restriction_id: Restriction.last.id,
|
||||
restriction_text: "restrictions",
|
||||
}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user