Commit d9020ffa19055b914d11160109ed2092011dde50
Exists in
staging
and in
42 other branches
Merge branch 'search_template_filter' into 'next'
Search template filter See merge request !522
Showing
13 changed files
with
407 additions
and
8 deletions
Show diff stats
app/controllers/public/search_controller.rb
| ... | ... | @@ -9,6 +9,7 @@ class SearchController < PublicController |
| 9 | 9 | before_filter :load_search_assets, :except => :suggestions |
| 10 | 10 | before_filter :load_query, :except => :suggestions |
| 11 | 11 | before_filter :load_order, :except => :suggestions |
| 12 | + before_filter :load_templates, :except => :suggestions | |
| 12 | 13 | |
| 13 | 14 | # Backwards compatibility with old URLs |
| 14 | 15 | def redirect_asset_param |
| ... | ... | @@ -210,6 +211,11 @@ class SearchController < PublicController |
| 210 | 211 | end |
| 211 | 212 | end |
| 212 | 213 | |
| 214 | + def load_templates | |
| 215 | + @templates = {} | |
| 216 | + @templates[@asset] = environment.send(@asset.to_s).templates if [:people, :enterprises, :communities].include?(@asset) | |
| 217 | + end | |
| 218 | + | |
| 213 | 219 | def limit |
| 214 | 220 | if map_search?(@searches) |
| 215 | 221 | MAP_SEARCH_LIMIT |
| ... | ... | @@ -230,7 +236,7 @@ class SearchController < PublicController |
| 230 | 236 | end |
| 231 | 237 | |
| 232 | 238 | def full_text_search |
| 233 | - @searches[@asset] = find_by_contents(@asset, environment, @scope, @query, paginate_options, {:category => @category, :filter => @order}) | |
| 239 | + @searches[@asset] = find_by_contents(@asset, environment, @scope, @query, paginate_options, {:category => @category, :filter => @order, :template_id => params[:template_id]}) | |
| 234 | 240 | end |
| 235 | 241 | |
| 236 | 242 | private | ... | ... |
app/helpers/layout_helper.rb
| ... | ... | @@ -49,6 +49,7 @@ module LayoutHelper |
| 49 | 49 | 'selectordie', |
| 50 | 50 | 'inputosaurus', |
| 51 | 51 | 'chat', |
| 52 | + 'selectordie-theme', | |
| 52 | 53 | pngfix_stylesheet_path, |
| 53 | 54 | ] + tokeninput_stylesheets |
| 54 | 55 | plugins_stylesheets = @plugins.select(&:stylesheet?).map { |plugin| plugin.class.public_path('style.css') } | ... | ... |
app/helpers/search_helper.rb
| ... | ... | @@ -148,4 +148,11 @@ module SearchHelper |
| 148 | 148 | link_to(@enabled_searches[asset], "/search/#{asset}") |
| 149 | 149 | end |
| 150 | 150 | |
| 151 | + def assets_submenu(asset) | |
| 152 | + return '' if @templates[asset].blank? || @templates[asset].length == 1 | |
| 153 | + options = @templates[asset].map {|template| [template.name, template.id]} | |
| 154 | + options = options_for_select([[_('Choose a template'), nil]] + options, selected: (params[:template_id])) | |
| 155 | + select_tag('template_id', options, :id => 'submenu') | |
| 156 | + end | |
| 157 | + | |
| 151 | 158 | end | ... | ... |
app/models/profile.rb
| ... | ... | @@ -85,7 +85,15 @@ class Profile < ActiveRecord::Base |
| 85 | 85 | #FIXME: these will work only if the subclass is already loaded |
| 86 | 86 | scope :enterprises, lambda { {:conditions => (Enterprise.send(:subclasses).map(&:name) << 'Enterprise').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } |
| 87 | 87 | scope :communities, lambda { {:conditions => (Community.send(:subclasses).map(&:name) << 'Community').map { |klass| "profiles.type = '#{klass}'"}.join(" OR ")} } |
| 88 | - scope :templates, {:conditions => {:is_template => true}} | |
| 88 | + scope :templates, lambda { |template_id = nil| | |
| 89 | + conditions = {:conditions => {:is_template => true}} | |
| 90 | + conditions[:conditions].merge!({:id => template_id}) unless template_id.nil? | |
| 91 | + conditions | |
| 92 | + } | |
| 93 | + | |
| 94 | + scope :with_templates, lambda { |templates| | |
| 95 | + {:conditions => {:template_id => templates}} | |
| 96 | + } | |
| 89 | 97 | scope :no_templates, {:conditions => {:is_template => false}} |
| 90 | 98 | |
| 91 | 99 | def members | ... | ... |
app/views/search/_search_content.html.erb
| 1 | 1 | <div id='search-content'> |
| 2 | + <div class='total'> | |
| 3 | + <%= _('Total of %s results ') % @searches[@asset][:results].total_entries.inspect %> | |
| 4 | + </div> | |
| 5 | + | |
| 2 | 6 | <%= display_results(@searches, @asset) %> |
| 3 | 7 | <% if params[:display] != 'map' %> |
| 4 | 8 | <%= pagination_links @searches[@asset][:results] %> | ... | ... |
app/views/search/_search_form.html.erb
| ... | ... | @@ -5,8 +5,12 @@ |
| 5 | 5 | <div id='search-header'> |
| 6 | 6 | <%= assets_menu(@asset) %> |
| 7 | 7 | <%= filters(@asset) %> |
| 8 | + <div class="clear"></div> | |
| 8 | 9 | </div> |
| 9 | 10 | |
| 11 | + <div id='search-subheader'> | |
| 12 | + <%= assets_submenu(@asset) %> | |
| 13 | + </div> | |
| 10 | 14 | <div class="search-field"> |
| 11 | 15 | <span class="formfield"> |
| 12 | 16 | <%= search_input_with_suggestions('query', @asset, @query, {:id => 'search-input', :size => 50, :placeholder => hint}) %> | ... | ... |
lib/noosfero/plugin.rb
| ... | ... | @@ -556,6 +556,7 @@ class Noosfero::Plugin |
| 556 | 556 | # own use in specific views |
| 557 | 557 | def find_by_contents(asset, scope, query, paginate_options={}, options={}) |
| 558 | 558 | scope = scope.like_search(query, options) unless query.blank? |
| 559 | + scope = scope.with_templates(options[:template_id]) unless options[:template_id].blank? | |
| 559 | 560 | scope = scope.send(options[:filter]) unless options[:filter].blank? |
| 560 | 561 | {:results => scope.paginate(paginate_options)} |
| 561 | 562 | end | ... | ... |
public/javascripts/search.js
| ... | ... | @@ -15,9 +15,17 @@ |
| 15 | 15 | $('form.search_form').submit(); |
| 16 | 16 | }); |
| 17 | 17 | |
| 18 | + // Filter submenu | |
| 19 | + $('#search-subheader select').change(function(){ | |
| 20 | + $('form.search_form').submit(); | |
| 21 | + }); | |
| 22 | + | |
| 18 | 23 | // Custom styled select |
| 19 | 24 | $('#search-filters select').selectOrDie(); |
| 20 | 25 | |
| 26 | + // Custom styled select | |
| 27 | + $('#search-subheader select').selectOrDie(); | |
| 28 | + | |
| 21 | 29 | // Form Ajax submission |
| 22 | 30 | $('form.search_form').submit(function () { |
| 23 | 31 | $.ajax({ | ... | ... |
public/stylesheets/search.css
| ... | ... | @@ -953,7 +953,7 @@ ul#assets-menu { |
| 953 | 953 | text-align: justify; |
| 954 | 954 | text-justify: distribute-all-lines; /* distribute items in IE */ |
| 955 | 955 | list-style-type: none; |
| 956 | - margin: 5px 0 13px; | |
| 956 | + margin: 5px 0px 10px 0px; | |
| 957 | 957 | padding: 0; |
| 958 | 958 | width: 500px; |
| 959 | 959 | float: left; |
| ... | ... | @@ -984,6 +984,15 @@ ul#assets-menu li.selected a { |
| 984 | 984 | color: #EF2929; |
| 985 | 985 | font-weight: bold; |
| 986 | 986 | } |
| 987 | +ul#assets-links li.selected a { | |
| 988 | + border-bottom: 4px solid #dd4b39; | |
| 989 | + padding-bottom: 6px; | |
| 990 | +} | |
| 991 | + | |
| 992 | +ul#assets-links li.selected a { | |
| 993 | + color: #dd4b39; | |
| 994 | + font-weight: bold; | |
| 995 | +} | |
| 987 | 996 | |
| 988 | 997 | #search-filters { |
| 989 | 998 | float: right; |
| ... | ... | @@ -1037,3 +1046,13 @@ ul#assets-menu li.selected a { |
| 1037 | 1046 | border-bottom:1px solid #ccc; |
| 1038 | 1047 | margin-bottom: 10px; |
| 1039 | 1048 | } |
| 1049 | + | |
| 1050 | +#search-header{ | |
| 1051 | + border-bottom: 1px solid #ebebeb; | |
| 1052 | +} | |
| 1053 | + | |
| 1054 | +#search-content .total{ | |
| 1055 | + color: #808080; | |
| 1056 | + line-height: 20px; | |
| 1057 | + font-style: oblique; | |
| 1058 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,75 @@ |
| 1 | +/* Default custom select styles */ | |
| 2 | + | |
| 3 | +#search-subheader div.sod_select { | |
| 4 | + display: inline-block; | |
| 5 | + vertical-align: middle; | |
| 6 | + position: relative; | |
| 7 | + text-align: left; | |
| 8 | + background: #fff; | |
| 9 | + z-index: 100; | |
| 10 | + -webkit-touch-callout: none; | |
| 11 | + -webkit-user-select: none; | |
| 12 | + -khtml-user-select: none; | |
| 13 | + -moz-user-select: none; | |
| 14 | + -ms-user-select: none; | |
| 15 | + user-select: none; | |
| 16 | + background: transparent; | |
| 17 | + max-width: 400px; | |
| 18 | +} | |
| 19 | + | |
| 20 | +#search-subheader div.sod_select:focus { | |
| 21 | + outline: none; /* For better accessibility add a style for this in your skin */ | |
| 22 | +} | |
| 23 | + | |
| 24 | +#search-subheader .sod_select select { | |
| 25 | + display: none; | |
| 26 | +} | |
| 27 | + | |
| 28 | +#search-subheader .sod_label::after { | |
| 29 | + font-family: Arial, 'Liberation Sans', sans-serif; | |
| 30 | + font-weight: bold; | |
| 31 | + content: '+'; | |
| 32 | + left: 0px; | |
| 33 | + -webkit-transform: translate3d(0,-50%,0) rotate3d(0,0,1,0deg);; | |
| 34 | + transform: translate3d(0,-50%,0) rotate3d(0,0,1,0deg);; | |
| 35 | + -webkit-transition: -webkit-transform 0.5s; | |
| 36 | + transition: transform 0.5s; | |
| 37 | + position: absolute; | |
| 38 | + top: 50%; | |
| 39 | + font-size: 2.1em; | |
| 40 | +} | |
| 41 | + | |
| 42 | +#search-subheader .sod_select.open .sod_label::after { | |
| 43 | + -webkit-transform: translate3d(0,-50%,0) rotate3d(0,0,1,225deg); | |
| 44 | + transform: translate3d(0,-50%,0) rotate3d(0,0,1,225deg); | |
| 45 | +} | |
| 46 | + | |
| 47 | +/* Changes on select or die*/ | |
| 48 | +#search-subheader .sod_select{ | |
| 49 | + border: none; | |
| 50 | + padding-top: 10px; | |
| 51 | + padding-left: 20px; | |
| 52 | + padding-bottom: 10px; | |
| 53 | + width: auto; | |
| 54 | + font-weight: normal; | |
| 55 | + text-transform: none; | |
| 56 | + font-size: 12px; | |
| 57 | +} | |
| 58 | + | |
| 59 | +#search-subheader .sod_select.open{ | |
| 60 | +} | |
| 61 | + | |
| 62 | +#search-subheader .sod_select .sod_list{ | |
| 63 | + border: 1px solid #ebebeb; | |
| 64 | + margin-left: -1px; | |
| 65 | + width: auto; | |
| 66 | +} | |
| 67 | + | |
| 68 | +#search-subheader .sod_select:before, | |
| 69 | +#search-subheader .sod_select:after { | |
| 70 | + content: ""; | |
| 71 | +} | |
| 72 | + | |
| 73 | +#search-subheader .sod_select.focus { | |
| 74 | + box-shadow: none; | |
| 75 | +} | ... | ... |
test/functional/search_controller_test.rb
| ... | ... | @@ -13,14 +13,14 @@ class SearchControllerTest < ActionController::TestCase |
| 13 | 13 | @request.stubs(:ssl?).returns(false) |
| 14 | 14 | @response = ActionController::TestResponse.new |
| 15 | 15 | |
| 16 | - @category = Category.create!(:name => 'my-category', :environment => Environment.default) | |
| 16 | + @environment = Environment.default | |
| 17 | + @category = Category.create!(:name => 'my-category', :environment => @environment) | |
| 17 | 18 | |
| 18 | - env = Environment.default | |
| 19 | - domain = env.domains.first | |
| 19 | + domain = @environment.domains.first | |
| 20 | 20 | if !domain |
| 21 | 21 | domain = Domain.create!(:name => "127.0.0.1") |
| 22 | - env.domains = [domain] | |
| 23 | - env.save! | |
| 22 | + @environment.domains = [domain] | |
| 23 | + @environment.save! | |
| 24 | 24 | end |
| 25 | 25 | domain.google_maps_key = 'ENVIRONMENT_KEY' |
| 26 | 26 | domain.save! |
| ... | ... | @@ -37,6 +37,8 @@ class SearchControllerTest < ActionController::TestCase |
| 37 | 37 | Person.any_instance.stubs(:user).returns(user) |
| 38 | 38 | end |
| 39 | 39 | |
| 40 | + attr_reader :environment | |
| 41 | + | |
| 40 | 42 | def create_article_with_optional_category(name, profile, category = nil) |
| 41 | 43 | fast_create(Article, {:name => name, :profile_id => profile.id }, :search => true, :category => category) |
| 42 | 44 | end |
| ... | ... | @@ -651,6 +653,122 @@ class SearchControllerTest < ActionController::TestCase |
| 651 | 653 | assert_equal [st1,st2].to_json, response.body |
| 652 | 654 | end |
| 653 | 655 | |
| 656 | + should 'templates variable be an hash in articles asset' do | |
| 657 | + get :articles | |
| 658 | + assert assigns(:templates).kind_of?(Hash) | |
| 659 | + end | |
| 660 | + | |
| 661 | + should 'not load people templates in articles asset' do | |
| 662 | + t1 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 663 | + t2 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 664 | + get :articles | |
| 665 | + assert_nil assigns(:templates)[:people] | |
| 666 | + end | |
| 667 | + | |
| 668 | + should 'not load communities templates in articles asset' do | |
| 669 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 670 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 671 | + get :articles | |
| 672 | + assert_nil assigns(:templates)[:communities] | |
| 673 | + end | |
| 674 | + | |
| 675 | + should 'not load enterprises templates in articles asset' do | |
| 676 | + t1 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 677 | + t2 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 678 | + get :articles | |
| 679 | + assert_nil assigns(:templates)[:enterprises] | |
| 680 | + end | |
| 681 | + | |
| 682 | + should 'templates variable be equals to people templates in people assert' do | |
| 683 | + t1 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 684 | + t2 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 685 | + get :people | |
| 686 | + | |
| 687 | + assert_equivalent [t1,t2], assigns(:templates)[:people] | |
| 688 | + end | |
| 689 | + | |
| 690 | + should 'not load communities templates in people asset' do | |
| 691 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 692 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 693 | + get :people | |
| 694 | + assert_nil assigns(:templates)[:communities] | |
| 695 | + end | |
| 696 | + | |
| 697 | + should 'not load enterprises templates in people asset' do | |
| 698 | + t1 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 699 | + t2 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 700 | + get :people | |
| 701 | + assert_nil assigns(:templates)[:enterprises] | |
| 702 | + end | |
| 703 | + | |
| 704 | + should 'templates variable be equals to communities templates in communities assert' do | |
| 705 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 706 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 707 | + get :communities | |
| 708 | + | |
| 709 | + assert_equivalent [t1,t2], assigns(:templates)[:communities] | |
| 710 | + end | |
| 711 | + | |
| 712 | + should 'not load people templates in communities asset' do | |
| 713 | + t1 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 714 | + t2 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 715 | + get :communities | |
| 716 | + assert_nil assigns(:templates)[:people] | |
| 717 | + end | |
| 718 | + | |
| 719 | + should 'not load enterprises templates in communities asset' do | |
| 720 | + t1 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 721 | + t2 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 722 | + get :communities | |
| 723 | + assert_nil assigns(:templates)[:enterprises] | |
| 724 | + end | |
| 725 | + | |
| 726 | + should 'templates variable be equals to enterprises templates in enterprises assert' do | |
| 727 | + t1 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 728 | + t2 = fast_create(Enterprise, :is_template => true, :environment_id => environment.id) | |
| 729 | + get :enterprises | |
| 730 | + | |
| 731 | + assert_equivalent [t1,t2], assigns(:templates)[:enterprises] | |
| 732 | + end | |
| 733 | + | |
| 734 | + should 'not load communities templates in enterprises asset' do | |
| 735 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 736 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 737 | + get :enterprises | |
| 738 | + assert_nil assigns(:templates)[:communities] | |
| 739 | + end | |
| 740 | + | |
| 741 | + should 'not load people templates in enterprises asset' do | |
| 742 | + t1 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 743 | + t2 = fast_create(Person, :is_template => true, :environment_id => environment.id) | |
| 744 | + get :enterprises | |
| 745 | + assert_nil assigns(:templates)[:people] | |
| 746 | + end | |
| 747 | + | |
| 748 | + should 'list all community of on specific template' do | |
| 749 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 750 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 751 | + c1 = fast_create(Community, :template_id => t1.id, :name => 'Testing community 1', :created_at => DateTime.now - 2) | |
| 752 | + c2 = fast_create(Community, :template_id => t2.id, :name => 'Testing community 2', :created_at => DateTime.now - 1) | |
| 753 | + c3 = fast_create(Community, :template_id => t1.id, :name => 'Testing community 3') | |
| 754 | + c4 = fast_create(Community, :name => 'Testing community 3') | |
| 755 | + | |
| 756 | + get :communities, :template_id => t1.id | |
| 757 | + assert_equivalent [c1,c3] , assigns(:searches)[:communities][:results] | |
| 758 | + end | |
| 759 | + | |
| 760 | + should 'list all communities of no template is passed' do | |
| 761 | + t1 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 762 | + t2 = fast_create(Community, :is_template => true, :environment_id => environment.id) | |
| 763 | + c1 = create(Community, :template_id => t1.id, :name => 'Testing community 1', :created_at => DateTime.now - 2) | |
| 764 | + c2 = create(Community, :template_id => t2.id, :name => 'Testing community 2', :created_at => DateTime.now - 1) | |
| 765 | + c3 = create(Community, :template_id => t1.id, :name => 'Testing community 3') | |
| 766 | + c4 = create(Community, :name => 'Testing community 3') | |
| 767 | + | |
| 768 | + get :communities, :template_id => nil | |
| 769 | + assert_equivalent [t1,t2,c1,c2,c3,c4] , assigns(:searches)[:communities][:results] | |
| 770 | + end | |
| 771 | + | |
| 654 | 772 | protected |
| 655 | 773 | |
| 656 | 774 | def create_event(profile, options) | ... | ... |
test/unit/profile_test.rb
| ... | ... | @@ -1406,6 +1406,71 @@ class ProfileTest < ActiveSupport::TestCase |
| 1406 | 1406 | assert_not_includes environment.profiles.templates, profile |
| 1407 | 1407 | end |
| 1408 | 1408 | |
| 1409 | + should 'return an specific template when specified' do | |
| 1410 | + environment = Environment.default | |
| 1411 | + t1 = fast_create(Profile, :is_template => true) | |
| 1412 | + t2 = fast_create(Profile, :is_template => true) | |
| 1413 | + profile = fast_create(Profile) | |
| 1414 | + | |
| 1415 | + assert_equal [t1], environment.profiles.templates(t1) | |
| 1416 | + assert_equal [t2], environment.profiles.templates(t2) | |
| 1417 | + end | |
| 1418 | + | |
| 1419 | + should 'not return a template when and invalid template is specified' do | |
| 1420 | + environment = Environment.default | |
| 1421 | + t1 = fast_create(Profile, :is_template => true) | |
| 1422 | + t2 = fast_create(Profile, :is_template => true) | |
| 1423 | + t3 = fast_create(Profile) | |
| 1424 | + | |
| 1425 | + assert_equal [], environment.profiles.templates(t3) | |
| 1426 | + end | |
| 1427 | + | |
| 1428 | + should 'return profiles of specified template passing object' do | |
| 1429 | + environment = Environment.default | |
| 1430 | + t1 = fast_create(Profile, :is_template => true) | |
| 1431 | + t2 = fast_create(Profile, :is_template => true) | |
| 1432 | + p1 = fast_create(Profile, :template_id => t1.id) | |
| 1433 | + p2 = fast_create(Profile, :template_id => t2.id) | |
| 1434 | + p3 = fast_create(Profile, :template_id => t1.id) | |
| 1435 | + | |
| 1436 | + assert_equivalent [p1,p3], environment.profiles.with_templates(t1) | |
| 1437 | + end | |
| 1438 | + | |
| 1439 | + should 'return profiles of specified template passing id' do | |
| 1440 | + environment = Environment.default | |
| 1441 | + t1 = fast_create(Profile, :is_template => true) | |
| 1442 | + t2 = fast_create(Profile, :is_template => true) | |
| 1443 | + p1 = fast_create(Profile, :template_id => t1.id) | |
| 1444 | + p2 = fast_create(Profile, :template_id => t2.id) | |
| 1445 | + p3 = fast_create(Profile, :template_id => t1.id) | |
| 1446 | + | |
| 1447 | + assert_equivalent [p1,p3], environment.profiles.with_templates(t1.id) | |
| 1448 | + end | |
| 1449 | + | |
| 1450 | + should 'return profiles of a list of specified templates' do | |
| 1451 | + environment = Environment.default | |
| 1452 | + t1 = fast_create(Profile, :is_template => true) | |
| 1453 | + t2 = fast_create(Profile, :is_template => true) | |
| 1454 | + t3 = fast_create(Profile, :is_template => true) | |
| 1455 | + p1 = fast_create(Profile, :template_id => t1.id) | |
| 1456 | + p2 = fast_create(Profile, :template_id => t2.id) | |
| 1457 | + p3 = fast_create(Profile, :template_id => t3.id) | |
| 1458 | + | |
| 1459 | + assert_equivalent [p1,p2], environment.profiles.with_templates([t1,t2]) | |
| 1460 | + end | |
| 1461 | + | |
| 1462 | + should 'return all profiles without any template if nil is passed as parameter' do | |
| 1463 | + environment = Environment.default | |
| 1464 | + Profile.delete_all | |
| 1465 | + t1 = fast_create(Profile, :is_template => true) | |
| 1466 | + t2 = fast_create(Profile, :is_template => true) | |
| 1467 | + p1 = fast_create(Profile, :template_id => t1.id) | |
| 1468 | + p2 = fast_create(Profile, :template_id => t2.id) | |
| 1469 | + p3 = fast_create(Profile) | |
| 1470 | + | |
| 1471 | + assert_equivalent [t1,t2,p3], environment.profiles.with_templates(nil) | |
| 1472 | + end | |
| 1473 | + | |
| 1409 | 1474 | should 'return a list of profiles that are not templates' do |
| 1410 | 1475 | environment = Environment.default |
| 1411 | 1476 | p1 = fast_create(Profile, :is_template => false) | ... | ... |
test/unit/search_helper_test.rb
| ... | ... | @@ -3,6 +3,9 @@ require_relative "../test_helper" |
| 3 | 3 | class SearchHelperTest < ActiveSupport::TestCase |
| 4 | 4 | |
| 5 | 5 | include SearchHelper |
| 6 | + include ActionView::Helpers::FormOptionsHelper | |
| 7 | + include ActionView::Helpers::FormTagHelper | |
| 8 | + | |
| 6 | 9 | |
| 7 | 10 | should 'return whether on a multiple search' do |
| 8 | 11 | stubs(:params).returns({:action => 'index', :display => 'map'}) |
| ... | ... | @@ -122,4 +125,84 @@ class SearchHelperTest < ActiveSupport::TestCase |
| 122 | 125 | end |
| 123 | 126 | end |
| 124 | 127 | |
| 128 | + should 'return an empty string in assets_submenu for articles assets' do | |
| 129 | + @templates = {} | |
| 130 | + assert_equal '', assets_submenu(:articles) | |
| 131 | + @templates = {:articles => nil} | |
| 132 | + assert_equal '', assets_submenu(:articles) | |
| 133 | + end | |
| 134 | + | |
| 135 | + should 'return an empty string in assets_submenu for people asset without template' do | |
| 136 | + @templates = {:people => nil} | |
| 137 | + assert_equal '', assets_submenu(:people) | |
| 138 | + | |
| 139 | + @templates = {:people => []} | |
| 140 | + assert_equal '', assets_submenu(:people) | |
| 141 | + end | |
| 142 | + | |
| 143 | + should 'return an empty string in assets_submenu for people asset with only one template' do | |
| 144 | + t = fast_create(Person, :is_template => true) | |
| 145 | + @templates = {:people => [t]} | |
| 146 | + assert_equal '', assets_submenu(:people) | |
| 147 | + end | |
| 148 | + | |
| 149 | + should 'return a select of templates for people asset with more then one template' do | |
| 150 | + t1 = fast_create(Person, :is_template => true) | |
| 151 | + t2 = fast_create(Person, :is_template => true) | |
| 152 | + @templates = {:people => [t1,t2]} | |
| 153 | + SearchHelperTest.any_instance.stubs(:params).returns({}) | |
| 154 | + assert_match /select/, assets_submenu(:people) | |
| 155 | + assert_match /#{t1.name}/, assets_submenu(:people) | |
| 156 | + assert_match /#{t2.name}/, assets_submenu(:people) | |
| 157 | + end | |
| 158 | + | |
| 159 | + should 'return an empty string in assets_submenu for communities asset without template' do | |
| 160 | + @templates = {:communities => nil} | |
| 161 | + assert_equal '', assets_submenu(:communities) | |
| 162 | + | |
| 163 | + @templates = {:communities => []} | |
| 164 | + assert_equal '', assets_submenu(:communities) | |
| 165 | + end | |
| 166 | + | |
| 167 | + should 'return an empty string in assets_submenu for communities asset with only one template' do | |
| 168 | + t = fast_create(Community, :is_template => true) | |
| 169 | + @templates = {:communities => [t]} | |
| 170 | + assert_equal '', assets_submenu(:communities) | |
| 171 | + end | |
| 172 | + | |
| 173 | + should 'return a select of templates for communities asset with more then one template' do | |
| 174 | + t1 = fast_create(Community, :is_template => true) | |
| 175 | + t2 = fast_create(Community, :is_template => true) | |
| 176 | + @templates = {:communities => [t1,t2]} | |
| 177 | + SearchHelperTest.any_instance.stubs(:params).returns({}) | |
| 178 | + assert_match /select/, assets_submenu(:communities) | |
| 179 | + assert_match /#{t1.name}/, assets_submenu(:communities) | |
| 180 | + assert_match /#{t2.name}/, assets_submenu(:communities) | |
| 181 | + end | |
| 182 | + | |
| 183 | + should 'return an empty string in assets_submenu for enterprises asset without template' do | |
| 184 | + @templates = {:enterprises => nil} | |
| 185 | + assert_equal '', assets_submenu(:enterprises) | |
| 186 | + | |
| 187 | + @templates = {:enterprises => []} | |
| 188 | + assert_equal '', assets_submenu(:enterprises) | |
| 189 | + end | |
| 190 | + | |
| 191 | + should 'return an empty string in assets_submenu for enterprises asset with only one template' do | |
| 192 | + t = fast_create(Enterprise, :is_template => true) | |
| 193 | + @templates = {:enterprises => [t]} | |
| 194 | + assert_equal '', assets_submenu(:enterprises) | |
| 195 | + end | |
| 196 | + | |
| 197 | + should 'return a select of templates for enterprises asset with more then one template' do | |
| 198 | + t1 = fast_create(Enterprise, :is_template => true) | |
| 199 | + t2 = fast_create(Enterprise, :is_template => true) | |
| 200 | + @templates = {:enterprises => [t1,t2]} | |
| 201 | + SearchHelperTest.any_instance.stubs(:params).returns({}) | |
| 202 | + assert_match /select/, assets_submenu(:enterprises) | |
| 203 | + assert_match /#{t1.name}/, assets_submenu(:enterprises) | |
| 204 | + assert_match /#{t2.name}/, assets_submenu(:enterprises) | |
| 205 | + end | |
| 206 | + | |
| 207 | + | |
| 125 | 208 | end | ... | ... |