127 lines
4.6 KiB
Ruby
127 lines
4.6 KiB
Ruby
|
|
require "rails_helper"
|
||
|
|
|
||
|
|
RSpec.describe ReportsController, type: :controller do
|
||
|
|
render_views
|
||
|
|
|
||
|
|
let(:current_user) { create(:user) }
|
||
|
|
let(:project) { create(:project, :discovery_client, account: current_user.primary_account) }
|
||
|
|
|
||
|
|
before do
|
||
|
|
sign_in current_user
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "#index" do
|
||
|
|
it "responds successfully" do
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response).to be_successful
|
||
|
|
end
|
||
|
|
|
||
|
|
context "for a Discovery client" do
|
||
|
|
let(:project) { create(:project, :discovery_client, account: current_user.primary_account) }
|
||
|
|
|
||
|
|
it "renders content" do
|
||
|
|
create(:video, :published, project: project, name: "My Video", number: "001")
|
||
|
|
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response.body).to have_content "My Video"
|
||
|
|
expect(response.body).to have_content "001"
|
||
|
|
expect(response.body).to have_content "Production Elements Log"
|
||
|
|
expect(response.body).to have_content "GFX Cue List"
|
||
|
|
expect(response.body).to have_content "Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "BiG Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "Issues and Concerns Report"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "for a Nat Geo client" do
|
||
|
|
let(:project) { create(:project, :nat_geo_client, account: current_user.primary_account) }
|
||
|
|
|
||
|
|
it "renders content" do
|
||
|
|
create(:video, :published, project: project, name: "My Video", number: "001")
|
||
|
|
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response.body).to have_content "My Video"
|
||
|
|
expect(response.body).to have_content "001"
|
||
|
|
expect(response.body).to have_content "Legal Binder Log"
|
||
|
|
expect(response.body).to have_content "Text Graphics Log"
|
||
|
|
expect(response.body).to have_content "Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "Original Music Log"
|
||
|
|
expect(response.body).to have_content "BiG Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "Issues and Concerns Report"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "for another client" do
|
||
|
|
let(:project) { create(:project, account: current_user.primary_account) }
|
||
|
|
|
||
|
|
it "renders content" do
|
||
|
|
create(:video, :published, project: project, name: "My Video", number: "001")
|
||
|
|
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response.body).to have_content "My Video"
|
||
|
|
expect(response.body).to have_content "001"
|
||
|
|
expect(response.body).to have_content "Production Elements Log"
|
||
|
|
expect(response.body).to have_content "GFX Cue List"
|
||
|
|
expect(response.body).to have_content "Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "BiG Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "Issues and Concerns Report"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when there are no reports" do
|
||
|
|
it "renders an empty message" do
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response.body).to have_content("Reports will appear here")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when there are many records" do
|
||
|
|
it "paginates the table" do
|
||
|
|
create_list(:video, 4, :published, project: project)
|
||
|
|
|
||
|
|
get :index, params: { project_id: project }
|
||
|
|
|
||
|
|
expect(response.body).to have_link("2", href: project_reports_path(project, page: 2))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
describe "xhr request" do
|
||
|
|
let(:project) { create(:project, :discovery_client, account: current_user.primary_account) }
|
||
|
|
|
||
|
|
before do
|
||
|
|
create(:video, :published, project: project, name: "My Video", number: "001")
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when search field is empty" do
|
||
|
|
it "shows all reports" do
|
||
|
|
get :index, params: { project_id: project }, xhr: true
|
||
|
|
|
||
|
|
expect(response.body).to have_content "Production Elements Log"
|
||
|
|
expect(response.body).to have_content "GFX Cue List"
|
||
|
|
expect(response.body).to have_content "Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "BiG Music Cue Sheet"
|
||
|
|
expect(response.body).to have_content "Issues and Concerns Report"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
context "when search field is not empty" do
|
||
|
|
it "shows only reports with name matching search query" do
|
||
|
|
get :index, params: { project_id: project, query: "Production" }, xhr: true
|
||
|
|
|
||
|
|
expect(response.body).to have_content("Production Elements Log")
|
||
|
|
|
||
|
|
expect(response.body).not_to have_content("GFX Cue List")
|
||
|
|
expect(response.body).not_to have_content("Music Cue Sheet")
|
||
|
|
expect(response.body).not_to have_content("BiG Music Cue Sheet")
|
||
|
|
expect(response.body).not_to have_content("Issues and Concerns Report")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|