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,20 +14,26 @@ class RecentDocumentsBlock < Block | ||
14 | 14 | ||
15 | settings_items :limit, :type => :integer, :default => 5 | 15 | settings_items :limit, :type => :integer, :default => 5 |
16 | 16 | ||
17 | - include Rails.application.routes.url_helpers | ||
18 | def content(args={}) | 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 | end | 24 | end |
23 | 25 | ||
24 | def footer | 26 | def footer |
25 | return nil unless self.owner.is_a?(Profile) | 27 | return nil unless self.owner.is_a?(Profile) |
26 | 28 | ||
27 | profile = self.owner | 29 | profile = self.owner |
28 | - lambda do | 30 | + proc do |
29 | link_to _('All content'), :profile => profile.identifier, :controller => 'profile', :action => 'sitemap' | 31 | link_to _('All content'), :profile => profile.identifier, :controller => 'profile', :action => 'sitemap' |
30 | end | 32 | end |
31 | end | 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 | end | 39 | end |
test/unit/recent_documents_block_test.rb
@@ -3,16 +3,24 @@ require File.dirname(__FILE__) + '/../test_helper' | @@ -3,16 +3,24 @@ require File.dirname(__FILE__) + '/../test_helper' | ||
3 | class RecentDocumentsBlockTest < ActiveSupport::TestCase | 3 | class RecentDocumentsBlockTest < ActiveSupport::TestCase |
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | + @articles = [] | ||
6 | @profile = create_user('testinguser').person | 7 | @profile = create_user('testinguser').person |
7 | ['first', 'second', 'third', 'fourth', 'fifth'].each do |name| | 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 | end | 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 | end | 22 | end |
15 | - attr_reader :block, :profile | 23 | + attr_reader :block, :profile, :articles |
16 | 24 | ||
17 | should 'describe itself' do | 25 | should 'describe itself' do |
18 | assert_not_equal Block.description, RecentDocumentsBlock.description | 26 | assert_not_equal Block.description, RecentDocumentsBlock.description |
@@ -22,26 +30,31 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase | @@ -22,26 +30,31 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase | ||
22 | assert_not_equal Block.new.default_title, RecentDocumentsBlock.new.default_title | 30 | assert_not_equal Block.new.default_title, RecentDocumentsBlock.new.default_title |
23 | end | 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 | end | 46 | end |
34 | 47 | ||
35 | should 'respect the maximum number of items as configured' do | 48 | should 'respect the maximum number of items as configured' do |
36 | block.limit = 3 | 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 | end | 58 | end |
46 | 59 | ||
47 | should 'store limit as a number' do | 60 | should 'store limit as a number' do |
@@ -70,12 +83,9 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase | @@ -70,12 +83,9 @@ class RecentDocumentsBlockTest < ActiveSupport::TestCase | ||
70 | end | 83 | end |
71 | 84 | ||
72 | should 'be able to update display setting' do | 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 | end | 89 | end |
80 | 90 | ||
81 | end | 91 | end |