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 | ... | ... |