Commit 18e4c60b75f4e123207a75b946717d246b3cb49f

Authored by Fabio Teixeira
Committed by Gabriela Navarro
1 parent f6d72f7e

Add public_software filter, sort and page limit on ajax

Signed-off-by: Fabio Teixeira <fabio1079@gmail.com>
Signed-off-by: Luciano Prestes <lucianopcbr@gmail.com>
features/software_catalog.feature
@@ -17,36 +17,56 @@ Feature: Search software @@ -17,36 +17,56 @@ Feature: Search software
17 | Software | Health | true | 17 | Software | Health | true |
18 | Software | Education | true | 18 | Software | Education | true |
19 And the following softwares 19 And the following softwares
20 - | name | public_software | categories |  
21 - | Software One | true | Health |  
22 - | Software Two | false | Health, Education | 20 + | name | public_software | categories |
  21 + | Software One | true | Health |
  22 + | Software Two | true | Health, Education |
  23 + | Software Three | false | Education |
23 24
24 25
25 - Scenario: Show all softwares when open search page 26 + Scenario: Show all "public_software" softwares when open search page
26 Given I go to /search/software_infos 27 Given I go to /search/software_infos
27 Then I should see "Software One" 28 Then I should see "Software One"
28 Then I should see "Software Two" 29 Then I should see "Software Two"
29 30
30 - Scenario: Show all softwares when search software 31 + Scenario: Show all "public_software" softwares when search software
31 Given I go to /search/software_infos 32 Given I go to /search/software_infos
32 And I fill in "search-input" with "Software" 33 And I fill in "search-input" with "Software"
33 Then I should see "Software One" 34 Then I should see "Software One"
34 Then I should see "Software Two" 35 Then I should see "Software Two"
35 36
36 - Scenario: Show softwares one when search software one 37 + Scenario: Show software "One" when searching for "Software One"
37 Given I go to /search/software_infos 38 Given I go to /search/software_infos
38 And I fill in "search-input" with "Software One" 39 And I fill in "search-input" with "Software One"
39 - And I press "Search" 40 + And I press "Filter"
40 Then I should see "Software One" 41 Then I should see "Software One"
41 Then I should not see "Software Two" 42 Then I should not see "Software Two"
42 43
  44 + Scenario: Show software ordered by name when "Name A-Z" is selected
  45 + Given I go to /search/software_infos
  46 + And I select "Name A-Z" from "sort"
  47 + And I press "Filter"
  48 + Then I should see "Software One" before "Software Two"
  49 +
  50 + Scenario: Show software in reverse order by name when "Name Z-A" is selected
  51 + Given I go to /search/software_infos
  52 + And I select "Name Z-A" from "sort"
  53 + And I press "Filter"
  54 + Then I should see "Software Two" before "Software One"
  55 +
  56 + Scenario: Show softwares with selected category in filter
  57 + Given I go to /search/software_infos
  58 + And I follow "Education"
  59 + Then I should see "Software Two"
  60 + And I should not see "Software One"
  61 +
  62 +
43 @selenium 63 @selenium
44 Scenario: Show only "Software Two" when searching for "Education" category 64 Scenario: Show only "Software Two" when searching for "Education" category
45 Given I go to /search/software_infos 65 Given I go to /search/software_infos
46 And I click on anything with selector "#filter-option-catalog-software" 66 And I click on anything with selector "#filter-option-catalog-software"
47 And I check "Education" 67 And I check "Education"
48 Then I should see "Software Two" 68 Then I should see "Software Two"
49 - Then I should not see "Software One" 69 + And I should not see "Software One"
50 70
51 @selenium 71 @selenium
52 Scenario: Show both Software "One" and "Two" when searching for "Health" category 72 Scenario: Show both Software "One" and "Two" when searching for "Health" category
@@ -54,4 +74,13 @@ Feature: Search software @@ -54,4 +74,13 @@ Feature: Search software
54 And I click on anything with selector "#filter-option-catalog-software" 74 And I click on anything with selector "#filter-option-catalog-software"
55 And I check "Health" 75 And I check "Health"
56 Then I should see "Software One" 76 Then I should see "Software One"
57 - Then I should see "Software Two" 77 + And I should see "Software Two"
  78 +
  79 + @selenium
  80 + Scenario: Show not "public_software" when "Include in results" is checked
  81 + Given I go to /search/software_infos
  82 + And I click on anything with selector "#filter-option-catalog-software"
  83 + And I check "include_non_public"
  84 + Then I should see "Software One"
  85 + And I should see "Software Two"
  86 + And I should see "Software Three"
features/step_definitions/mpog_steps.rb
@@ -231,3 +231,7 @@ Given /^I am logged in as mpog_admin$/ do @@ -231,3 +231,7 @@ Given /^I am logged in as mpog_admin$/ do
231 fill_in("Password", :with => '123456') 231 fill_in("Password", :with => '123456')
232 click_button("Log in") 232 click_button("Log in")
233 end 233 end
  234 +
  235 +Given /^I should see "([^"]*)" before "([^"]*)"$/ do |before, after|
  236 + assert page.body.index("#{before}") < page.body.index("#{after}")
  237 +end
lib/ext/search_controller.rb
@@ -66,9 +66,11 @@ class SearchController @@ -66,9 +66,11 @@ class SearchController
66 end 66 end
67 67
68 filtered_community_list = [] 68 filtered_community_list = []
69 - filtered_software_list.each do |software|  
70 - filtered_community_list << software.community  
71 - end 69 + filtered_software_list.each do |software|
  70 + if @include_non_public || software.public_software?
  71 + filtered_community_list << software.community
  72 + end
  73 + end
72 74
73 filtered_community_list.sort!{|a, b| a.name <=> b.name} 75 filtered_community_list.sort!{|a, b| a.name <=> b.name}
74 if params[:sort] && params[:sort] == "desc" 76 if params[:sort] && params[:sort] == "desc"
@@ -87,6 +89,7 @@ class SearchController @@ -87,6 +89,7 @@ class SearchController
87 @selected_categories = params[:selected_categories] 89 @selected_categories = params[:selected_categories]
88 @selected_categories ||= [] 90 @selected_categories ||= []
89 @selected_categories = @selected_categories.map(&:to_i) 91 @selected_categories = @selected_categories.map(&:to_i)
  92 + @include_non_public = params[:include_non_public] == "true"
90 93
91 @message_selected_options = "" 94 @message_selected_options = ""
92 unless @selected_categories.empty? 95 unless @selected_categories.empty?
public/software-catalog.js
@@ -88,6 +88,8 @@ @@ -88,6 +88,8 @@
88 params.software_display = $("#software_display").val(); 88 params.software_display = $("#software_display").val();
89 params.sort = $("#sort").val(); 89 params.sort = $("#sort").val();
90 90
  91 + params.include_non_public = $("#include_non_public").is(":checked");
  92 +
91 return params; 93 return params;
92 } 94 }
93 95
test/helpers/plugin_test_helper.rb
@@ -17,6 +17,7 @@ module PluginTestHelper @@ -17,6 +17,7 @@ module PluginTestHelper
17 community = create_community(name) 17 community = create_community(name)
18 software_info = SoftwareInfo.new 18 software_info = SoftwareInfo.new
19 software_info.community = community 19 software_info.community = community
  20 + software_info.public_software = true
20 software_info.save 21 software_info.save
21 software_info 22 software_info
22 end 23 end
views/search/_catalog_filter.html.erb
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 <% @categories_groupe_two.each do |category| %> 23 <% @categories_groupe_two.each do |category| %>
24 <label> 24 <label>
25 <%= check_box_tag("selected_categories[]", category.id, @selected_categories.include?(category.id), :class => "categories-catalog") %> 25 <%= check_box_tag("selected_categories[]", category.id, @selected_categories.include?(category.id), :class => "categories-catalog") %>
26 - <%= _("#{category.name}") %> 26 + <%= _("#{category.name}") %>
27 </label> <br> 27 </label> <br>
28 <% end %> 28 <% end %>
29 <br /> 29 <br />
@@ -31,7 +31,10 @@ @@ -31,7 +31,10 @@
31 </div> 31 </div>
32 32
33 <div class="project-software"> <%= _("Software Projects:") %> 33 <div class="project-software"> <%= _("Software Projects:") %>
34 - <label><input type="checkbox" name="filter" value="Incluir nos resultados"> <%= _("Include in results") %> </label> 34 + <label>
  35 + <%= check_box_tag("include_non_public", true, @include_non_public) %>
  36 + <%= _("Include in results") %>
  37 + </label>
35 <span class"doubts-catalog-software" title="<%= _('Include software development projects that are not yet officially Brazilian Public Software.') %>">(?)</span> 38 <span class"doubts-catalog-software" title="<%= _('Include software development projects that are not yet officially Brazilian Public Software.') %>">(?)</span>
36 </div> 39 </div>
37 <br /> 40 <br />
views/search/_full_community.html.erb
@@ -33,7 +33,12 @@ @@ -33,7 +33,12 @@
33 <ul id="categories-list"> 33 <ul id="categories-list">
34 <% community.categories.each do |category| %> 34 <% community.categories.each do |category| %>
35 <li> 35 <li>
36 - <%= category.name %> 36 + <%= link_to _("#{category.name}"), {
  37 + :controller => :search,
  38 + :action => :software_infos,
  39 + :selected_categories => [category.id],
  40 + :include_non_public => !community.software_info.public_software?
  41 + } %>
37 </li> 42 </li>
38 <% end %> 43 <% end %>
39 </ul> 44 </ul>