diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/requests/admin/reports_controller_spec.rb similarity index 56% rename from spec/controllers/admin/reports_controller_spec.rb rename to spec/requests/admin/reports_controller_spec.rb index d440b941026..27795f6579b 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/requests/admin/reports_controller_spec.rb @@ -6,66 +6,49 @@ describe Admin::ReportsController do end context 'while logged in as an admin' do - let!(:admin) { log_in(:admin) } + let(:admin) { Fabricate(:admin) } let(:user) { Fabricate(:user) } - context '.show' do + before do + sign_in(admin) + end + describe '#show' do context "invalid id form" do let(:invalid_id) { "!!&asdfasdf" } - it "never calls Report.find" do - Report.expects(:find).never - get :show, params: { type: invalid_id }, format: :json - end - it "returns 404" do - get :show, params: { type: invalid_id }, format: :json + get "/admin/reports/#{invalid_id}.json" expect(response.status).to eq(404) end end context "valid type form" do - context 'missing report' do - before do - Report.expects(:find).with('active', instance_of(Hash)).returns(nil) - get :show, params: { type: 'active' }, format: :json - end - - it "renders the report as JSON" do + it "returns a 404 error" do + get "/admin/reports/nonexistent.json" expect(response.status).to eq(404) end end context 'a report is found' do - before do - Report.expects(:find).with('active', instance_of(Hash)).returns(Report.new('active')) - get :show, params: { type: 'active' }, format: :json - end - it "renders the report as JSON" do + Fabricate(:topic) + get "/admin/reports/topics.json" + expect(response.status).to eq(200) + expect(JSON.parse(response.body)["report"]["total"]).to eq(1) end - - it "renders the report as JSON" do - expect(::JSON.parse(response.body)).to be_present - end - end - end describe 'when report is scoped to a category' do let(:category) { Fabricate(:category) } - let(:topic) { Fabricate(:topic, category: category) } - let(:other_topic) { Fabricate(:topic) } + let!(:topic) { Fabricate(:topic, category: category) } + let!(:other_topic) { Fabricate(:topic) } it 'should render the report as JSON' do - topic - other_topic - - get :show, params: { type: 'topics', category_id: category.id }, format: :json + get "/admin/reports/topics.json", params: { category_id: category.id } expect(response.status).to eq(200) @@ -78,14 +61,13 @@ describe Admin::ReportsController do describe 'when report is scoped to a group' do let(:user) { Fabricate(:user) } - let(:other_user) { Fabricate(:user) } + let!(:other_user) { Fabricate(:user) } let(:group) { Fabricate(:group) } it 'should render the report as JSON' do - other_user group.add(user) - get :show, params: { type: 'signups', group_id: group.id }, format: :json + get "/admin/reports/signups.json", params: { group_id: group.id } expect(response.status).to eq(200) @@ -95,9 +77,6 @@ describe Admin::ReportsController do expect(report["data"].count).to eq(1) end end - end - end - end