REFACTOR: admin reports controller specs to requests (#5963)

This commit is contained in:
OsamaSayegh 2018-06-11 07:49:28 +03:00 committed by Guo Xiang Tan
parent da94eaa81d
commit c0776884dd
1 changed files with 17 additions and 38 deletions

View File

@ -6,66 +6,49 @@ describe Admin::ReportsController do
end end
context 'while logged in as an admin' do context 'while logged in as an admin' do
let!(:admin) { log_in(:admin) } let(:admin) { Fabricate(:admin) }
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
context '.show' do before do
sign_in(admin)
end
describe '#show' do
context "invalid id form" do context "invalid id form" do
let(:invalid_id) { "!!&asdfasdf" } 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 it "returns 404" do
get :show, params: { type: invalid_id }, format: :json get "/admin/reports/#{invalid_id}.json"
expect(response.status).to eq(404) expect(response.status).to eq(404)
end end
end end
context "valid type form" do context "valid type form" do
context 'missing report' do context 'missing report' do
before do it "returns a 404 error" do
Report.expects(:find).with('active', instance_of(Hash)).returns(nil) get "/admin/reports/nonexistent.json"
get :show, params: { type: 'active' }, format: :json
end
it "renders the report as JSON" do
expect(response.status).to eq(404) expect(response.status).to eq(404)
end end
end end
context 'a report is found' do 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 it "renders the report as JSON" do
Fabricate(:topic)
get "/admin/reports/topics.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(JSON.parse(response.body)["report"]["total"]).to eq(1)
end end
it "renders the report as JSON" do
expect(::JSON.parse(response.body)).to be_present
end
end end
end end
describe 'when report is scoped to a category' do describe 'when report is scoped to a category' do
let(:category) { Fabricate(:category) } let(:category) { Fabricate(:category) }
let(:topic) { Fabricate(:topic, category: category) } let!(:topic) { Fabricate(:topic, category: category) }
let(:other_topic) { Fabricate(:topic) } let!(:other_topic) { Fabricate(:topic) }
it 'should render the report as JSON' do it 'should render the report as JSON' do
topic get "/admin/reports/topics.json", params: { category_id: category.id }
other_topic
get :show, params: { type: 'topics', category_id: category.id }, format: :json
expect(response.status).to eq(200) expect(response.status).to eq(200)
@ -78,14 +61,13 @@ describe Admin::ReportsController do
describe 'when report is scoped to a group' do describe 'when report is scoped to a group' do
let(:user) { Fabricate(:user) } let(:user) { Fabricate(:user) }
let(:other_user) { Fabricate(:user) } let!(:other_user) { Fabricate(:user) }
let(:group) { Fabricate(:group) } let(:group) { Fabricate(:group) }
it 'should render the report as JSON' do it 'should render the report as JSON' do
other_user
group.add(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) expect(response.status).to eq(200)
@ -95,9 +77,6 @@ describe Admin::ReportsController do
expect(report["data"].count).to eq(1) expect(report["data"].count).to eq(1)
end end
end end
end end
end end
end end