| | 350 | |
|---|
| | 351 | class FragmentCachingTestController < ActionController::Base |
|---|
| | 352 | def some_action; end; |
|---|
| | 353 | end |
|---|
| | 354 | |
|---|
| | 355 | class FragmentCachingTest < Test::Unit::TestCase |
|---|
| | 356 | def setup |
|---|
| | 357 | ActionController::Base.perform_caching = true |
|---|
| | 358 | @store = ActionController::Caching::Fragments::UnthreadedMemoryStore.new |
|---|
| | 359 | ActionController::Base.fragment_cache_store = @store |
|---|
| | 360 | @controller = FragmentCachingTestController.new |
|---|
| | 361 | @params = {:controller => 'posts', :action => 'index'} |
|---|
| | 362 | @request = ActionController::TestRequest.new |
|---|
| | 363 | @response = ActionController::TestResponse.new |
|---|
| | 364 | @controller.params = @params |
|---|
| | 365 | @controller.request = @request |
|---|
| | 366 | @controller.response = @response |
|---|
| | 367 | @controller.send(:initialize_current_url) |
|---|
| | 368 | end |
|---|
| | 369 | |
|---|
| | 370 | def test_fragement_cache_key |
|---|
| | 371 | assert_equal 'what a key', @controller.fragment_cache_key('what a key') |
|---|
| | 372 | assert_equal( "test.host/fragment_caching_test/some_action", |
|---|
| | 373 | @controller.fragment_cache_key(:controller => 'fragment_caching_test',:action => 'some_action')) |
|---|
| | 374 | end |
|---|
| | 375 | |
|---|
| | 376 | def test_read_fragment__with_caching_enabled |
|---|
| | 377 | @store.write('name', 'value') |
|---|
| | 378 | assert_equal 'value', @controller.read_fragment('name') |
|---|
| | 379 | end |
|---|
| | 380 | |
|---|
| | 381 | def test_read_fragment__with_caching_disabled |
|---|
| | 382 | ActionController::Base.perform_caching = false |
|---|
| | 383 | @store.write('name', 'value') |
|---|
| | 384 | assert_nil @controller.read_fragment('name') |
|---|
| | 385 | end |
|---|
| | 386 | |
|---|
| | 387 | def test_write_fragment__with_caching_enabled |
|---|
| | 388 | assert_nil @store.read('name') |
|---|
| | 389 | assert_equal 'value', @controller.write_fragment('name', 'value') |
|---|
| | 390 | assert_equal 'value', @store.read('name') |
|---|
| | 391 | end |
|---|
| | 392 | |
|---|
| | 393 | def test_write_fragment__with_caching_disabled |
|---|
| | 394 | assert_nil @store.read('name') |
|---|
| | 395 | ActionController::Base.perform_caching = false |
|---|
| | 396 | assert_equal nil, @controller.write_fragment('name', 'value') |
|---|
| | 397 | assert_nil @store.read('name') |
|---|
| | 398 | end |
|---|
| | 399 | |
|---|
| | 400 | def test_expire_fragment__with_simple_key |
|---|
| | 401 | @store.write('name', 'value') |
|---|
| | 402 | @controller.expire_fragment 'name' |
|---|
| | 403 | assert_nil @store.read('name') |
|---|
| | 404 | end |
|---|
| | 405 | |
|---|
| | 406 | def test_expire_fragment__with__regexp |
|---|
| | 407 | @store.write('name', 'value') |
|---|
| | 408 | @store.write('another_name', 'another_value') |
|---|
| | 409 | @store.write('primalgrasp', 'will not expire ;-)') |
|---|
| | 410 | |
|---|
| | 411 | @controller.expire_fragment /name/ |
|---|
| | 412 | |
|---|
| | 413 | assert_nil @store.read('name') |
|---|
| | 414 | assert_nil @store.read('another_name') |
|---|
| | 415 | assert_equal 'will not expire ;-)', @store.read('primalgrasp') |
|---|
| | 416 | end |
|---|
| | 417 | |
|---|
| | 418 | def test_fragment_for__with_disabled_caching |
|---|
| | 419 | ActionController::Base.perform_caching = false |
|---|
| | 420 | |
|---|
| | 421 | @store.write('expensive', 'fragment content') |
|---|
| | 422 | fragment_computed = false |
|---|
| | 423 | |
|---|
| | 424 | buffer = 'generated till now -> ' |
|---|
| | 425 | @controller.fragment_for(Proc.new { fragment_computed = true }, 'expensive') { buffer } |
|---|
| | 426 | |
|---|
| | 427 | assert fragment_computed |
|---|
| | 428 | assert_equal 'generated till now -> ', buffer |
|---|
| | 429 | end |
|---|
| | 430 | |
|---|
| | 431 | |
|---|
| | 432 | def test_fragment_for |
|---|
| | 433 | @store.write('expensive', 'fragment content') |
|---|
| | 434 | fragment_computed = false |
|---|
| | 435 | |
|---|
| | 436 | buffer = 'generated till now -> ' |
|---|
| | 437 | @controller.fragment_for(Proc.new { fragment_computed = true }, 'expensive') { buffer} |
|---|
| | 438 | |
|---|
| | 439 | assert !fragment_computed |
|---|
| | 440 | assert_equal 'generated till now -> fragment content', buffer |
|---|
| | 441 | end |
|---|
| | 442 | |
|---|
| | 443 | def test_cache_erb_fragment |
|---|
| | 444 | @store.write('expensive', 'fragment content') |
|---|
| | 445 | _erbout = 'generated till now -> ' |
|---|
| | 446 | |
|---|
| | 447 | assert_equal( 'generated till now -> fragment content', |
|---|
| | 448 | @controller.cache_erb_fragment(Proc.new{ }, 'expensive')) |
|---|
| | 449 | end |
|---|
| | 450 | |
|---|
| | 451 | def test_cache_rxml_fragment |
|---|
| | 452 | @store.write('expensive', 'fragment content') |
|---|
| | 453 | xml = 'generated till now -> ' |
|---|
| | 454 | class << xml; def target!; to_s; end; end |
|---|
| | 455 | |
|---|
| | 456 | assert_equal( 'generated till now -> fragment content', |
|---|
| | 457 | @controller.cache_rxml_fragment(Proc.new{ }, 'expensive')) |
|---|
| | 458 | end |
|---|
| | 459 | |
|---|
| | 460 | def test_cache_rjs_fragment |
|---|
| | 461 | @store.write('expensive', 'fragment content') |
|---|
| | 462 | page = 'generated till now -> ' |
|---|
| | 463 | |
|---|
| | 464 | assert_equal( 'generated till now -> fragment content', |
|---|
| | 465 | @controller.cache_rjs_fragment(Proc.new{ }, 'expensive')) |
|---|
| | 466 | end |
|---|
| | 467 | |
|---|
| | 468 | def test_cache_rjs_fragment_debug_mode_does_not_interfere |
|---|
| | 469 | @store.write('expensive', 'fragment content') |
|---|
| | 470 | page = 'generated till now -> ' |
|---|
| | 471 | |
|---|
| | 472 | begin |
|---|
| | 473 | debug_mode, ActionView::Base.debug_rjs = ActionView::Base.debug_rjs, true |
|---|
| | 474 | assert_equal( 'generated till now -> fragment content', |
|---|
| | 475 | @controller.cache_rjs_fragment(Proc.new{ }, 'expensive')) |
|---|
| | 476 | assert ActionView::Base.debug_rjs |
|---|
| | 477 | ensure |
|---|
| | 478 | ActionView::Base.debug_rjs = debug_mode |
|---|
| | 479 | end |
|---|
| | 480 | end |
|---|
| | 481 | end |
|---|