diff --git a/lib/noosfero/api/v1/search.rb b/lib/noosfero/api/v1/search.rb index 8554e30..67a741c 100644 --- a/lib/noosfero/api/v1/search.rb +++ b/lib/noosfero/api/v1/search.rb @@ -16,7 +16,7 @@ module Noosfero profile = environment.profiles.find(params[:profile_id]) if params[:profile_id] scope = profile.nil? ? environment.articles.is_public : profile.articles.is_public scope = scope.where(:type => params[:type]) if params[:type] && !(params[:type] == 'Article') - scope = scope.where(:parent_id => params[:parent_id]) if params[:parent_id].present? + scope = scope.where(make_conditions_with_parameter(params)) scope = scope.joins(:categories).where(:categories => {:id => params[:category_ids]}) if params[:category_ids].present? scope = scope.where('children_count > 0') if params[:has_children].present? query = params[:query] || "" diff --git a/lib/noosfero/api/v1/search.rb.orig b/lib/noosfero/api/v1/search.rb.orig new file mode 100644 index 0000000..2341ac8 --- /dev/null +++ b/lib/noosfero/api/v1/search.rb.orig @@ -0,0 +1,50 @@ +module Noosfero + module API + module V1 + class Search < Grape::API + + resource :search do + resource :article do + paginate per_page: 20, max_per_page: 200 + get do + # Security checks + sanitize_params_hash(params) + # APIHelpers + asset = :articles + context = environment + + profile = environment.profiles.find(params[:profile_id]) if params[:profile_id] + scope = profile.nil? ? environment.articles.is_public : profile.articles.is_public + scope = scope.where(:type => params[:type]) if params[:type] && !(params[:type] == 'Article') + scope = scope.where(:parent_id => params[:parent_id]) if params[:parent_id].present? + scope = scope.joins(:categories).where(:categories => {:id => params[:category_ids]}) if params[:category_ids].present? +<<<<<<< HEAD + + scope = scope.where('children_count > 0') if params[:has_children].present? + +======= +>>>>>>> staging + query = params[:query] || "" + order = "more_recent" + + options = {:filter => order, :template_id => params[:template_id]} + + paginate_options = params.select{|k,v| [:page, :per_page].include?(k.to_sym)}.symbolize_keys + paginate_options.each_pair{|k,v| v=v.to_i} + paginate_options[:page]=1 if !paginate_options.keys.include?(:page) + + search_result = find_by_contents(asset, context, scope, query, paginate_options, options) + + articles = search_result[:results] + + result = present_articles_paginated(articles) + + result + end + end + end + + end + end + end +end diff --git a/test/unit/api/search_test.rb b/test/unit/api/search_test.rb index 1f90a47..7102674 100644 --- a/test/unit/api/search_test.rb +++ b/test/unit/api/search_test.rb @@ -147,4 +147,13 @@ class SearchTest < ActiveSupport::TestCase assert_includes ids, json['articles'].last["id"] end + should 'list only articles that was archived' do + article1 = fast_create(Article, :profile_id => person.id) + article2 = fast_create(Article, :profile_id => person.id, archived: true) + + get "/api/v1/search/article?archived=true" + json = JSON.parse(last_response.body) + assert_equal [article2.id], json['articles'].map {|a| a['id']} + end + end -- libgit2 0.21.2