Commit 02696d83c7751d787675ae9737e997c19ed7067a

Authored by Vasiliy Ermolovich
1 parent 86f245d1
Exists in master and in 1 other branch production

fix error when only one app is present

It fixes ActionView::Template::Error (undefined method `>' for nil:NilClass)
error. This error was showing when there is only one app was present.
In AppsController when we were trying to sort our apps and if apps.count == 1
the sort method actually doesn't call block so we had empty
@unresolved_counts, @problem_counts assigns.
app/controllers/apps_controller.rb
... ... @@ -50,10 +50,26 @@ class AppsController < InheritedResources::Base
50 50  
51 51 protected
52 52 def collection
53   - # Sort apps by number of unresolved errs, descending.
54   - # Caches the unresolved err counts while performing the sort.
55 53 @unresolved_counts, @problem_counts = {}, {}
56   - @apps ||= end_of_association_chain.all.sort{|a,b|
  54 + @apps ||= begin
  55 + apps = end_of_association_chain.all
  56 +
  57 + if apps.count > 1
  58 + apps = sort_by_unresolved_errs(apps)
  59 + elsif apps.count > 0
  60 + app = apps.first
  61 + @unresolved_counts[app.id] ||= app.problems.unresolved.count
  62 + @problem_counts[app.id] ||= app.problems.count
  63 + end
  64 +
  65 + apps
  66 + end
  67 + end
  68 +
  69 + # Sort apps by number of unresolved errs, descending.
  70 + # Caches the unresolved err counts while performing the sort.
  71 + def sort_by_unresolved_errs(apps)
  72 + apps.sort{|a,b|
57 73 [a,b].each do |app|
58 74 @unresolved_counts[app.id] ||= app.problems.unresolved.count
59 75 @problem_counts[app.id] ||= app.problems.count
... ...
spec/controllers/apps_controller_spec.rb
... ... @@ -31,6 +31,17 @@ describe AppsController do
31 31 assigns(:apps).should_not include(unwatched_app)
32 32 end
33 33 end
  34 +
  35 + context 'when there is only one app' do
  36 + it 'sets unresolved_counts and problem_counts variables' do
  37 + sign_in Fabricate(:admin)
  38 + app = Fabricate(:app)
  39 + get :index
  40 +
  41 + assigns(:unresolved_counts).should == {app.id => 0}
  42 + assigns(:problem_counts).should == {app.id => 0}
  43 + end
  44 + end
34 45 end
35 46  
36 47 describe "GET /apps/:id" do
... ...