diff --git a/lib/noosfero/api/helpers.rb b/lib/noosfero/api/helpers.rb index 3e1cc33..0c5f141 100644 --- a/lib/noosfero/api/helpers.rb +++ b/lib/noosfero/api/helpers.rb @@ -118,7 +118,11 @@ require 'grape' def present_articles(asset, method = 'articles') articles = find_articles(asset, method) - articles = paginate articles + present_articles_paginated(articles) + end + + def present_articles_paginated(articles, per_page=nil) + articles = paginate(articles) present articles, :with => Entities::Article, :fields => params[:fields] end diff --git a/lib/noosfero/api/v1/search.rb b/lib/noosfero/api/v1/search.rb index 47e8b53..9c6d566 100644 --- a/lib/noosfero/api/v1/search.rb +++ b/lib/noosfero/api/v1/search.rb @@ -5,6 +5,7 @@ module Noosfero resource :search do resource :article do + paginate per_page: 20, max_per_page: 200 get do # Security checks sanitize_params_hash(params) @@ -25,9 +26,13 @@ module Noosfero options = {:filter => order, :template_id => params[:template_id], :category => category} - articles = find_by_contents(asset, context, scope, query, paginate_options, options) + search_result = find_by_contents(asset, context, scope, query, paginate_options, options) - present articles[:results], :with => Entities::Article + articles = search_result[:results] + + result = present_articles_paginated(articles) + + result end end end diff --git a/test/unit/api/search_test.rb b/test/unit/api/search_test.rb index 3c13753..6e9003f 100644 --- a/test/unit/api/search_test.rb +++ b/test/unit/api/search_test.rb @@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/test_helper' class SearchTest < ActiveSupport::TestCase def create_article_with_optional_category(name, profile, category = nil) - fast_create(Article, {:name => name, :profile_id => profile.id }, :search => true, :category => category) + fast_create(Article, {:name => name, :profile_id => profile.id }, :search => true, :category => category, :title => name) end should 'not list unpublished articles' do @@ -64,7 +64,7 @@ class SearchTest < ActiveSupport::TestCase art = create_article_with_optional_category("Article #{n}", person) end - get "/api/v1/search/article?query=Article&limit=3" + get "/api/v1/search/article?query=Article&per_page=3" json = JSON.parse(last_response.body) assert_equal 3, json['articles'].count @@ -76,7 +76,7 @@ class SearchTest < ActiveSupport::TestCase art = create_article_with_optional_category("Article #{n}", person) end - get "/api/v1/search/article?query=Article&limit=3&page=2" + get "/api/v1/search/article?query=Article&per_page=3&page=2" json = JSON.parse(last_response.body) assert_equal 2, json['articles'].count @@ -95,4 +95,13 @@ class SearchTest < ActiveSupport::TestCase # Only for person1 assert_equal 2, json['articles'].count end + + should 'search with fields' do + person = fast_create(Person) + art = create_article_with_optional_category('an article to be found', person) + get "/api/v1/search/article?fields=title" + json = JSON.parse(last_response.body) + assert_not_empty json['articles'] + assert_equal ['title'], json['articles'].first.keys + end end \ No newline at end of file -- libgit2 0.21.2