Commit eaaf3e5e2abb0ae79db449d63c4e4bbd8536f456
Committed by
Victor Costa
1 parent
d50ac31c
Exists in
master
and in
29 other branches
Option to filter by template in search
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 | ... | ... |