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 | 50 | |
51 | 51 | include ButtonsHelper |
52 | 52 | |
53 | + include ProfileImageHelper | |
54 | + | |
55 | + include ThemeLoaderHelper | |
56 | + | |
53 | 57 | def locale |
54 | 58 | (@page && !@page.language.blank?) ? @page.language : FastGettext.locale |
55 | 59 | end |
... | ... | @@ -281,48 +285,6 @@ module ApplicationHelper |
281 | 285 | end |
282 | 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 | 288 | def theme_view_file(template, theme=nil) |
327 | 289 | # Since we cannot control what people are doing in external themes, we |
328 | 290 | # will keep looking for the deprecated .rhtml extension here. |
... | ... | @@ -395,141 +357,6 @@ module ApplicationHelper |
395 | 357 | Theme.find(current_theme).owner.identifier |
396 | 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 | 360 | def popover_menu(title,menu_title,links,html_options={}) |
534 | 361 | html_options[:class] = "" unless html_options[:class] |
535 | 362 | html_options[:class] << " menu-submenu-trigger" |
... | ... | @@ -538,10 +365,6 @@ module ApplicationHelper |
538 | 365 | link_to(content_tag(:span, title), '#', html_options) |
539 | 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 | 368 | attr_reader :environment |
546 | 369 | |
547 | 370 | def select_categories(object_name, title=nil, title_size=4) | ... | ... |
... | ... | @@ -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 | 141 | \ No newline at end of file | ... | ... |
... | ... | @@ -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 | 145 | assert_tag_in_string rolename_for(member2, community), :tag => 'span', :content => 'Profile Administrator' |
146 | 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 | 148 | should 'render theme footer' do |
178 | 149 | stubs(:theme_path).returns('/user_themes/mytheme') |
179 | 150 | footer_path = Rails.root.join('public', 'user_themes', 'mytheme', 'footer.html.erb') |
... | ... | @@ -295,38 +266,6 @@ class ApplicationHelperTest < ActionView::TestCase |
295 | 266 | assert_nil select_categories(mock) |
296 | 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 | 269 | should 'display field on person signup' do |
331 | 270 | env = create(Environment, :name => 'env test') |
332 | 271 | stubs(:environment).returns(env) |
... | ... | @@ -524,19 +463,6 @@ class ApplicationHelperTest < ActionView::TestCase |
524 | 463 | assert_equal Environment.default.name, page_title |
525 | 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 | 466 | should 'use theme passed via param when in development mode' do |
541 | 467 | stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) |
542 | 468 | Rails.env.stubs(:development?).returns(true) |
... | ... | @@ -558,48 +484,6 @@ class ApplicationHelperTest < ActionView::TestCase |
558 | 484 | assert_equal environment.theme, current_theme |
559 | 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 | 487 | should 'use favicon from environment theme if does not have profile' do |
604 | 488 | stubs(:environment).returns(fast_create(Environment, :theme => 'new-theme')) |
605 | 489 | stubs(:profile).returns(nil) |
... | ... | @@ -651,24 +535,6 @@ class ApplicationHelperTest < ActionView::TestCase |
651 | 535 | assert admin_link.present? |
652 | 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 | 538 | should 'pluralize without count' do |
673 | 539 | assert_equal "tests", pluralize_without_count(2, "test") |
674 | 540 | assert_equal "test", pluralize_without_count(1, "test") |
... | ... | @@ -1037,31 +903,6 @@ class ApplicationHelperTest < ActionView::TestCase |
1037 | 903 | assert_equal c.top_url, top_url |
1038 | 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 | 906 | protected |
1066 | 907 | include NoosferoTestHelper |
1067 | 908 | ... | ... |
... | ... | @@ -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 | 139 | \ No newline at end of file | ... | ... |
... | ... | @@ -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 | 37 | \ No newline at end of file | ... | ... |