Commit 54a29b33aa3119f4f687a144ab44214f6d6a1431
1 parent
0c8eff93
Exists in
master
and in
29 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 | ... | ... |