cms_controller_test.rb
4.58 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
require File.dirname(__FILE__) + '/../test_helper'
require 'cms_controller'
# Re-raise errors caught by the controller.
class CmsController; def rescue_action(e) raise e end; end
class CmsControllerTest < Test::Unit::TestCase
fixtures :environments
def setup
@controller = CmsController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
@profile = create_user_with_permission('testinguser', 'post_content')
login_as :testinguser
end
attr_reader :profile
should 'list top level documents on index' do
get :index, :profile => profile.identifier
assert_template 'view'
assert_equal profile, assigns(:profile)
assert_nil assigns(:article)
assert_kind_of Array, assigns(:subitems)
end
should 'be able to view a particular document' do
a = profile.articles.build(:name => 'blablabla')
a.save!
get :view, :profile => profile.identifier, :id => a.id
assert_template 'view'
assert_equal a, assigns(:article)
assert_equal [], assigns(:subitems)
assert_kind_of Array, assigns(:subitems)
end
should 'be able to edit a document' do
a = profile.articles.build(:name => 'test')
a.save!
get :edit, :profile => profile.identifier, :id => a.id
assert_template 'text_html_edit'
end
should 'be able to type a new document' do
get :new, :profile => profile.identifier
assert_template 'text_html_new'
end
should 'be able to create a new document' do
get :new, :profile => profile.identifier
assert_template 'text_html_new'
assert_tag :tag => 'form', :attributes => { :action => "/myprofile/#{profile.identifier}/cms/new", :method => /post/i }
end
should 'be able to save a save a document' do
assert_difference Article, :count do
post :new, :profile => profile.identifier, :article => { :name => 'a test article', :body => 'the text of the article ...' }
end
end
should 'be able to set home page' do
a = profile.articles.build(:name => 'my new home page')
a.save!
assert_not_equal a, profile.home_page
post :set_home_page, :profile => profile.identifier, :id => a.id
assert_redirected_to :action => 'view', :id => a.id
profile.reload
assert_equal a, profile.home_page
end
should 'set last_changed_by when creating article' do
login_as(profile.identifier)
post :new, :profile => profile.identifier, :article => { :name => 'changed by me', :body => 'content ...' }
a = profile.articles.find_by_path('changed-by-me')
assert_not_nil a
assert_equal profile, a.last_changed_by
end
should 'set last_changed_by when updating article' do
other_person = create_user('otherperson').person
a = profile.articles.build(:name => 'my article')
a.last_changed_by = other_person
a.save!
login_as(profile.identifier)
post :edit, :profile => profile.identifier, :id => a.id, :article => { :body => 'new content for this article' }
a.reload
assert_equal profile, a.last_changed_by
end
should 'list available editors' do
editors = [ "#{RAILS_ROOT}/app/controllers/my_profile/cms/bli.rb", "#{RAILS_ROOT}/app/controllers/my_profile/cms/blo.rb" ]
Dir.expects(:glob).with("#{RAILS_ROOT}/app/controllers/my_profile/cms/*.rb").returns(editors)
assert_equal editors, CmsController.available_editors
end
should 'list available types' do
editors = [ "#{RAILS_ROOT}/app/controllers/my_profile/cms/text_html.rb", "#{RAILS_ROOT}/app/controllers/my_profile/cms/image.rb" ]
CmsController.expects(:available_editors).returns(editors)
assert_equal [ 'text/html', 'image' ], CmsController.available_types
end
should 'edit by using the correct template to display the editor depending on the mime-type' do
a = profile.articles.build(:name => 'test document')
a.save!
assert_equal 'text/html', a.mime_type
get :edit, :profile => profile.identifier, :id => a.id
assert_response :success
assert_template 'text_html_edit'
end
should 'convert mime-types to action names' do
obj = mock
obj.extend(CmsHelper)
assert_equal 'text_html', obj.mime_type_to_action_name('text/html')
assert_equal 'image', obj.mime_type_to_action_name('image')
assert_equal 'application_xnoosferosomething', obj.mime_type_to_action_name('application/x-noosfero-something')
end
should 'be able to remove article' do
a = profile.articles.build(:name => 'my-article')
a.save!
assert_difference Article, :count, -1 do
post :destroy, :profile => profile.identifier, :id => a.id
assert_redirected_to :action => 'index'
end
end
end