Commit 2942e278d2df7bd14a2bb165fd9c4f63cf618ab8
1 parent
73d01160
Exists in
staging
and in
32 other branches
Extract methods from ApplicationHelper
The method for build profile_image_link was part of ApplicationHelper but will also be necessary for building proper tests on a upcoming refactor for PeopleBlockPlugin. As including ApplicationHelper on unit tests has already caused issues with unwanted block behaviour regarding their visibility, this is a move in the direction of avoiding such issues before they happen and allow reliable future tests.
Showing
6 changed files
with
361 additions
and
340 deletions
Show diff stats
app/helpers/application_helper.rb
@@ -50,6 +50,10 @@ module ApplicationHelper | @@ -50,6 +50,10 @@ module ApplicationHelper | ||
50 | 50 | ||
51 | include ButtonsHelper | 51 | include ButtonsHelper |
52 | 52 | ||
53 | + include ProfileImageHelper | ||
54 | + | ||
55 | + include ThemeLoaderHelper | ||
56 | + | ||
53 | def locale | 57 | def locale |
54 | (@page && !@page.language.blank?) ? @page.language : FastGettext.locale | 58 | (@page && !@page.language.blank?) ? @page.language : FastGettext.locale |
55 | end | 59 | end |
@@ -281,48 +285,6 @@ module ApplicationHelper | @@ -281,48 +285,6 @@ module ApplicationHelper | ||
281 | end | 285 | end |
282 | end | 286 | end |
283 | 287 | ||
284 | - def theme_path | ||
285 | - if session[:theme] | ||
286 | - '/user_themes/' + current_theme | ||
287 | - else | ||
288 | - '/designs/themes/' + current_theme | ||
289 | - end | ||
290 | - end | ||
291 | - | ||
292 | - def current_theme | ||
293 | - @current_theme ||= | ||
294 | - begin | ||
295 | - if session[:theme] | ||
296 | - session[:theme] | ||
297 | - else | ||
298 | - # utility for developers: set the theme to 'random' in development mode and | ||
299 | - # you will get a different theme every request. This is interesting for | ||
300 | - # testing | ||
301 | - if Rails.env.development? && environment.theme == 'random' | ||
302 | - @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand | ||
303 | - @random_theme | ||
304 | - elsif Rails.env.development? && respond_to?(:params) && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme])) | ||
305 | - params[:theme] | ||
306 | - else | ||
307 | - if profile && !profile.theme.nil? | ||
308 | - profile.theme | ||
309 | - elsif environment | ||
310 | - environment.theme | ||
311 | - else | ||
312 | - if logger | ||
313 | - logger.warn("No environment found. This is weird.") | ||
314 | - logger.warn("Request environment: %s" % request.env.inspect) | ||
315 | - logger.warn("Request parameters: %s" % params.inspect) | ||
316 | - end | ||
317 | - | ||
318 | - # could not determine the theme, so return the default one | ||
319 | - 'default' | ||
320 | - end | ||
321 | - end | ||
322 | - end | ||
323 | - end | ||
324 | - end | ||
325 | - | ||
326 | def theme_view_file(template, theme=nil) | 288 | def theme_view_file(template, theme=nil) |
327 | # Since we cannot control what people are doing in external themes, we | 289 | # Since we cannot control what people are doing in external themes, we |
328 | # will keep looking for the deprecated .rhtml extension here. | 290 | # will keep looking for the deprecated .rhtml extension here. |
@@ -395,141 +357,6 @@ module ApplicationHelper | @@ -395,141 +357,6 @@ module ApplicationHelper | ||
395 | Theme.find(current_theme).owner.identifier | 357 | Theme.find(current_theme).owner.identifier |
396 | end | 358 | end |
397 | 359 | ||
398 | - # generates a image tag for the profile. | ||
399 | - # | ||
400 | - # If the profile has no image set yet, then a default image is used. | ||
401 | - def profile_image(profile, size=:portrait, opt={}) | ||
402 | - return '' if profile.nil? | ||
403 | - opt[:alt] ||= profile.name() | ||
404 | - opt[:title] ||= '' | ||
405 | - opt[:class] ||= '' | ||
406 | - opt[:class] += ( profile.class == Person ? ' photo' : ' logo' ) | ||
407 | - image_tag(profile_icon(profile, size), opt ) | ||
408 | - end | ||
409 | - | ||
410 | - def profile_icon( profile, size=:portrait, return_mimetype=false ) | ||
411 | - filename, mimetype = '', 'image/png' | ||
412 | - if profile.image | ||
413 | - filename = profile.image.public_filename( size ) | ||
414 | - mimetype = profile.image.content_type | ||
415 | - else | ||
416 | - icon = | ||
417 | - if profile.organization? | ||
418 | - if profile.kind_of?(Community) | ||
419 | - '/images/icons-app/community-'+ size.to_s() +'.png' | ||
420 | - else | ||
421 | - '/images/icons-app/enterprise-'+ size.to_s() +'.png' | ||
422 | - end | ||
423 | - else | ||
424 | - pixels = Image.attachment_options[:thumbnails][size].split('x').first | ||
425 | - gravatar_profile_image_url( | ||
426 | - profile.email, | ||
427 | - :size => pixels, | ||
428 | - :d => gravatar_default | ||
429 | - ) | ||
430 | - end | ||
431 | - filename = default_or_themed_icon(icon) | ||
432 | - end | ||
433 | - return_mimetype ? [filename, mimetype] : filename | ||
434 | - end | ||
435 | - | ||
436 | - def default_or_themed_icon(icon) | ||
437 | - if File.exists?(Rails.root.join('public', theme_path, icon)) | ||
438 | - theme_path + icon | ||
439 | - else | ||
440 | - icon | ||
441 | - end | ||
442 | - end | ||
443 | - | ||
444 | - def profile_sex_icon( profile ) | ||
445 | - return '' unless profile.is_a?(Person) | ||
446 | - return '' unless !environment.enabled?('disable_gender_icon') | ||
447 | - sex = ( profile.sex ? profile.sex.to_s() : 'undef' ) | ||
448 | - title = ( sex == 'undef' ? _('non registered gender') : ( sex == 'male' ? _('Male') : _('Female') ) ) | ||
449 | - sex = content_tag 'span', | ||
450 | - content_tag( 'span', sex ), | ||
451 | - :class => 'sex-'+sex, | ||
452 | - :title => title | ||
453 | - sex | ||
454 | - end | ||
455 | - | ||
456 | - def links_for_balloon(profile) | ||
457 | - if environment.enabled?(:show_balloon_with_profile_links_when_clicked) | ||
458 | - if profile.kind_of?(Person) | ||
459 | - [ | ||
460 | - {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | ||
461 | - {_('Friends') => {:href => url_for(:controller => :profile, :action => :friends, :profile => profile.identifier)}}, | ||
462 | - {_('Communities') => {:href => url_for(:controller => :profile, :action => :communities, :profile => profile.identifier)}}, | ||
463 | - {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, | ||
464 | - {_('Add') => {:href => url_for(profile.add_url), :class => 'add-friend', :style => 'display: none'}} | ||
465 | - ] | ||
466 | - elsif profile.kind_of?(Community) | ||
467 | - [ | ||
468 | - {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | ||
469 | - {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | ||
470 | - {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | ||
471 | - {_('Join') => {:href => url_for(profile.join_url), :class => 'join-community', :style => 'display: none'}}, | ||
472 | - {_('Leave community') => {:href => url_for(profile.leave_url), :class => 'leave-community', :style => 'display: none'}}, | ||
473 | - {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}} | ||
474 | - ] | ||
475 | - elsif profile.kind_of?(Enterprise) | ||
476 | - [ | ||
477 | - {_('Products') => {:href => catalog_path(profile.identifier)}}, | ||
478 | - {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | ||
479 | - {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | ||
480 | - {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, | ||
481 | - ] | ||
482 | - else | ||
483 | - [] | ||
484 | - end | ||
485 | - end | ||
486 | - end | ||
487 | - | ||
488 | - # displays a link to the profile homepage with its image (as generated by | ||
489 | - # #profile_image) and its name below it. | ||
490 | - def profile_image_link( profile, size=:portrait, tag='li', extra_info = nil ) | ||
491 | - if content = @plugins.dispatch_first(:profile_image_link, profile, size, tag, extra_info) | ||
492 | - return instance_exec(&content) | ||
493 | - end | ||
494 | - name = profile.short_name | ||
495 | - if profile.person? | ||
496 | - url = url_for(profile.check_friendship_url) | ||
497 | - trigger_class = 'person-trigger' | ||
498 | - else | ||
499 | - city = '' | ||
500 | - url = url_for(profile.check_membership_url) | ||
501 | - if profile.community? | ||
502 | - trigger_class = 'community-trigger' | ||
503 | - elsif profile.enterprise? | ||
504 | - trigger_class = 'enterprise-trigger' | ||
505 | - end | ||
506 | - end | ||
507 | - | ||
508 | - extra_info_tag = '' | ||
509 | - img_class = 'profile-image' | ||
510 | - | ||
511 | - if extra_info.is_a? Hash | ||
512 | - extra_info_tag = content_tag( 'span', extra_info[:value], :class => 'extra_info '+extra_info[:class]) | ||
513 | - img_class +=' '+extra_info[:class] | ||
514 | - else | ||
515 | - extra_info_tag = content_tag( 'span', extra_info, :class => 'extra_info' ) | ||
516 | - end | ||
517 | - | ||
518 | - links = links_for_balloon(profile) | ||
519 | - content_tag('div', content_tag(tag, | ||
520 | - (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? | ||
521 | - popover_menu(_('Profile links'),profile.short_name,links,{:class => trigger_class, :url => url}) : "") + | ||
522 | - link_to( | ||
523 | - content_tag( 'span', profile_image( profile, size ), :class => img_class ) + | ||
524 | - content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) + | ||
525 | - extra_info_tag + profile_sex_icon( profile ), | ||
526 | - profile.url, | ||
527 | - :class => 'profile_link url', | ||
528 | - :help => _('Click on this icon to go to the <b>%s</b>\'s home page') % profile.name, | ||
529 | - :title => profile.name ), | ||
530 | - :class => 'vcard'), :class => 'common-profile-list-block') | ||
531 | - end | ||
532 | - | ||
533 | def popover_menu(title,menu_title,links,html_options={}) | 360 | def popover_menu(title,menu_title,links,html_options={}) |
534 | html_options[:class] = "" unless html_options[:class] | 361 | html_options[:class] = "" unless html_options[:class] |
535 | html_options[:class] << " menu-submenu-trigger" | 362 | html_options[:class] << " menu-submenu-trigger" |
@@ -538,10 +365,6 @@ module ApplicationHelper | @@ -538,10 +365,6 @@ module ApplicationHelper | ||
538 | link_to(content_tag(:span, title), '#', html_options) | 365 | link_to(content_tag(:span, title), '#', html_options) |
539 | end | 366 | end |
540 | 367 | ||
541 | - def gravatar_default | ||
542 | - (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] || 'mm' | ||
543 | - end | ||
544 | - | ||
545 | attr_reader :environment | 368 | attr_reader :environment |
546 | 369 | ||
547 | def select_categories(object_name, title=nil, title_size=4) | 370 | def select_categories(object_name, title=nil, title_size=4) |
@@ -0,0 +1,140 @@ | @@ -0,0 +1,140 @@ | ||
1 | +module ProfileImageHelper | ||
2 | + def default_or_themed_icon(icon) | ||
3 | + if File.exists?(Rails.root.join('public', theme_path, icon)) | ||
4 | + theme_path + icon | ||
5 | + else | ||
6 | + icon | ||
7 | + end | ||
8 | + end | ||
9 | + | ||
10 | + def gravatar_default | ||
11 | + (respond_to?(:theme_option) && theme_option.present? && theme_option['gravatar']) || NOOSFERO_CONF['gravatar'] || 'mm' | ||
12 | + end | ||
13 | + | ||
14 | + def profile_sex_icon( profile ) | ||
15 | + return '' unless profile.is_a?(Person) | ||
16 | + return '' unless !environment.enabled?('disable_gender_icon') | ||
17 | + sex = ( profile.sex ? profile.sex.to_s() : 'undef' ) | ||
18 | + title = ( sex == 'undef' ? _('non registered gender') : ( sex == 'male' ? _('Male') : _('Female') ) ) | ||
19 | + sex = content_tag 'span', | ||
20 | + content_tag( 'span', sex ), | ||
21 | + :class => 'sex-'+sex, | ||
22 | + :title => title | ||
23 | + sex | ||
24 | + end | ||
25 | + | ||
26 | + def profile_icon( profile, size=:portrait, return_mimetype=false ) | ||
27 | + filename, mimetype = '', 'image/png' | ||
28 | + if profile.image | ||
29 | + filename = profile.image.public_filename( size ) | ||
30 | + mimetype = profile.image.content_type | ||
31 | + else | ||
32 | + icon = | ||
33 | + if profile.organization? | ||
34 | + if profile.kind_of?(Community) | ||
35 | + '/images/icons-app/community-'+ size.to_s() +'.png' | ||
36 | + else | ||
37 | + '/images/icons-app/enterprise-'+ size.to_s() +'.png' | ||
38 | + end | ||
39 | + else | ||
40 | + pixels = Image.attachment_options[:thumbnails][size].split('x').first | ||
41 | + gravatar_profile_image_url( | ||
42 | + profile.email, | ||
43 | + :size => pixels, | ||
44 | + :d => gravatar_default | ||
45 | + ) | ||
46 | + end | ||
47 | + filename = default_or_themed_icon(icon) | ||
48 | + end | ||
49 | + return_mimetype ? [filename, mimetype] : filename | ||
50 | + end | ||
51 | + | ||
52 | + # generates a image tag for the profile. | ||
53 | + # | ||
54 | + # If the profile has no image set yet, then a default image is used. | ||
55 | + def profile_image(profile, size=:portrait, opt={}) | ||
56 | + return '' if profile.nil? | ||
57 | + opt[:alt] ||= profile.name() | ||
58 | + opt[:title] ||= '' | ||
59 | + opt[:class] ||= '' | ||
60 | + opt[:class] += ( profile.class == Person ? ' photo' : ' logo' ) | ||
61 | + image_tag(profile_icon(profile, size), opt ) | ||
62 | + end | ||
63 | + | ||
64 | + def links_for_balloon(profile) | ||
65 | + if environment.enabled?(:show_balloon_with_profile_links_when_clicked) | ||
66 | + if profile.kind_of?(Person) | ||
67 | + [ | ||
68 | + {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | ||
69 | + {_('Friends') => {:href => url_for(:controller => :profile, :action => :friends, :profile => profile.identifier)}}, | ||
70 | + {_('Communities') => {:href => url_for(:controller => :profile, :action => :communities, :profile => profile.identifier)}}, | ||
71 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, | ||
72 | + {_('Add') => {:href => url_for(profile.add_url), :class => 'add-friend', :style => 'display: none'}} | ||
73 | + ] | ||
74 | + elsif profile.kind_of?(Community) | ||
75 | + [ | ||
76 | + {_('Wall') => {:href => url_for(profile.public_profile_url)}}, | ||
77 | + {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | ||
78 | + {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | ||
79 | + {_('Join') => {:href => url_for(profile.join_url), :class => 'join-community', :style => 'display: none'}}, | ||
80 | + {_('Leave community') => {:href => url_for(profile.leave_url), :class => 'leave-community', :style => 'display: none'}}, | ||
81 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}} | ||
82 | + ] | ||
83 | + elsif profile.kind_of?(Enterprise) | ||
84 | + [ | ||
85 | + {_('Products') => {:href => catalog_path(profile.identifier)}}, | ||
86 | + {_('Members') => {:href => url_for(:controller => :profile, :action => :members, :profile => profile.identifier)}}, | ||
87 | + {_('Agenda') => {:href => url_for(:controller => :profile, :action => :events, :profile => profile.identifier)}}, | ||
88 | + {_('Send an e-mail') => {:href => url_for(:profile => profile.identifier, :controller => 'contact', :action => 'new'), :class => 'send-an-email', :style => 'display: none'}}, | ||
89 | + ] | ||
90 | + else | ||
91 | + [] | ||
92 | + end | ||
93 | + end | ||
94 | + end | ||
95 | + | ||
96 | + # displays a link to the profile homepage with its image (as generated by | ||
97 | + # #profile_image) and its name below it. | ||
98 | + def profile_image_link( profile, size=:portrait, tag='li', extra_info = nil ) | ||
99 | + if content = @plugins.dispatch_first(:profile_image_link, profile, size, tag, extra_info) | ||
100 | + return instance_exec(&content) | ||
101 | + end | ||
102 | + name = profile.short_name | ||
103 | + if profile.person? | ||
104 | + url = url_for(profile.check_friendship_url) | ||
105 | + trigger_class = 'person-trigger' | ||
106 | + else | ||
107 | + city = '' | ||
108 | + url = url_for(profile.check_membership_url) | ||
109 | + if profile.community? | ||
110 | + trigger_class = 'community-trigger' | ||
111 | + elsif profile.enterprise? | ||
112 | + trigger_class = 'enterprise-trigger' | ||
113 | + end | ||
114 | + end | ||
115 | + | ||
116 | + extra_info_tag = '' | ||
117 | + img_class = 'profile-image' | ||
118 | + | ||
119 | + if extra_info.is_a? Hash | ||
120 | + extra_info_tag = content_tag( 'span', extra_info[:value], :class => 'extra_info '+extra_info[:class]) | ||
121 | + img_class +=' '+extra_info[:class] | ||
122 | + else | ||
123 | + extra_info_tag = content_tag( 'span', extra_info, :class => 'extra_info' ) | ||
124 | + end | ||
125 | + | ||
126 | + links = links_for_balloon(profile) | ||
127 | + content_tag('div', content_tag(tag, | ||
128 | + (environment.enabled?(:show_balloon_with_profile_links_when_clicked) ? | ||
129 | + popover_menu(_('Profile links'),profile.short_name,links,{:class => trigger_class, :url => url}) : "") + | ||
130 | + link_to( | ||
131 | + content_tag( 'span', profile_image( profile, size ), :class => img_class ) + | ||
132 | + content_tag( 'span', h(name), :class => ( profile.class == Person ? 'fn' : 'org' ) ) + | ||
133 | + extra_info_tag + profile_sex_icon( profile ), | ||
134 | + profile.url, | ||
135 | + :class => 'profile_link url', | ||
136 | + :help => _('Click on this icon to go to the <b>%s</b>\'s home page') % profile.name, | ||
137 | + :title => profile.name ), | ||
138 | + :class => 'vcard'), :class => 'common-profile-list-block') | ||
139 | + end | ||
140 | +end | ||
0 | \ No newline at end of file | 141 | \ No newline at end of file |
@@ -0,0 +1,43 @@ | @@ -0,0 +1,43 @@ | ||
1 | +module ThemeLoaderHelper | ||
2 | + def current_theme | ||
3 | + @current_theme ||= | ||
4 | + begin | ||
5 | + if session[:theme] | ||
6 | + session[:theme] | ||
7 | + else | ||
8 | + # utility for developers: set the theme to 'random' in development mode and | ||
9 | + # you will get a different theme every request. This is interesting for | ||
10 | + # testing | ||
11 | + if Rails.env.development? && environment.theme == 'random' | ||
12 | + @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand | ||
13 | + @random_theme | ||
14 | + elsif Rails.env.development? && respond_to?(:params) && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme])) | ||
15 | + params[:theme] | ||
16 | + else | ||
17 | + if profile && !profile.theme.nil? | ||
18 | + profile.theme | ||
19 | + elsif environment | ||
20 | + environment.theme | ||
21 | + else | ||
22 | + if logger | ||
23 | + logger.warn("No environment found. This is weird.") | ||
24 | + logger.warn("Request environment: %s" % request.env.inspect) | ||
25 | + logger.warn("Request parameters: %s" % params.inspect) | ||
26 | + end | ||
27 | + | ||
28 | + # could not determine the theme, so return the default one | ||
29 | + 'default' | ||
30 | + end | ||
31 | + end | ||
32 | + end | ||
33 | + end | ||
34 | + end | ||
35 | + | ||
36 | + def theme_path | ||
37 | + if session[:theme] | ||
38 | + '/user_themes/' + current_theme | ||
39 | + else | ||
40 | + '/designs/themes/' + current_theme | ||
41 | + end | ||
42 | + end | ||
43 | +end |
test/unit/application_helper_test.rb
@@ -145,35 +145,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -145,35 +145,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
145 | assert_tag_in_string rolename_for(member2, community), :tag => 'span', :content => 'Profile Administrator' | 145 | assert_tag_in_string rolename_for(member2, community), :tag => 'span', :content => 'Profile Administrator' |
146 | end | 146 | end |
147 | 147 | ||
148 | - should 'get theme from environment by default' do | ||
149 | - @environment = mock | ||
150 | - @environment.stubs(:theme).returns('my-environment-theme') | ||
151 | - stubs(:profile).returns(nil) | ||
152 | - assert_equal 'my-environment-theme', current_theme | ||
153 | - end | ||
154 | - | ||
155 | - should 'get theme from profile when profile is present' do | ||
156 | - profile = mock | ||
157 | - profile.stubs(:theme).returns('my-profile-theme') | ||
158 | - stubs(:profile).returns(profile) | ||
159 | - assert_equal 'my-profile-theme', current_theme | ||
160 | - end | ||
161 | - | ||
162 | - should 'override theme with testing theme from session' do | ||
163 | - stubs(:session).returns(:theme => 'theme-under-test') | ||
164 | - assert_equal 'theme-under-test', current_theme | ||
165 | - end | ||
166 | - | ||
167 | - should 'point to system theme path by default' do | ||
168 | - expects(:current_theme).returns('my-system-theme') | ||
169 | - assert_equal '/designs/themes/my-system-theme', theme_path | ||
170 | - end | ||
171 | - | ||
172 | - should 'point to user theme path when testing theme' do | ||
173 | - stubs(:session).returns({:theme => 'theme-under-test'}) | ||
174 | - assert_equal '/user_themes/theme-under-test', theme_path | ||
175 | - end | ||
176 | - | ||
177 | should 'render theme footer' do | 148 | should 'render theme footer' do |
178 | stubs(:theme_path).returns('/user_themes/mytheme') | 149 | stubs(:theme_path).returns('/user_themes/mytheme') |
179 | footer_path = Rails.root.join('public', 'user_themes', 'mytheme', 'footer.html.erb') | 150 | footer_path = Rails.root.join('public', 'user_themes', 'mytheme', 'footer.html.erb') |
@@ -295,38 +266,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -295,38 +266,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
295 | assert_nil select_categories(mock) | 266 | assert_nil select_categories(mock) |
296 | end | 267 | end |
297 | 268 | ||
298 | - should 'provide sex icon for males' do | ||
299 | - stubs(:environment).returns(Environment.default) | ||
300 | - expects(:content_tag).with(anything, 'male').returns('MALE!!') | ||
301 | - expects(:content_tag).with(anything, 'MALE!!', is_a(Hash)).returns("FINAL") | ||
302 | - assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'male')) | ||
303 | - end | ||
304 | - | ||
305 | - should 'provide sex icon for females' do | ||
306 | - stubs(:environment).returns(Environment.default) | ||
307 | - expects(:content_tag).with(anything, 'female').returns('FEMALE!!') | ||
308 | - expects(:content_tag).with(anything, 'FEMALE!!', is_a(Hash)).returns("FINAL") | ||
309 | - assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'female')) | ||
310 | - end | ||
311 | - | ||
312 | - should 'provide undef sex icon' do | ||
313 | - stubs(:environment).returns(Environment.default) | ||
314 | - expects(:content_tag).with(anything, 'undef').returns('UNDEF!!') | ||
315 | - expects(:content_tag).with(anything, 'UNDEF!!', is_a(Hash)).returns("FINAL") | ||
316 | - assert_equal "FINAL", profile_sex_icon(build(Person, :sex => nil)) | ||
317 | - end | ||
318 | - | ||
319 | - should 'not draw sex icon for non-person profiles' do | ||
320 | - assert_equal '', profile_sex_icon(Community.new) | ||
321 | - end | ||
322 | - | ||
323 | - should 'not draw sex icon when disabled in the environment' do | ||
324 | - env = fast_create(Environment, :name => 'env test') | ||
325 | - env.expects(:enabled?).with('disable_gender_icon').returns(true) | ||
326 | - stubs(:environment).returns(env) | ||
327 | - assert_equal '', profile_sex_icon(build(Person, :sex => 'male')) | ||
328 | - end | ||
329 | - | ||
330 | should 'display field on person signup' do | 269 | should 'display field on person signup' do |
331 | env = create(Environment, :name => 'env test') | 270 | env = create(Environment, :name => 'env test') |
332 | stubs(:environment).returns(env) | 271 | stubs(:environment).returns(env) |
@@ -524,19 +463,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -524,19 +463,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
524 | assert_equal Environment.default.name, page_title | 463 | assert_equal Environment.default.name, page_title |
525 | end | 464 | end |
526 | 465 | ||
527 | - should 'gravatar default parameter' do | ||
528 | - profile = mock | ||
529 | - profile.stubs(:theme).returns('some-theme') | ||
530 | - stubs(:profile).returns(profile) | ||
531 | - | ||
532 | - NOOSFERO_CONF.stubs(:[]).with('gravatar').returns('crazyvatar') | ||
533 | - assert_equal gravatar_default, 'crazyvatar' | ||
534 | - | ||
535 | - stubs(:theme_option).returns('gravatar' => 'nicevatar') | ||
536 | - NOOSFERO_CONF.stubs(:[]).with('gravatar').returns('nicevatar') | ||
537 | - assert_equal gravatar_default, 'nicevatar' | ||
538 | - end | ||
539 | - | ||
540 | should 'use theme passed via param when in development mode' do | 466 | should 'use theme passed via param when in development mode' do |
541 | stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) | 467 | stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) |
542 | Rails.env.stubs(:development?).returns(true) | 468 | Rails.env.stubs(:development?).returns(true) |
@@ -558,48 +484,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -558,48 +484,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
558 | assert_equal environment.theme, current_theme | 484 | assert_equal environment.theme, current_theme |
559 | end | 485 | end |
560 | 486 | ||
561 | - should 'return nil when :show_balloon_with_profile_links_when_clicked is not enabled in environment' do | ||
562 | - env = Environment.default | ||
563 | - env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(false) | ||
564 | - stubs(:environment).returns(env) | ||
565 | - profile = Profile.new | ||
566 | - assert_nil links_for_balloon(profile) | ||
567 | - end | ||
568 | - | ||
569 | - should 'return ordered list of links to balloon to Person' do | ||
570 | - env = Environment.default | ||
571 | - env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
572 | - stubs(:environment).returns(env) | ||
573 | - person = Person.new identifier: 'person' | ||
574 | - person.stubs(:url).returns('url for person') | ||
575 | - person.stubs(:public_profile_url).returns('url for person') | ||
576 | - links = links_for_balloon(person) | ||
577 | - assert_equal ['Wall', 'Friends', 'Communities', 'Send an e-mail', 'Add'], links.map{|i| i.keys.first} | ||
578 | - end | ||
579 | - | ||
580 | - should 'return ordered list of links to balloon to Community' do | ||
581 | - env = Environment.default | ||
582 | - env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
583 | - stubs(:environment).returns(env) | ||
584 | - community = Community.new identifier: 'comm' | ||
585 | - community.stubs(:url).returns('url for community') | ||
586 | - community.stubs(:public_profile_url).returns('url for community') | ||
587 | - links = links_for_balloon(community) | ||
588 | - assert_equal ['Wall', 'Members', 'Agenda', 'Join', 'Leave community', 'Send an e-mail'], links.map{|i| i.keys.first} | ||
589 | - end | ||
590 | - | ||
591 | - should 'return ordered list of links to balloon to Enterprise' do | ||
592 | - env = Environment.default | ||
593 | - env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
594 | - stubs(:environment).returns(env) | ||
595 | - enterprise = Enterprise.new identifier: 'coop' | ||
596 | - enterprise.stubs(:url).returns('url for enterprise') | ||
597 | - enterprise.stubs(:public_profile_url).returns('url for enterprise') | ||
598 | - stubs(:catalog_path) | ||
599 | - links = links_for_balloon(enterprise) | ||
600 | - assert_equal ['Products', 'Members', 'Agenda', 'Send an e-mail'], links.map{|i| i.keys.first} | ||
601 | - end | ||
602 | - | ||
603 | should 'use favicon from environment theme if does not have profile' do | 487 | should 'use favicon from environment theme if does not have profile' do |
604 | stubs(:environment).returns(fast_create(Environment, :theme => 'new-theme')) | 488 | stubs(:environment).returns(fast_create(Environment, :theme => 'new-theme')) |
605 | stubs(:profile).returns(nil) | 489 | stubs(:profile).returns(nil) |
@@ -651,24 +535,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -651,24 +535,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
651 | assert admin_link.present? | 535 | assert admin_link.present? |
652 | end | 536 | end |
653 | 537 | ||
654 | - should 'not return mime type of profile icon if not requested' do | ||
655 | - stubs(:profile).returns(Person.new) | ||
656 | - stubs(:current_theme).returns('default') | ||
657 | - | ||
658 | - filename, mime = profile_icon(Person.new, :thumb) | ||
659 | - assert_not_nil filename | ||
660 | - assert_nil mime | ||
661 | - end | ||
662 | - | ||
663 | - should 'return mime type of profile icon' do | ||
664 | - stubs(:profile).returns(Person.new) | ||
665 | - stubs(:current_theme).returns('default') | ||
666 | - | ||
667 | - filename, mime = profile_icon(Person.new, :thumb, true) | ||
668 | - assert_not_nil filename | ||
669 | - assert_not_nil mime | ||
670 | - end | ||
671 | - | ||
672 | should 'pluralize without count' do | 538 | should 'pluralize without count' do |
673 | assert_equal "tests", pluralize_without_count(2, "test") | 539 | assert_equal "tests", pluralize_without_count(2, "test") |
674 | assert_equal "test", pluralize_without_count(1, "test") | 540 | assert_equal "test", pluralize_without_count(1, "test") |
@@ -1037,31 +903,6 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -1037,31 +903,6 @@ class ApplicationHelperTest < ActionView::TestCase | ||
1037 | assert_equal c.top_url, top_url | 903 | assert_equal c.top_url, top_url |
1038 | end | 904 | end |
1039 | 905 | ||
1040 | - should "Extra info with hash" do | ||
1041 | - @plugins = mock | ||
1042 | - @plugins.stubs(:dispatch_first).returns(false) | ||
1043 | - env = Environment.default | ||
1044 | - stubs(:environment).returns(env) | ||
1045 | - stubs(:profile).returns(profile) | ||
1046 | - profile = fast_create(Person, :environment_id => env.id) | ||
1047 | - info = {:value =>_('New'), :class => 'new-profile'} | ||
1048 | - html = profile_image_link(profile, size=:portrait, tag='li', extra_info = info) | ||
1049 | - assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'profile-image new-profile' } | ||
1050 | - assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'extra_info new-profile' }, :content => 'New' | ||
1051 | - end | ||
1052 | - | ||
1053 | - should "Extra info without hash" do | ||
1054 | - @plugins = mock | ||
1055 | - @plugins.stubs(:dispatch_first).returns(false) | ||
1056 | - env = Environment.default | ||
1057 | - stubs(:environment).returns(env) | ||
1058 | - stubs(:profile).returns(profile) | ||
1059 | - profile = fast_create(Person, :environment_id => env.id) | ||
1060 | - info = 'new' | ||
1061 | - html = profile_image_link(profile, size=:portrait, tag='li', extra_info = info) | ||
1062 | - assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'extra_info' }, :content => 'new' | ||
1063 | - end | ||
1064 | - | ||
1065 | protected | 906 | protected |
1066 | include NoosferoTestHelper | 907 | include NoosferoTestHelper |
1067 | 908 |
@@ -0,0 +1,138 @@ | @@ -0,0 +1,138 @@ | ||
1 | +# encoding: UTF-8 | ||
2 | +require_relative "../test_helper" | ||
3 | + | ||
4 | +class ProfileImageHelperTest < ActionView::TestCase | ||
5 | + include Noosfero::Gravatar | ||
6 | + include ThemeLoaderHelper | ||
7 | + include ProfileImageHelper | ||
8 | + | ||
9 | + should "Extra info with hash" do | ||
10 | + @plugins = mock | ||
11 | + @plugins.stubs(:dispatch_first).returns(false) | ||
12 | + env = Environment.default | ||
13 | + stubs(:environment).returns(env) | ||
14 | + stubs(:profile).returns(profile) | ||
15 | + profile = fast_create(Person, :environment_id => env.id) | ||
16 | + info = {:value =>_('New'), :class => 'new-profile'} | ||
17 | + html = profile_image_link(profile, size=:portrait, tag='li', extra_info = info) | ||
18 | + assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'profile-image new-profile' } | ||
19 | + assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'extra_info new-profile' }, :content => 'New' | ||
20 | + end | ||
21 | + | ||
22 | + should "Extra info without hash" do | ||
23 | + @plugins = mock | ||
24 | + @plugins.stubs(:dispatch_first).returns(false) | ||
25 | + env = Environment.default | ||
26 | + stubs(:environment).returns(env) | ||
27 | + stubs(:profile).returns(profile) | ||
28 | + profile = fast_create(Person, :environment_id => env.id) | ||
29 | + info = 'new' | ||
30 | + html = profile_image_link(profile, size=:portrait, tag='li', extra_info = info) | ||
31 | + assert_tag_in_string html, :tag => 'span', :attributes => { :class => 'extra_info' }, :content => 'new' | ||
32 | + end | ||
33 | + | ||
34 | + should 'return nil when :show_balloon_with_profile_links_when_clicked is not enabled in environment' do | ||
35 | + env = Environment.default | ||
36 | + env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(false) | ||
37 | + stubs(:environment).returns(env) | ||
38 | + profile = Profile.new | ||
39 | + assert_nil links_for_balloon(profile) | ||
40 | + end | ||
41 | + | ||
42 | + should 'return ordered list of links to balloon to Person' do | ||
43 | + env = Environment.default | ||
44 | + env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
45 | + stubs(:environment).returns(env) | ||
46 | + person = Person.new identifier: 'person' | ||
47 | + person.stubs(:url).returns('url for person') | ||
48 | + person.stubs(:public_profile_url).returns('url for person') | ||
49 | + links = links_for_balloon(person) | ||
50 | + assert_equal ['Wall', 'Friends', 'Communities', 'Send an e-mail', 'Add'], links.map{|i| i.keys.first} | ||
51 | + end | ||
52 | + | ||
53 | + should 'return ordered list of links to balloon to Community' do | ||
54 | + env = Environment.default | ||
55 | + env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
56 | + stubs(:environment).returns(env) | ||
57 | + community = Community.new identifier: 'comm' | ||
58 | + community.stubs(:url).returns('url for community') | ||
59 | + community.stubs(:public_profile_url).returns('url for community') | ||
60 | + links = links_for_balloon(community) | ||
61 | + assert_equal ['Wall', 'Members', 'Agenda', 'Join', 'Leave community', 'Send an e-mail'], links.map{|i| i.keys.first} | ||
62 | + end | ||
63 | + | ||
64 | + should 'return ordered list of links to balloon to Enterprise' do | ||
65 | + env = Environment.default | ||
66 | + env.stubs(:enabled?).with(:show_balloon_with_profile_links_when_clicked).returns(true) | ||
67 | + stubs(:environment).returns(env) | ||
68 | + enterprise = Enterprise.new identifier: 'coop' | ||
69 | + enterprise.stubs(:url).returns('url for enterprise') | ||
70 | + enterprise.stubs(:public_profile_url).returns('url for enterprise') | ||
71 | + stubs(:catalog_path) | ||
72 | + links = links_for_balloon(enterprise) | ||
73 | + assert_equal ['Products', 'Members', 'Agenda', 'Send an e-mail'], links.map{|i| i.keys.first} | ||
74 | + end | ||
75 | + | ||
76 | + should 'not return mime type of profile icon if not requested' do | ||
77 | + stubs(:profile).returns(Person.new) | ||
78 | + stubs(:current_theme).returns('default') | ||
79 | + | ||
80 | + filename, mime = profile_icon(Person.new, :thumb) | ||
81 | + assert_not_nil filename | ||
82 | + assert_nil mime | ||
83 | + end | ||
84 | + | ||
85 | + should 'return mime type of profile icon' do | ||
86 | + stubs(:profile).returns(Person.new) | ||
87 | + stubs(:current_theme).returns('default') | ||
88 | + | ||
89 | + filename, mime = profile_icon(Person.new, :thumb, true) | ||
90 | + assert_not_nil filename | ||
91 | + assert_not_nil mime | ||
92 | + end | ||
93 | + | ||
94 | + should 'provide sex icon for males' do | ||
95 | + stubs(:environment).returns(Environment.default) | ||
96 | + expects(:content_tag).with(anything, 'male').returns('MALE!!') | ||
97 | + expects(:content_tag).with(anything, 'MALE!!', is_a(Hash)).returns("FINAL") | ||
98 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'male')) | ||
99 | + end | ||
100 | + | ||
101 | + should 'provide sex icon for females' do | ||
102 | + stubs(:environment).returns(Environment.default) | ||
103 | + expects(:content_tag).with(anything, 'female').returns('FEMALE!!') | ||
104 | + expects(:content_tag).with(anything, 'FEMALE!!', is_a(Hash)).returns("FINAL") | ||
105 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'female')) | ||
106 | + end | ||
107 | + | ||
108 | + should 'provide undef sex icon' do | ||
109 | + stubs(:environment).returns(Environment.default) | ||
110 | + expects(:content_tag).with(anything, 'undef').returns('UNDEF!!') | ||
111 | + expects(:content_tag).with(anything, 'UNDEF!!', is_a(Hash)).returns("FINAL") | ||
112 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => nil)) | ||
113 | + end | ||
114 | + | ||
115 | + should 'not draw sex icon for non-person profiles' do | ||
116 | + assert_equal '', profile_sex_icon(Community.new) | ||
117 | + end | ||
118 | + | ||
119 | + should 'not draw sex icon when disabled in the environment' do | ||
120 | + env = fast_create(Environment, :name => 'env test') | ||
121 | + env.expects(:enabled?).with('disable_gender_icon').returns(true) | ||
122 | + stubs(:environment).returns(env) | ||
123 | + assert_equal '', profile_sex_icon(build(Person, :sex => 'male')) | ||
124 | + end | ||
125 | + | ||
126 | + should 'gravatar default parameter' do | ||
127 | + profile = mock | ||
128 | + profile.stubs(:theme).returns('some-theme') | ||
129 | + stubs(:profile).returns(profile) | ||
130 | + | ||
131 | + NOOSFERO_CONF.stubs(:[]).with('gravatar').returns('crazyvatar') | ||
132 | + assert_equal gravatar_default, 'crazyvatar' | ||
133 | + | ||
134 | + stubs(:theme_option).returns('gravatar' => 'nicevatar') | ||
135 | + NOOSFERO_CONF.stubs(:[]).with('gravatar').returns('nicevatar') | ||
136 | + assert_equal gravatar_default, 'nicevatar' | ||
137 | + end | ||
138 | +end | ||
0 | \ No newline at end of file | 139 | \ No newline at end of file |
@@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
1 | +# encoding: UTF-8 | ||
2 | +require_relative "../test_helper" | ||
3 | + | ||
4 | +class ThemeLoaderHelperTest < ActionView::TestCase | ||
5 | + include ThemeLoaderHelper | ||
6 | + | ||
7 | + should 'get theme from environment by default' do | ||
8 | + @environment = mock | ||
9 | + @environment.stubs(:theme).returns('my-environment-theme') | ||
10 | + stubs(:profile).returns(nil) | ||
11 | + stubs(:environment).returns(@environment) | ||
12 | + assert_equal 'my-environment-theme', current_theme | ||
13 | + end | ||
14 | + | ||
15 | + should 'get theme from profile when profile is present' do | ||
16 | + profile = mock | ||
17 | + profile.stubs(:theme).returns('my-profile-theme') | ||
18 | + stubs(:profile).returns(profile) | ||
19 | + assert_equal 'my-profile-theme', current_theme | ||
20 | + end | ||
21 | + | ||
22 | + should 'override theme with testing theme from session' do | ||
23 | + stubs(:session).returns(:theme => 'theme-under-test') | ||
24 | + assert_equal 'theme-under-test', current_theme | ||
25 | + end | ||
26 | + | ||
27 | + should 'point to system theme path by default' do | ||
28 | + expects(:current_theme).returns('my-system-theme') | ||
29 | + assert_equal '/designs/themes/my-system-theme', theme_path | ||
30 | + end | ||
31 | + | ||
32 | + should 'point to user theme path when testing theme' do | ||
33 | + stubs(:session).returns({:theme => 'theme-under-test'}) | ||
34 | + assert_equal '/user_themes/theme-under-test', theme_path | ||
35 | + end | ||
36 | +end | ||
0 | \ No newline at end of file | 37 | \ No newline at end of file |