diff --git a/plugins/statistics/lib/ext/entities.rb b/plugins/statistics/lib/ext/entities.rb index c9c8d04..f5c5742 100644 --- a/plugins/statistics/lib/ext/entities.rb +++ b/plugins/statistics/lib/ext/entities.rb @@ -4,14 +4,18 @@ module Noosfero module Entities class Block < Entity available_counters = (StatisticsBlock::USER_COUNTERS + StatisticsBlock::COMMUNITY_COUNTERS + StatisticsBlock::ENTERPRISE_COUNTERS).uniq - - available_counters.each do |counter_attr| - expose counter_attr, :if => lambda{|block,options| block.respond_to?(counter_attr) && block.is_counter_available?(counter_attr)} - - counter_method = counter_attr.to_s.gsub('_counter','').pluralize.to_sym - expose counter_method, :if => lambda { |block,options| - block.respond_to?(counter_method) && block.is_visible?(counter_attr) - } + expose :statistics, :if => lambda { |block, options| block.is_a? StatisticsBlock } do |block, options| + statistics = [] + available_counters.each do |counter_attr| + counter_method = counter_attr.to_s.gsub('_counter','').pluralize.to_sym + counter = { + name: counter_method, + display: block.is_counter_available?(counter_attr) && block.is_visible?(counter_attr), + quantity: (block.respond_to?(counter_method) && block.is_visible?(counter_attr)) ? block.send(counter_method) : nil + } + statistics << counter + end + statistics end end diff --git a/plugins/statistics/test/unit/api_test.rb b/plugins/statistics/test/unit/api_test.rb index 7ea01ba..b304ae7 100644 --- a/plugins/statistics/test/unit/api_test.rb +++ b/plugins/statistics/test/unit/api_test.rb @@ -19,10 +19,12 @@ class ApiTest < ActiveSupport::TestCase block = StatisticsBlock.create!(:box_id => box.id) block.send("#{counter_attr}=", true) block.save + StatisticsBlock.any_instance.stubs(counter_method).returns(20) get "/api/v1/profiles/#{person.id}/boxes?#{params.to_query}" - json = JSON.parse(last_response.body) - assert_not_nil json["boxes"].first['blocks'].first[counter_method.to_s] + statistics = json['boxes'].first['blocks'].first['statistics'] + statistic_for_method = statistics.select {|statistic| statistic if statistic['name'].eql? counter_method.to_s } + assert_equal statistic_for_method.first['quantity'], 20 end define_method "test_should_not_return_#{counter_method}_attribute_in_statistics_block_if_#{counter_attr} is false" do @@ -31,10 +33,12 @@ class ApiTest < ActiveSupport::TestCase block = StatisticsBlock.create!(:box_id => box.id) block.send("#{counter_attr}=", false) block.save + StatisticsBlock.any_instance.stubs(counter_method).returns(20) get "/api/v1/profiles/#{person.id}/boxes?#{params.to_query}" - json = JSON.parse(last_response.body) - assert_nil json["boxes"].first['blocks'].first[counter_method] + statistics = json['boxes'].first['blocks'].first['statistics'] + statistic_for_method = statistics.select {|statistic| statistic if statistic['name'].eql? counter_method.to_s } + assert_nil statistic_for_method.first["quantity"] end end -- libgit2 0.21.2