cms_controller_test.rb
3.68 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
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('testinguser').person
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
flunk 'pending'
end
should 'set last_changed_by when updating article' do
flunk 'pending'
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
end