Commit 54a29b33aa3119f4f687a144ab44214f6d6a1431
1 parent
0c8eff93
Exists in
master
and in
22 other branches
rails3: fix RecentDocumentsBlock unit tests
This involved a small refactoring on how the test interacts with the object under test and on how the rendering of the block contents is done.
Showing
2 changed files
with
45 additions
and
29 deletions
Show diff stats
app/models/recent_documents_block.rb
| ... | ... | @@ -14,20 +14,26 @@ class RecentDocumentsBlock < Block |
| 14 | 14 | |
| 15 | 15 | settings_items :limit, :type => :integer, :default => 5 |
| 16 | 16 | |
| 17 | - include Rails.application.routes.url_helpers | |
| 18 | 17 | def content(args={}) |
| 19 | - docs = self.limit.nil? ? owner.recent_documents(nil, {}, false) : owner.recent_documents(self.limit, {}, false) | |
| 20 | - block_title(title) + | |
| 21 | - content_tag('ul', docs.map {|item| content_tag('li', link_to(h(item.title), item.url))}.join("\n")) | |
| 18 | + docs = self.docs | |
| 19 | + title = self.title | |
| 20 | + proc do | |
| 21 | + block_title(title) + | |
| 22 | + content_tag('ul', docs.map {|item| content_tag('li', link_to(h(item.title), item.url))}.join("\n")) | |
| 23 | + end | |
| 22 | 24 | end |
| 23 | 25 | |
| 24 | 26 | def footer |
| 25 | 27 | return nil unless self.owner.is_a?(Profile) |
| 26 | 28 | |
| 27 | 29 | profile = self.owner |
| 28 | - lambda do | |
| 30 | + proc do | |
| 29 | 31 | link_to _('All content'), :profile => profile.identifier, :controller => 'profile', :action => 'sitemap' |
| 30 | 32 | end |
| 31 | 33 | end |
| 32 | 34 | |
| 35 | + def docs | |
| 36 | + self.limit.nil? ? owner.recent_documents(nil, {}, false) : owner.recent_documents(self.limit, {}, false) | |
| 37 | + end | |
| 38 | + | |
| 33 | 39 | end | ... | ... |
test/unit/recent_documents_block_test.rb
| ... | ... | @@ -3,16 +3,24 @@ require File.dirname(__FILE__) + '/../test_helper' |
| 3 | 3 | class RecentDocumentsBlockTest < ActiveSupport::TestCase |
| 4 | 4 | |
| 5 | 5 | def setup |
| 6 | + @articles = [] | |
| 6 | 7 | @profile = create_user('testinguser').person |
| 7 | 8 | ['first', 'second', 'third', 'fourth', 'fifth'].each do |name| |
| 8 | - @profile.articles << TextArticle.create(:name => name) | |
| 9 | + article = @profile.articles.create!(:name => name) | |
| 10 | + @articles << article | |
| 9 | 11 | end |
| 10 | 12 | |
| 11 | - box = Box.create!(:owner => profile) | |
| 12 | - @block = RecentDocumentsBlock.create!(:box_id => box.id) | |
| 13 | + box = Box.new | |
| 14 | + box.owner = profile | |
| 15 | + box.save! | |
| 16 | + | |
| 17 | + | |
| 18 | + @block = RecentDocumentsBlock.new | |
| 19 | + @block.box_id = box.id | |
| 20 | + @block.save! | |
| 13 | 21 | |
| 14 | 22 | end |
| 15 | - attr_reader :block, :profile | |
| 23 | + attr_reader :block, :profile, :articles | |
| 16 | 24 | |
| 17 | 25 | should 'describe itself' do |
| 18 | 26 | assert_not_equal Block.description, RecentDocumentsBlock.description |
| ... | ... | @@ -22,26 +30,31 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase |
| 22 | 30 | assert_not_equal Block.new.default_title, RecentDocumentsBlock.new.default_title |
| 23 | 31 | end |
| 24 | 32 | |
| 25 | - should 'output list with links to recent documents' do | |
| 26 | - output = block.content | |
| 27 | - | |
| 28 | - assert_match /href=.*\/testinguser\/first/, output | |
| 29 | - assert_match /href=.*\/testinguser\/second/, output | |
| 30 | - assert_match /href=.*\/testinguser\/third/, output | |
| 31 | - assert_match /href=.*\/testinguser\/fourth/, output | |
| 32 | - assert_match /href=.*\/testinguser\/fifth/, output | |
| 33 | + should 'list recent documents' do | |
| 34 | + assert_equivalent block.docs, articles | |
| 35 | + end | |
| 36 | + | |
| 37 | + should 'link to documents' do | |
| 38 | + articles.each do |a| | |
| 39 | + expects(:link_to).with(a.title, a.url) | |
| 40 | + end | |
| 41 | + stubs(:block_title).returns("") | |
| 42 | + stubs(:content_tag).returns("") | |
| 43 | + stubs(:li).returns("") | |
| 44 | + | |
| 45 | + instance_eval(&block.content) | |
| 33 | 46 | end |
| 34 | 47 | |
| 35 | 48 | should 'respect the maximum number of items as configured' do |
| 36 | 49 | block.limit = 3 |
| 37 | 50 | |
| 38 | - output = block.content | |
| 51 | + list = block.docs | |
| 39 | 52 | |
| 40 | - assert_match /href=.*\/testinguser\/fifth/, output | |
| 41 | - assert_match /href=.*\/testinguser\/fourth/, output | |
| 42 | - assert_match /href=.*\/testinguser\/third/, output | |
| 43 | - assert_no_match /href=.*\/testinguser\/second/, output | |
| 44 | - assert_no_match /href=.*\/testinguser\/first/, output | |
| 53 | + assert_includes list, articles[4] | |
| 54 | + assert_includes list, articles[3] | |
| 55 | + assert_includes list, articles[2] | |
| 56 | + assert_not_includes list, articles[1] | |
| 57 | + assert_not_includes list, articles[0] | |
| 45 | 58 | end |
| 46 | 59 | |
| 47 | 60 | should 'store limit as a number' do |
| ... | ... | @@ -70,12 +83,9 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase |
| 70 | 83 | end |
| 71 | 84 | |
| 72 | 85 | should 'be able to update display setting' do |
| 73 | - user = create_user('testinguser').person | |
| 74 | - box = fast_create(Box, :owner_id => user.id) | |
| 75 | - block = RecentDocumentsBlock.create!(:display => 'never', :box => box) | |
| 76 | - assert block.update_attributes!(:display => 'always') | |
| 77 | - block.reload | |
| 78 | - assert_equal 'always', block.display | |
| 86 | + assert @block.update_attributes!(:display => 'always') | |
| 87 | + @block.reload | |
| 88 | + assert_equal 'always', @block.display | |
| 79 | 89 | end |
| 80 | 90 | |
| 81 | 91 | end | ... | ... |