Commit bc5af220914fa5072d21fd86827ae1e329ba8a4d
1 parent
31d0610a
Exists in
master
and in
29 other branches
rails3: fix application_helper tests
PS: still has a failing test due to monkey patches not loading.
Showing
2 changed files
with
41 additions
and
47 deletions
Show diff stats
app/helpers/application_helper.rb
| ... | ... | @@ -40,6 +40,8 @@ module ApplicationHelper |
| 40 | 40 | |
| 41 | 41 | include LayoutHelper |
| 42 | 42 | |
| 43 | + VIEW_EXTENSIONS = ['.rhtml', '.html.erb'] | |
| 44 | + | |
| 43 | 45 | def locale |
| 44 | 46 | (@page && !@page.language.blank?) ? @page.language : FastGettext.locale |
| 45 | 47 | end |
| ... | ... | @@ -289,8 +291,10 @@ module ApplicationHelper |
| 289 | 291 | search_name = "_" + search_name |
| 290 | 292 | end |
| 291 | 293 | |
| 292 | - path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + '.html.erb') : File.join(view_path, search_name + '.html.erb') | |
| 293 | - return name if File.exists?(File.join(path)) | |
| 294 | + VIEW_EXTENSIONS.each do |ext| | |
| 295 | + path = defined?(params) && params[:controller] ? File.join(view_path, params[:controller], search_name + ext) : File.join(view_path, search_name + ext) | |
| 296 | + return name if File.exists?(File.join(path)) | |
| 297 | + end | |
| 294 | 298 | |
| 295 | 299 | partial_for_class_in_view_path(klass.superclass, view_path, prefix, suffix) |
| 296 | 300 | end |
| ... | ... | @@ -328,7 +332,7 @@ module ApplicationHelper |
| 328 | 332 | "\n" + |
| 329 | 333 | sources.flatten.map do |source| |
| 330 | 334 | filename = filename_for_stylesheet(source.to_s, themed_source) |
| 331 | - if File.exists?(Rails.root.join('public', filename)) | |
| 335 | + if File.exists?(Rails.root.join('public', filename[1..-1])) | |
| 332 | 336 | "@import url(#{filename});\n" |
| 333 | 337 | else |
| 334 | 338 | "/* Not included: url(#{filename}) */\n" |
| ... | ... | @@ -369,10 +373,10 @@ module ApplicationHelper |
| 369 | 373 | # utility for developers: set the theme to 'random' in development mode and |
| 370 | 374 | # you will get a different theme every request. This is interesting for |
| 371 | 375 | # testing |
| 372 | - if Rails.env == 'development' && environment.theme == 'random' | |
| 376 | + if Rails.env.development? && environment.theme == 'random' | |
| 373 | 377 | @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand |
| 374 | 378 | @random_theme |
| 375 | - elsif Rails.env == 'development' && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme])) | |
| 379 | + elsif Rails.env.development? && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme])) | |
| 376 | 380 | params[:theme] |
| 377 | 381 | else |
| 378 | 382 | if profile && !profile.theme.nil? |
| ... | ... | @@ -397,8 +401,8 @@ module ApplicationHelper |
| 397 | 401 | def theme_include(template) |
| 398 | 402 | # XXX Since we cannot control what people are doing in external themes, we |
| 399 | 403 | # will keep looking for the deprecated .rhtml extension here. |
| 400 | - ['.rhtml', '.html.erb'].each do |ext| | |
| 401 | - file = Rails.root.join('public', theme_path, template + ext) | |
| 404 | + VIEW_EXTENSIONS.each do |ext| | |
| 405 | + file = Rails.root.join('public', theme_path[1..-1], template + ext) | |
| 402 | 406 | if File.exists?(file) |
| 403 | 407 | return render :file => file, :use_full_path => false |
| 404 | 408 | end |
| ... | ... | @@ -923,7 +927,7 @@ module ApplicationHelper |
| 923 | 927 | theme_icon_themes = theme_option(:icon_theme) || [] |
| 924 | 928 | for icon_theme in theme_icon_themes do |
| 925 | 929 | theme_path = "/designs/icons/#{icon_theme}/style.css" |
| 926 | - if File.exists?(Rails.root.join('public', theme_path)) | |
| 930 | + if File.exists?(Rails.root.join('public', theme_path[1..-1])) | |
| 927 | 931 | icon_themes << theme_path |
| 928 | 932 | end |
| 929 | 933 | end | ... | ... |
test/unit/application_helper_test.rb
| 1 | 1 | # encoding: UTF-8 |
| 2 | 2 | require File.dirname(__FILE__) + '/../test_helper' |
| 3 | 3 | |
| 4 | -class ApplicationHelperTest < ActiveSupport::TestCase | |
| 4 | +class ApplicationHelperTest < ActionView::TestCase | |
| 5 | 5 | |
| 6 | 6 | include ApplicationHelper |
| 7 | 7 | |
| ... | ... | @@ -16,26 +16,14 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 16 | 16 | @controller.stubs(:view_paths).returns([p1,p2]) |
| 17 | 17 | |
| 18 | 18 | self.stubs(:params).returns({:controller => 'test'}) |
| 19 | + File.stubs(:exists?).returns(false) | |
| 19 | 20 | |
| 20 | 21 | File.expects(:exists?).with(p1+"test/_integer.rhtml").returns(true) |
| 21 | - | |
| 22 | - File.expects(:exists?).with(p1+"test/_float.rhtml").returns(false) | |
| 23 | - File.expects(:exists?).with(p1+"test/_float.html.erb").returns(false) | |
| 24 | - File.expects(:exists?).with(p2+"test/_float.rhtml").returns(false) | |
| 25 | - File.expects(:exists?).with(p2+"test/_float.html.erb").returns(false) | |
| 26 | - File.expects(:exists?).with(p1+"test/_numeric.rhtml").returns(false) | |
| 27 | - File.expects(:exists?).with(p1+"test/_object.rhtml").returns(false) | |
| 28 | - File.expects(:exists?).with(p1+"test/_object.html.erb").returns(false) | |
| 29 | - File.expects(:exists?).with(p1+"test/_numeric.html.erb").returns(false) | |
| 30 | - File.expects(:exists?).with(p2+"test/_numeric.rhtml").returns(true) | |
| 31 | - | |
| 32 | - File.expects(:exists?).with(p1+"test/_object.rhtml").returns(false) | |
| 33 | - File.expects(:exists?).with(p1+"test/_object.html.erb").returns(false) | |
| 34 | - File.expects(:exists?).with(p2+"test/_object.rhtml").returns(false) | |
| 35 | - File.expects(:exists?).with(p2+"test/_object.html.erb").returns(false) | |
| 36 | - | |
| 37 | 22 | assert_equal 'integer', partial_for_class(Integer) |
| 23 | + | |
| 24 | + File.expects(:exists?).with(p1+"test/_numeric.html.erb").returns(true) | |
| 38 | 25 | assert_equal 'numeric', partial_for_class(Float) |
| 26 | + | |
| 39 | 27 | assert_raises ArgumentError do |
| 40 | 28 | partial_for_class(Object) |
| 41 | 29 | end |
| ... | ... | @@ -49,15 +37,14 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 49 | 37 | |
| 50 | 38 | class School; class Project; end; end |
| 51 | 39 | |
| 40 | + File.stubs(:exists?).returns(false) | |
| 52 | 41 | File.expects(:exists?).with(p+"test/application_helper_test/school/_project.rhtml").returns(true) |
| 53 | 42 | |
| 54 | 43 | assert_equal 'test/application_helper_test/school/project', partial_for_class(School::Project) |
| 55 | 44 | end |
| 56 | 45 | |
| 57 | 46 | should 'look for superclasses on view_for_profile actions' do |
| 58 | - File.expects(:exists?).with(Rails.root.join('app', 'views', 'blocks', 'profile_info_actions', 'float.rhtml')).returns(false) | |
| 59 | - File.expects(:exists?).with(Rails.root.join('app', 'views', 'blocks', 'profile_info_actions', 'float.html.erb')).returns(false) | |
| 60 | - File.expects(:exists?).with(Rails.root.join('app', 'views', 'blocks', 'profile_info_actions', 'numeric.rhtml')).returns(false) | |
| 47 | + File.stubs(:exists?).returns(false) | |
| 61 | 48 | File.expects(:exists?).with(Rails.root.join('app', 'views', 'blocks', 'profile_info_actions', 'numeric.html.erb')).returns(true) |
| 62 | 49 | |
| 63 | 50 | assert_equal 'blocks/profile_info_actions/numeric.html.erb', view_for_profile_actions(Float) |
| ... | ... | @@ -70,6 +57,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 70 | 57 | end |
| 71 | 58 | |
| 72 | 59 | should 'generate link to stylesheet' do |
| 60 | + File.stubs(:exists?).returns(false) | |
| 73 | 61 | File.expects(:exists?).with(Rails.root.join('public', 'stylesheets', 'something.css')).returns(true) |
| 74 | 62 | expects(:filename_for_stylesheet).with('something', nil).returns('/stylesheets/something.css') |
| 75 | 63 | assert_match '@import url(/stylesheets/something.css)', stylesheet_import('something') |
| ... | ... | @@ -231,6 +219,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 231 | 219 | |
| 232 | 220 | should 'use environment´s template when there is no profile' do |
| 233 | 221 | stubs(:profile).returns(nil) |
| 222 | + self.stubs(:environment).returns(Environment.default) | |
| 234 | 223 | environment.expects(:layout_template).returns('sometemplate') |
| 235 | 224 | assert_equal "/designs/templates/sometemplate/stylesheets/style.css", template_stylesheet_path |
| 236 | 225 | end |
| ... | ... | @@ -263,21 +252,21 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 263 | 252 | stubs(:environment).returns(Environment.default) |
| 264 | 253 | expects(:content_tag).with(anything, 'male').returns('MALE!!') |
| 265 | 254 | expects(:content_tag).with(anything, 'MALE!!', is_a(Hash)).returns("FINAL") |
| 266 | - assert_equal "FINAL", profile_sex_icon(Person.new(:sex => 'male')) | |
| 255 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'male')) | |
| 267 | 256 | end |
| 268 | 257 | |
| 269 | 258 | should 'provide sex icon for females' do |
| 270 | 259 | stubs(:environment).returns(Environment.default) |
| 271 | 260 | expects(:content_tag).with(anything, 'female').returns('FEMALE!!') |
| 272 | 261 | expects(:content_tag).with(anything, 'FEMALE!!', is_a(Hash)).returns("FINAL") |
| 273 | - assert_equal "FINAL", profile_sex_icon(Person.new(:sex => 'female')) | |
| 262 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => 'female')) | |
| 274 | 263 | end |
| 275 | 264 | |
| 276 | 265 | should 'provide undef sex icon' do |
| 277 | 266 | stubs(:environment).returns(Environment.default) |
| 278 | 267 | expects(:content_tag).with(anything, 'undef').returns('UNDEF!!') |
| 279 | 268 | expects(:content_tag).with(anything, 'UNDEF!!', is_a(Hash)).returns("FINAL") |
| 280 | - assert_equal "FINAL", profile_sex_icon(Person.new(:sex => nil)) | |
| 269 | + assert_equal "FINAL", profile_sex_icon(build(Person, :sex => nil)) | |
| 281 | 270 | end |
| 282 | 271 | |
| 283 | 272 | should 'not draw sex icon for non-person profiles' do |
| ... | ... | @@ -288,11 +277,11 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 288 | 277 | env = fast_create(Environment, :name => 'env test') |
| 289 | 278 | env.expects(:enabled?).with('disable_gender_icon').returns(true) |
| 290 | 279 | stubs(:environment).returns(env) |
| 291 | - assert_equal '', profile_sex_icon(Person.new(:sex => 'male')) | |
| 280 | + assert_equal '', profile_sex_icon(build(Person, :sex => 'male')) | |
| 292 | 281 | end |
| 293 | 282 | |
| 294 | 283 | should 'display field on person signup' do |
| 295 | - env = Environment.create!(:name => 'env test') | |
| 284 | + env = create(Environment, :name => 'env test') | |
| 296 | 285 | stubs(:environment).returns(env) |
| 297 | 286 | |
| 298 | 287 | controller = mock |
| ... | ... | @@ -305,7 +294,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 305 | 294 | end |
| 306 | 295 | |
| 307 | 296 | should 'display field on enterprise registration' do |
| 308 | - env = Environment.create!(:name => 'env test') | |
| 297 | + env = create(Environment, :name => 'env test') | |
| 309 | 298 | stubs(:environment).returns(env) |
| 310 | 299 | |
| 311 | 300 | controller = mock |
| ... | ... | @@ -319,7 +308,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 319 | 308 | end |
| 320 | 309 | |
| 321 | 310 | should 'display field on community creation' do |
| 322 | - env = Environment.create!(:name => 'env test') | |
| 311 | + env = create(Environment, :name => 'env test') | |
| 323 | 312 | stubs(:environment).returns(env) |
| 324 | 313 | |
| 325 | 314 | controller = mock |
| ... | ... | @@ -345,7 +334,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 345 | 334 | end |
| 346 | 335 | |
| 347 | 336 | should 'not display field on enterprise registration' do |
| 348 | - env = Environment.create!(:name => 'env test') | |
| 337 | + env = create(Environment, :name => 'env test') | |
| 349 | 338 | stubs(:environment).returns(env) |
| 350 | 339 | |
| 351 | 340 | controller = mock |
| ... | ... | @@ -359,7 +348,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 359 | 348 | end |
| 360 | 349 | |
| 361 | 350 | should 'not display field on community creation' do |
| 362 | - env = Environment.create!(:name => 'env test') | |
| 351 | + env = create(Environment, :name => 'env test') | |
| 363 | 352 | stubs(:environment).returns(env) |
| 364 | 353 | |
| 365 | 354 | controller = mock |
| ... | ... | @@ -482,17 +471,17 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 482 | 471 | end |
| 483 | 472 | |
| 484 | 473 | should 'use theme passed via param when in development mode' do |
| 485 | - stubs(:environment).returns(Environment.new(:theme => 'environment-theme')) | |
| 486 | - ENV.stubs(:[]).with('RAILS_ENV').returns('development') | |
| 474 | + stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) | |
| 475 | + Rails.env.stubs(:development?).returns(true) | |
| 487 | 476 | self.stubs(:params).returns({:theme => 'skyblue'}) |
| 488 | 477 | assert_equal 'skyblue', current_theme |
| 489 | 478 | end |
| 490 | 479 | |
| 491 | 480 | should 'not use theme passed via param when in production mode' do |
| 492 | - stubs(:environment).returns(Environment.new(:theme => 'environment-theme')) | |
| 481 | + stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) | |
| 493 | 482 | ENV.stubs(:[]).with('RAILS_ENV').returns('production') |
| 494 | 483 | self.stubs(:params).returns({:theme => 'skyblue'}) |
| 495 | - stubs(:profile).returns(Profile.new(:theme => 'profile-theme')) | |
| 484 | + stubs(:profile).returns(build(Profile, :theme => 'profile-theme')) | |
| 496 | 485 | assert_equal 'profile-theme', current_theme |
| 497 | 486 | end |
| 498 | 487 | |
| ... | ... | @@ -578,7 +567,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 578 | 567 | should 'use favicon from profile articles if the profile theme does not have' do |
| 579 | 568 | stubs(:environment).returns(fast_create(Environment, :theme => 'new-theme')) |
| 580 | 569 | stubs(:profile).returns(fast_create(Profile, :theme => 'profile-theme')) |
| 581 | - file = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/favicon.ico', 'image/x-ico'), :profile => profile) | |
| 570 | + file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/favicon.ico', 'image/x-ico'), :profile => profile) | |
| 582 | 571 | File.expects(:exists?).with(Rails.root.join('public', theme_path, 'favicon.ico')).returns(false) |
| 583 | 572 | |
| 584 | 573 | assert_match /favicon.ico/, theme_favicon |
| ... | ... | @@ -600,7 +589,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 600 | 589 | path = Rails.root.join('app', 'views') |
| 601 | 590 | @controller.stubs(:view_paths).returns([path]) |
| 602 | 591 | |
| 603 | - file = path + '/shared/usermenu/xmpp_chat.rhtml' | |
| 592 | + file = path.join('shared','usermenu', 'xmpp_chat.html.erb') | |
| 604 | 593 | expects(:render).with(:file => file, :use_full_path => false).returns('Open chat') |
| 605 | 594 | |
| 606 | 595 | assert_equal 'Open chat', render_environment_features(:usermenu) |
| ... | ... | @@ -636,7 +625,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 636 | 625 | |
| 637 | 626 | should 'show task information with the requestor' do |
| 638 | 627 | person = create_user('usertest').person |
| 639 | - task = Task.create(:requestor => person) | |
| 628 | + task = create(Task, :requestor => person) | |
| 640 | 629 | assert_match person.name, task_information(task) |
| 641 | 630 | end |
| 642 | 631 | |
| ... | ... | @@ -729,7 +718,7 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 729 | 718 | |
| 730 | 719 | should 'reference to article, in a profile with domain' do |
| 731 | 720 | c = fast_create(Community) |
| 732 | - c.domains << Domain.new(:name=>'domain.xyz') | |
| 721 | + c.domains << build(Domain, :name=>'domain.xyz') | |
| 733 | 722 | b = fast_create(Blog, :profile_id => c.id) |
| 734 | 723 | a = fast_create(TinyMceArticle, :profile_id => c.id, :parent_id => b.id) |
| 735 | 724 | a.save! |
| ... | ... | @@ -788,8 +777,9 @@ class ApplicationHelperTest < ActiveSupport::TestCase |
| 788 | 777 | result = button_bar :id=>'bt1' do |
| 789 | 778 | '<b>foo</b>' |
| 790 | 779 | end |
| 791 | - assert_equal '<div class="button-bar" id="bt1"><b>foo</b>'+ | |
| 792 | - '<br style=\'clear: left;\' /></div>', result | |
| 780 | + assert_tag_in_string result, :tag =>'div', :attributes => {:class => 'button-bar', :id => 'bt1'} | |
| 781 | + assert_tag_in_string result, :tag =>'b', :content => 'foo', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}} | |
| 782 | + assert_tag_in_string result, :tag =>'br', :parent => {:tag => 'div', :attributes => {:id => 'bt1'}} | |
| 793 | 783 | end |
| 794 | 784 | |
| 795 | 785 | protected | ... | ... |