From c0776884ddb59d30643a56a55861f6f29e817f85 Mon Sep 17 00:00:00 2001
From: OsamaSayegh <asooomaasoooma90@gmail.com>
Date: Mon, 11 Jun 2018 07:49:28 +0300
Subject: [PATCH] REFACTOR: admin reports controller specs to requests (#5963)

---
 .../admin/reports_controller_spec.rb          | 55 ++++++-------------
 1 file changed, 17 insertions(+), 38 deletions(-)
 rename spec/{controllers => requests}/admin/reports_controller_spec.rb (56%)

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