require "rails_helper" RSpec.describe MiscReleasesController, 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(:misc_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 "P: 5551234567" expect(response.body).to have_content "jane.doe@test.com" expect(response.body).to have_content "Some notes here" expect(response.body).to have_content "Manage" end context "when there are no misc releases" do it "renders an empty message" do get :index, params: { project_id: project } expect(response.body).to have_content("Misc Releases will appear here") end end context "when there are many records" do it "paginates the table" do create_list(:misc_release, 20, project: project) get :index, params: { project_id: project } expect(response.body).to have_link("2", href: project_misc_releases_path(project, page: 2)) end end context "for xhr request" do it "filters the releases by a query param" do misc_releases = [ create(:misc_release, person_name: "Adam Sandler", project: project), create(:misc_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 "#destroy" do let!(:misc_release) { create(:misc_release, project: project) } it "responds with redirect" do delete :destroy, params: { project_id: project, id: misc_release } expect(response).to be_redirect expect(response).to redirect_to [project, :misc_releases] end it "sets the flash" do delete :destroy, params: { project_id: project, id: misc_release } expect(flash.alert).not_to be_nil end it "destroys the record" do expect { delete :destroy, params: { project_id: project, id: misc_release } }.to change(MiscRelease, :count).by(-1) end end private def misc_release_params attributes_for(:misc_release).merge(exploitable_rights_params) end def minor_misc_release_params attributes_for(:misc_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