Commit b2964a64415173b3c089fe3bfd8edbb09e1a20b0

Authored by Callum Dryden
1 parent 949ae68a
Exists in master and in 1 other branch production

Limit the show action to just the problem

This commit backs out the nesting of the error and notices as this would
be better placed in an error or notices route.
app/controllers/api/v1/problems_controller.rb
... ... @@ -5,8 +5,7 @@ class Api::V1::ProblemsController < ApplicationController
5 5 def show
6 6 result = benchmark("[api/v1/problems_controller/show] query time") do
7 7 begin
8   - problem = Problem.only(FIELDS).find(params[:id])
9   - problem.as_json(include: {errs: { include: :notices}})
  8 + Problem.only(FIELDS).find(params[:id])
10 9 rescue Mongoid::Errors::DocumentNotFound
11 10 head :not_found
12 11 return false
... ...
spec/controllers/api/v1/problems_controller_spec.rb
... ... @@ -11,18 +11,58 @@ describe Api::V1::ProblemsController do
11 11 before do
12 12 notice = Fabricate(:notice)
13 13 err = Fabricate(:err, :notices => [notice])
14   - problem = Fabricate(:problem, :errs => [err])
  14 + @problem = Fabricate(:problem, :errs => [err])
15 15 end
16 16  
17   - it "returns JSON if JSON is requested" do
  17 + it "should return JSON if JSON is requested" do
18 18 get :show, :auth_token => @user.authentication_token, :format => "json", :id => Problem.first.id
  19 + expect { JSON.load(response.body) }.not_to raise_error() #JSON::ParserError
  20 + end
  21 +
  22 + it "should return XML if XML is requested" do
  23 + get :index, :auth_token => @user.authentication_token, :format => "xml", :id => @problem.id
  24 + expect(Nokogiri::XML(response.body).errors).to be_empty
  25 + end
  26 +
  27 + it "should return JSON by default" do
  28 + get :show, :auth_token => @user.authentication_token, :id => @problem.id
19 29 expect { JSON.load(response.body) }.not_to raise_error()#JSON::ParserError)
20 30 end
21 31  
22   - it "returns the correct problem" do
23   - requested_problem = Problem.first
24   - get :show, :auth_token => @user.authentication_token, :format => "json", :id => requested_problem.id
25   - expect( response.body ).to eq(requested_problem.to_json(include: {errs: { include: :notices}}))
  32 + it "should return the correct problem" do
  33 + get :show, :auth_token => @user.authentication_token, :format => "json", :id => @problem.id
  34 +
  35 + returned_problem = JSON.parse(response.body)
  36 + expect( returned_problem["_id"] ).to eq(@problem.id.to_s)
  37 + end
  38 +
  39 + it "should return only the correct fields" do
  40 + get :show, :auth_token => @user.authentication_token, :format => "json", :id => @problem.id
  41 + returned_problem = JSON.parse(response.body)
  42 +
  43 + expect( returned_problem.keys ).to match_array([
  44 + "app_name",
  45 + "first_notice_at",
  46 + "error_class",
  47 + "messages",
  48 + "hosts",
  49 + "created_at",
  50 + "app_id",
  51 + "last_notice_at",
  52 + "_id",
  53 + "issue_link",
  54 + "resolved",
  55 + "updated_at",
  56 + "resolved_at",
  57 + "last_deploy_at",
  58 + "where",
  59 + "issue_type",
  60 + "notices_count",
  61 + "user_agents",
  62 + "comments_count",
  63 + "message",
  64 + "environment"
  65 + ])
26 66 end
27 67  
28 68 it "returns a 404 if the problem cannot be found" do
... ...