folder_helper_test.rb
5.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
require_relative "../test_helper"
class FolderHelperTest < ActionView::TestCase
include ActionView::Helpers::TagHelper
include ActionView::Helpers::UrlHelper
include ActionView::Helpers::AssetTagHelper
include DatesHelper
include FolderHelper
should 'display icon for articles' do
art1 = mock; art1_class = mock
art1.expects(:class).returns(art1_class)
art1_class.expects(:icon_name).returns('icon1')
art2 = mock; art2_class = mock
art2.expects(:class).returns(art2_class)
art2_class.expects(:icon_name).returns('icon2')
assert_equal 'icon icon-icon1', icon_for_article(art1)
assert_equal 'icon icon-icon2', icon_for_article(art2)
end
should 'display icon for images' do
profile = fast_create(Profile)
file = create(UploadedFile, :uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :profile => profile)
file = FilePresenter.for file
process_delayed_job_queue
assert_match /rails_icon\.png/, icon_for_article(file.reload)
end
should 'display icon for type of article' do
Article.expects(:icon_name).returns('article')
assert_match /icon-newarticle/, icon_for_new_article(Article)
end
should 'list all the folder\'s children to the owner' do
profile = create_user('Folder Owner').person
folder = fast_create(Folder, :profile_id => profile.id)
sub_folder = fast_create(Folder, {:parent_id => folder.id, :profile_id => profile.id})
sub_blog = fast_create(Blog, {:parent_id => folder.id, :profile_id => profile.id})
sub_article = fast_create(Article, {:parent_id => folder.id, :profile_id => profile.id, :published => false})
result = available_articles(folder.children, profile)
assert_includes result, sub_folder
assert_includes result, sub_article
assert_includes result, sub_blog
end
should 'list the folder\'s children that are public to the user' do
profile = create_user('Folder Owner').person
profile2 = create_user('Folder Viwer').person
folder = fast_create(Folder, :profile_id => profile.id)
public_article = fast_create(Article, {:parent_id => folder.id, :profile_id => profile.id, :published => true})
not_public_article = fast_create(Article, {:parent_id => folder.id, :profile_id => profile.id, :published => false})
result = available_articles(folder.children, profile2)
assert_includes result, public_article
assert_not_includes result, not_public_article
end
should ' not list the folder\'s children to the user because the owner\'s profile is not public' do
profile = create_user('folder-owner').person
profile.public_profile = false
profile.save!
profile2 = create_user('Folder Viwer').person
folder = fast_create(Folder, :profile_id => profile.id, :published => false)
article = fast_create(Article, {:parent_id => folder.id, :profile_id => profile.id})
result = available_articles(folder.children, profile2)
assert_not_includes result, article
end
should ' not list the folder\'s children to the user because the owner\'s profile is not visible' do
profile = create_user('folder-owner').person
profile.visible = false
profile.save!
profile2 = create_user('Folder Viwer').person
folder = fast_create(Folder, :profile_id => profile.id)
article = fast_create(Article, {:parent_id => folder.id, :profile_id => profile.id})
result = available_articles(folder.children, profile2)
assert_not_includes result, article
end
should 'list subitems as HTML content' do
profile = create_user('folder-owner').person
folder = fast_create(Folder, {:name => 'Parent Folder', :profile_id => profile.id})
article1 = fast_create(Article, {:name => 'Article1', :parent_id => folder.id, :profile_id => profile.id, :updated_at => DateTime.now })
article2 = fast_create(Article, {:name => 'Article2', :parent_id => folder.id, :profile_id => profile.id, :updated_at => DateTime.now })
self.stubs(:params).returns({:npage => nil})
contents = folder.children.order('updated_at DESC').paginate(:per_page => 10, :page => params[:npage])
expects(:user).returns(profile).at_least_once
expects(:list_type).returns(:folder).at_least_once
expects(:recursive).returns(false).at_least_once
expects(:pagination_links).with(anything, anything).returns('')
list = render 'shared/content_list', binding
expects(:render).with(:file => 'shared/content_list',
:locals => { :contents => contents, :recursive => false, :list_type => :folder }
).returns(list)
result = list_contents(:contents=>contents)
assert_tag_in_string result, :tag => 'td', :descendant => { :tag => 'a', :attributes => { :href => /.*\/folder-owner\/my-article-[0-9]*(\?|$)/ } }, :content => /Article1/
assert_tag_in_string result, :tag => 'td', :descendant => { :tag => 'a', :attributes => { :href => /.*\/folder-owner\/my-article-[0-9]*(\?|$)/ } }, :content => /Article2/
end
should 'explictly advise if empty' do
profile = create_user('folder-owner').person
folder = fast_create(Folder, {:name => 'Parent Folder', :profile_id => profile.id})
result = render 'content_viewer/folder', binding
assert_match '(empty folder)', result
end
should 'show body (folder description)' do
profile = create_user('folder-owner').person
folder = fast_create(Folder, {:name => 'Parent Folder', :profile_id => profile.id, :body => "This is the folder description"})
result = render 'content_viewer/folder', binding
assert_match 'This is the folder description', result
end
private
def render(template, the_binding)
ERB.new(File.read(Rails.root.join('app/views', template + '.html.erb'))).result(the_binding)
end
end