From c93899a31129ad24f0872d6374c1e6805cbbe304 Mon Sep 17 00:00:00 2001 From: Leandro Nunes dos Santos Date: Fri, 6 May 2016 18:22:11 -0300 Subject: [PATCH] expose statistics block atrributes in api --- plugins/statistics/lib/ext/entities.rb | 21 +++++++++++++++++++++ plugins/statistics/test/unit/api_test.rb | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 0 deletions(-) create mode 100644 plugins/statistics/lib/ext/entities.rb create mode 100644 plugins/statistics/test/unit/api_test.rb diff --git a/plugins/statistics/lib/ext/entities.rb b/plugins/statistics/lib/ext/entities.rb new file mode 100644 index 0000000..c9c8d04 --- /dev/null +++ b/plugins/statistics/lib/ext/entities.rb @@ -0,0 +1,21 @@ +require File.join(Rails.root,'lib','noosfero','api','entities') +module Noosfero + module API + 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) + } + end + + end + end + end +end + diff --git a/plugins/statistics/test/unit/api_test.rb b/plugins/statistics/test/unit/api_test.rb new file mode 100644 index 0000000..7ea01ba --- /dev/null +++ b/plugins/statistics/test/unit/api_test.rb @@ -0,0 +1,41 @@ +require_relative '../../../../test/api/test_helper' + + +class ApiTest < ActiveSupport::TestCase + + def setup + create_and_activate_user + login_api + environment.enable_plugin(StatisticsPlugin) + end + + AVAILABLE_ATTRIBUTES = StatisticsBlock::USER_COUNTERS + StatisticsBlock::COMMUNITY_COUNTERS + StatisticsBlock::ENTERPRISE_COUNTERS + + AVAILABLE_ATTRIBUTES.map do |counter_attr| + counter_method = counter_attr.to_s.gsub('_counter','').pluralize.to_sym + define_method "test_should_return_#{counter_method}_attribute_in_statistics_block_if_#{counter_attr} is true" do + person.boxes.destroy_all + box = Box.create!(:owner => person) + block = StatisticsBlock.create!(:box_id => box.id) + block.send("#{counter_attr}=", true) + block.save + 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] + end + + define_method "test_should_not_return_#{counter_method}_attribute_in_statistics_block_if_#{counter_attr} is false" do + person.boxes.destroy_all + box = Box.create!(:owner => person) + block = StatisticsBlock.create!(:box_id => box.id) + block.send("#{counter_attr}=", false) + block.save + 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] + end + end + +end -- libgit2 0.21.2