diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index 313e1cd9..545a87a1 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -350,9 +350,9 @@ class StatsController < ApplicationController # explicitely copy contents of hash to avoid ending up with two arrays pointing to same hashes @actions_per_context = Array.new(size){|i| { - 'name' => all_actions_per_context[i][:name], - 'total' => all_actions_per_context[i][:total].to_i, - 'id' => all_actions_per_context[i][:id] + 'name' => all_actions_per_context[i]['name'], + 'total' => all_actions_per_context[i]['total'].to_i, + 'id' => all_actions_per_context[i]['id'] } } if all_actions_per_context.size > pie_cutoff diff --git a/test/functional/context_actions_data_test.rb b/test/functional/context_actions_data_test.rb new file mode 100644 index 00000000..e87f6f01 --- /dev/null +++ b/test/functional/context_actions_data_test.rb @@ -0,0 +1,154 @@ +require File.expand_path(File.dirname(__FILE__) + '/../test_helper') + +class ContextActionsDataTest < ActionController::TestCase + tests StatsController + + def test_total_with_0_items + login_as(:admin_user) + Stats::TopContextsQuery.any_instance.stubs(:result).returns [] + + get :context_total_actions_data + + assert_equal [], assigns[:actions_per_context] + end + + def test_total_with_less_than_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_total_actions_data + + assert_equal contexts, assigns[:actions_per_context] + end + + def test_total_with_exactly_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6}, + {'id' => 10, 'name' => 'ten', 'total' => 19} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_total_actions_data + + assert_equal contexts, assigns[:actions_per_context] + end + + def test_total_with_more_than_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6}, + {'id' => 10, 'name' => 'ten', 'total' => 19}, + {'id' => 11, 'name' => 'eleven', 'total' => 14} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_total_actions_data + + contexts.pop + contexts[-1] = {'id' => -1, 'name' => '(others)', 'total' => 33} + assert_equal contexts, assigns[:actions_per_context] + end + + def test_running_with_0_items + login_as(:admin_user) + Stats::TopContextsQuery.any_instance.stubs(:result).returns [] + + get :context_running_actions_data + + assert_equal [], assigns[:actions_per_context] + end + + def test_running_with_less_than_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_running_actions_data + + assert_equal contexts, assigns[:actions_per_context] + end + + def test_running_with_exactly_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6}, + {'id' => 10, 'name' => 'ten', 'total' => 19} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_running_actions_data + + assert_equal contexts, assigns[:actions_per_context] + end + + def test_running_with_more_than_10_items + login_as(:admin_user) + contexts = [ + {'id' => 1, 'name' => 'one', 'total' => 11}, + {'id' => 2, 'name' => 'two', 'total' => 4}, + {'id' => 3, 'name' => 'three', 'total' => 8}, + {'id' => 4, 'name' => 'four', 'total' => 13}, + {'id' => 5, 'name' => 'five', 'total' => 20}, + {'id' => 6, 'name' => 'six', 'total' => 17}, + {'id' => 7, 'name' => 'seven', 'total' => 5}, + {'id' => 8, 'name' => 'eight', 'total' => 1}, + {'id' => 9, 'name' => 'nine', 'total' => 6}, + {'id' => 10, 'name' => 'ten', 'total' => 19}, + {'id' => 11, 'name' => 'eleven', 'total' => 14} + ] + Stats::TopContextsQuery.any_instance.stubs(:result).returns contexts + + get :context_running_actions_data + + contexts.pop + contexts[-1] = {'id' => -1, 'name' => '(others)', 'total' => 33} + assert_equal contexts, assigns[:actions_per_context] + end + +end