From c31fef048a61dff9ed08b65db64f6e3becd9e1a9 Mon Sep 17 00:00:00 2001 From: Marcos Ronaldo Date: Fri, 23 Oct 2015 14:40:00 -0200 Subject: [PATCH] Add software communities endpoint to API --- src/noosfero-spb/software_communities/lib/software_communities_plugin.rb | 4 ++++ src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb | 23 +++++++++++++++++++++++ src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb | 14 ++++++++++++++ src/noosfero-spb/software_communities/test/unit/api_test.rb | 31 +++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 0 deletions(-) create mode 100644 src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb create mode 100644 src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb create mode 100644 src/noosfero-spb/software_communities/test/unit/api_test.rb diff --git a/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb b/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb index d11c176..caaf00c 100644 --- a/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb +++ b/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb @@ -17,6 +17,10 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin _('Add Public Software and MPOG features.') end + def self.api_mount_points + [SoftwareCommunitiesPlugin::API] + end + def profile_tabs if context.profile.community? return profile_tabs_software if context.profile.software? diff --git a/src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb b/src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb new file mode 100644 index 0000000..902b374 --- /dev/null +++ b/src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb @@ -0,0 +1,23 @@ +require File.dirname(__FILE__) + '/../../../../../lib/noosfero/api/helpers' +require_relative 'api_entities' + +class SoftwareCommunitiesPlugin::API < Grape::API + + include Noosfero::API::APIHelpers + + resource :software_communities do + get do + authenticate! + softwares = select_filtered_collection_of(environment,'communities',params).joins(:software_info) + present softwares, :with => Entities::SoftwareCommunity + end + + get ':id' do + authenticate! + software = SoftwareInfo.find_by_id(params[:id]) + present software.community, :with => Entities::SoftwareCommunity + end + + end +end + diff --git a/src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb b/src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb new file mode 100644 index 0000000..8456ead --- /dev/null +++ b/src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb @@ -0,0 +1,14 @@ +module Entities + class SoftwareInfo < Noosfero::API::Entity + expose :id, :finality, :repository_link, :public_software + end + + class SoftwareCommunity < Noosfero::API::Entity + root 'softwares', 'software' + expose :community, :using => Noosfero::API::Entities::Community do |community, options| + community + end + expose :software_info, :using => SoftwareInfo + end + +end diff --git a/src/noosfero-spb/software_communities/test/unit/api_test.rb b/src/noosfero-spb/software_communities/test/unit/api_test.rb new file mode 100644 index 0000000..7191d9d --- /dev/null +++ b/src/noosfero-spb/software_communities/test/unit/api_test.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../../../test/unit/api/test_helper' +require File.dirname(__FILE__) + '/../helpers/plugin_test_helper' + +class SoftwareCommunitiesApiTest < ActiveSupport::TestCase + + include PluginTestHelper + + def setup + login_api + environment = Environment.default + environment.enable_plugin(SoftwareCommunitiesPlugin) + end + + should 'list all softwares' do + @software_info = create_software_info("software_test") + @software_info2 = create_software_info("software_test2") + + get "/api/v1/software_communities?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equivalent [@software_info.id, @software_info2.id], json['softwares'].map {|c| c['software_info']['id']} + end + + should 'get software by id' do + @software_info = create_software_info("software_test") + get "/api/v1/software_communities/#{@software_info.id}?#{params.to_query}" + + json = JSON.parse(last_response.body) + assert_equal @software_info.id, json["software"]['software_info']["id"] + end + +end -- libgit2 0.21.2