radiant 0.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of radiant might be problematic. Click here for more details.

Files changed (205) hide show
  1. data/CHANGELOG +1 -0
  2. data/CONTRIBUTORS +12 -0
  3. data/LICENSE +9 -0
  4. data/README +91 -0
  5. data/Rakefile +10 -0
  6. data/app/behaviors/archive_behavior.rb +42 -0
  7. data/app/behaviors/archive_day_index_behavior.rb +30 -0
  8. data/app/behaviors/archive_month_index_behavior.rb +30 -0
  9. data/app/behaviors/archive_year_index_behavior.rb +30 -0
  10. data/app/behaviors/env_behavior.rb +18 -0
  11. data/app/behaviors/page_missing_behavior.rb +31 -0
  12. data/app/controllers/admin/export_controller.rb +8 -0
  13. data/app/controllers/admin/layout_controller.rb +23 -0
  14. data/app/controllers/admin/model_controller.rb +119 -0
  15. data/app/controllers/admin/page_controller.rb +119 -0
  16. data/app/controllers/admin/snippet_controller.rb +6 -0
  17. data/app/controllers/admin/user_controller.rb +45 -0
  18. data/app/controllers/admin/welcome_controller.rb +39 -0
  19. data/app/controllers/application.rb +32 -0
  20. data/app/controllers/site_controller.rb +54 -0
  21. data/app/filters/markdown_filter.rb +9 -0
  22. data/app/filters/textile_filter.rb +9 -0
  23. data/app/helpers/admin/export_helper.rb +2 -0
  24. data/app/helpers/admin/layout_helper.rb +2 -0
  25. data/app/helpers/admin/page_helper.rb +10 -0
  26. data/app/helpers/admin/snippet_helper.rb +2 -0
  27. data/app/helpers/admin/user_helper.rb +2 -0
  28. data/app/helpers/admin/welcome_helper.rb +2 -0
  29. data/app/helpers/application_helper.rb +141 -0
  30. data/app/helpers/site_helper.rb +2 -0
  31. data/app/models/archive_finder.rb +66 -0
  32. data/app/models/behavior.rb +194 -0
  33. data/app/models/layout.rb +13 -0
  34. data/app/models/page.rb +91 -0
  35. data/app/models/page_context.rb +526 -0
  36. data/app/models/page_part.rb +13 -0
  37. data/app/models/radiant/config.rb +53 -0
  38. data/app/models/radiant/exporter.rb +11 -0
  39. data/app/models/response_cache.rb +112 -0
  40. data/app/models/snippet.rb +16 -0
  41. data/app/models/status.rb +31 -0
  42. data/app/models/text_filter.rb +11 -0
  43. data/app/models/user.rb +70 -0
  44. data/app/models/user_action_observer.rb +13 -0
  45. data/app/views/admin/layout/index.rhtml +38 -0
  46. data/app/views/admin/layout/new.rhtml +37 -0
  47. data/app/views/admin/layout/remove.rhtml +17 -0
  48. data/app/views/admin/page/_node.rhtml +51 -0
  49. data/app/views/admin/page/_part.rhtml +17 -0
  50. data/app/views/admin/page/children.rhtml +4 -0
  51. data/app/views/admin/page/index.rhtml +172 -0
  52. data/app/views/admin/page/new.rhtml +164 -0
  53. data/app/views/admin/page/remove.rhtml +14 -0
  54. data/app/views/admin/snippet/index.rhtml +36 -0
  55. data/app/views/admin/snippet/new.rhtml +28 -0
  56. data/app/views/admin/snippet/remove.rhtml +16 -0
  57. data/app/views/admin/user/index.rhtml +43 -0
  58. data/app/views/admin/user/new.rhtml +48 -0
  59. data/app/views/admin/user/preferences.rhtml +29 -0
  60. data/app/views/admin/user/remove.rhtml +16 -0
  61. data/app/views/admin/welcome/login.rhtml +51 -0
  62. data/app/views/layouts/application.rhtml +75 -0
  63. data/app/views/site/not_found.rhtml +3 -0
  64. data/bin/radiant +305 -0
  65. data/config/boot.rb +80 -0
  66. data/config/database.mysql.yml +20 -0
  67. data/config/database.postgresql.yml +20 -0
  68. data/config/database.sqlite.yml +20 -0
  69. data/config/environment.rb +76 -0
  70. data/config/environments/development.rb +20 -0
  71. data/config/environments/production.rb +22 -0
  72. data/config/environments/test.rb +20 -0
  73. data/config/locomotive.yml +6 -0
  74. data/config/routes.rb +64 -0
  75. data/db/development_structure.sql +80 -0
  76. data/db/migrate/001_create_radiant_tables.rb +73 -0
  77. data/db/migrate/002_insert_initial_data.rb +45 -0
  78. data/db/migrate/003_rename_behavior_column.rb +9 -0
  79. data/db/migrate/004_rename_filter_column.rb +11 -0
  80. data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
  81. data/db/migrate/006_integer_columns_to_boolean.rb +11 -0
  82. data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
  83. data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
  84. data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
  85. data/db/schema.rb +74 -0
  86. data/db/templates/empty.yml +2 -0
  87. data/db/templates/simple-blog.yml +197 -0
  88. data/db/templates/styled-blog.yml +472 -0
  89. data/lib/advanced_delegation.rb +21 -0
  90. data/lib/archive_index_behavior_tags_and_methods.rb +48 -0
  91. data/lib/generators/behavior/USAGE +16 -0
  92. data/lib/generators/behavior/behavior_generator.rb +22 -0
  93. data/lib/generators/behavior/templates/model.rb.template +9 -0
  94. data/lib/generators/behavior/templates/unit_test.rb.template +16 -0
  95. data/lib/generators/filter/USAGE +16 -0
  96. data/lib/generators/filter/filter_generator.rb +22 -0
  97. data/lib/generators/filter/templates/model.rb.template +8 -0
  98. data/lib/generators/filter/templates/unit_test.rb.template +7 -0
  99. data/lib/inheritable_class_attributes.rb +65 -0
  100. data/lib/login_system.rb +80 -0
  101. data/lib/plugins/index_quoting_fix/init.rb +32 -0
  102. data/lib/plugins/string_io/init.rb +2 -0
  103. data/lib/radiant.rb +5 -0
  104. data/lib/registerable.rb +70 -0
  105. data/lib/tasks/release.rake +84 -0
  106. data/public/404.html +8 -0
  107. data/public/500.html +8 -0
  108. data/public/dispatch.cgi +10 -0
  109. data/public/dispatch.fcgi +24 -0
  110. data/public/dispatch.rb +10 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/add-child.png +0 -0
  113. data/public/images/brown-bottom-line.gif +0 -0
  114. data/public/images/clear-page-cache.png +0 -0
  115. data/public/images/collapse.png +0 -0
  116. data/public/images/expand.png +0 -0
  117. data/public/images/minus.png +0 -0
  118. data/public/images/new-homepage.png +0 -0
  119. data/public/images/new-layout.png +0 -0
  120. data/public/images/new-snippet.png +0 -0
  121. data/public/images/new-user.png +0 -0
  122. data/public/images/page.png +0 -0
  123. data/public/images/plus.png +0 -0
  124. data/public/images/remove-disabled.png +0 -0
  125. data/public/images/remove.png +0 -0
  126. data/public/images/snippet.png +0 -0
  127. data/public/images/spinner.gif +0 -0
  128. data/public/images/view-site.gif +0 -0
  129. data/public/images/virtual-page.png +0 -0
  130. data/public/javascripts/application.js +2 -0
  131. data/public/javascripts/controls.js +815 -0
  132. data/public/javascripts/dragdrop.js +913 -0
  133. data/public/javascripts/effects.js +958 -0
  134. data/public/javascripts/pngfix.js +78 -0
  135. data/public/javascripts/prototype.js +2006 -0
  136. data/public/javascripts/ruledtable.js +28 -0
  137. data/public/javascripts/string.js +23 -0
  138. data/public/javascripts/tabcontrol.js +140 -0
  139. data/public/robots.txt +1 -0
  140. data/public/stylesheets/admin.css +464 -0
  141. data/script/about +3 -0
  142. data/script/breakpointer +3 -0
  143. data/script/console +3 -0
  144. data/script/destroy +3 -0
  145. data/script/generate +3 -0
  146. data/script/performance/benchmarker +3 -0
  147. data/script/performance/profiler +3 -0
  148. data/script/plugin +3 -0
  149. data/script/process/reaper +3 -0
  150. data/script/process/spawner +3 -0
  151. data/script/process/spinner +3 -0
  152. data/script/runner +3 -0
  153. data/script/server +3 -0
  154. data/script/setup_database +297 -0
  155. data/test/fixtures/layouts.yml +26 -0
  156. data/test/fixtures/page_parts.yml +99 -0
  157. data/test/fixtures/pages.yml +359 -0
  158. data/test/fixtures/pages.yml.rej +28 -0
  159. data/test/fixtures/snippets.yml +18 -0
  160. data/test/fixtures/users.yml +30 -0
  161. data/test/functional/admin/export_controller_test.rb +22 -0
  162. data/test/functional/admin/layout_controller_test.rb +40 -0
  163. data/test/functional/admin/model_controller_test.rb +152 -0
  164. data/test/functional/admin/page_controller_test.rb +179 -0
  165. data/test/functional/admin/snippet_controller_test.rb +11 -0
  166. data/test/functional/admin/user_controller_test.rb +71 -0
  167. data/test/functional/admin/welcome_controller_test.rb +48 -0
  168. data/test/functional/application_controller_test.rb +44 -0
  169. data/test/functional/login_system_test.rb +155 -0
  170. data/test/functional/site_controller_test.rb +172 -0
  171. data/test/helpers/archive_index_test_helper.rb +35 -0
  172. data/test/helpers/behavior_render_test_helper.rb +34 -0
  173. data/test/helpers/behavior_test_helper.rb +47 -0
  174. data/test/helpers/caching_test_helper.rb +41 -0
  175. data/test/helpers/layout_test_helper.rb +35 -0
  176. data/test/helpers/page_part_test_helper.rb +49 -0
  177. data/test/helpers/page_test_helper.rb +36 -0
  178. data/test/helpers/snippet_test_helper.rb +32 -0
  179. data/test/helpers/user_test_helper.rb +34 -0
  180. data/test/helpers/validation_test_helper.rb +42 -0
  181. data/test/test_helper.rb +54 -0
  182. data/test/unit/behavior_test.rb +196 -0
  183. data/test/unit/behaviors/archive_behavior_test.rb +33 -0
  184. data/test/unit/behaviors/archive_day_index_behavior_test.rb +21 -0
  185. data/test/unit/behaviors/archive_month_index_behavior_test.rb +21 -0
  186. data/test/unit/behaviors/archive_year_index_behavior_test.rb +21 -0
  187. data/test/unit/behaviors/page_missing_behavior_test.rb +27 -0
  188. data/test/unit/filters/markdown_filter_test.rb +14 -0
  189. data/test/unit/filters/textile_filter_test.rb +14 -0
  190. data/test/unit/inheritable_class_attributes_test.rb +47 -0
  191. data/test/unit/layout_test.rb +29 -0
  192. data/test/unit/page_context_test.rb +375 -0
  193. data/test/unit/page_context_test.rb.rej +26 -0
  194. data/test/unit/page_part_test.rb +44 -0
  195. data/test/unit/page_test.rb +224 -0
  196. data/test/unit/radiant/config_test.rb +46 -0
  197. data/test/unit/radiant/exporter_test.rb +26 -0
  198. data/test/unit/registerable_test.rb +68 -0
  199. data/test/unit/response_cache_test.rb +133 -0
  200. data/test/unit/snippet_test.rb +47 -0
  201. data/test/unit/status_test.rb +43 -0
  202. data/test/unit/text_filter_test.rb +14 -0
  203. data/test/unit/user_action_observer_test.rb +40 -0
  204. data/test/unit/user_test.rb +138 -0
  205. metadata +355 -0
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'admin/layout_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class Admin::LayoutController; def rescue_action(e) raise e end; end
6
+
7
+ class Admin::LayoutControllerTest < Test::Unit::TestCase
8
+ fixtures :users, :layouts
9
+ test_helper :users, :layouts
10
+
11
+ def setup
12
+ @controller = Admin::LayoutController.new
13
+ @request = ActionController::TestRequest.new
14
+ @response = ActionController::TestResponse.new
15
+ @request.session[:user] = users(:developer)
16
+ end
17
+
18
+ def test_ancestors
19
+ assert Admin::LayoutController.ancestors.include?(Admin::AbstractModelController)
20
+ end
21
+
22
+ [:index, :new, :edit, :remove].each do |action|
23
+ define_method "test_#{action}_action_allowed_if_admin" do
24
+ get action, { :id => 1 }, { :user => users(:admin) }
25
+ assert_response :success, "action: #{action}"
26
+ end
27
+
28
+ define_method "test_#{action}_action__allowed_if_developer" do
29
+ get action, { :id => 1 }
30
+ assert_response :success, "action: #{action}"
31
+ end
32
+
33
+ define_method "test_#{action}_action__not_allowed_if_other" do
34
+ get action, { :id => 1 }, { :user => users(:existing) }, {}
35
+ assert_redirected_to page_index_url, "action: #{action}"
36
+ assert_match /privileges/, flash[:error], "action: #{action}"
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,152 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'admin/model_controller'
3
+
4
+ #
5
+ # This test exercises the AbstractModelController by excercising the Layout
6
+ # model and the LayoutController views.
7
+ #
8
+ class Admin::AbstractModelControllerTest < Test::Unit::TestCase
9
+
10
+ class TestController < Admin::AbstractModelController
11
+ model :layout
12
+
13
+ def rescue_action(e) raise e end
14
+
15
+ def default_template_name(default_action_name = action_name)
16
+ "#{Admin::LayoutController.controller_path}/#{default_action_name}"
17
+ end
18
+ end
19
+
20
+ fixtures :users, :layouts
21
+ test_helper :layouts, :caching
22
+
23
+ def setup
24
+ @controller = TestController.new
25
+ @request = ActionController::TestRequest.new
26
+ @response = ActionController::TestResponse.new
27
+ @request.session[:user] = users(:existing)
28
+ @cache = @controller.cache = FakeResponseCache.new
29
+
30
+ @layout_name = "Test Layout"
31
+
32
+ destroy_test_layout
33
+ end
34
+
35
+ def test_initialize
36
+ @controller = TestController.new
37
+ assert_kind_of ResponseCache, @controller.cache
38
+ end
39
+
40
+ def test_index
41
+ custom_routes do
42
+ get :index
43
+ assert_response :success
44
+ layouts = assigns(:layouts)
45
+ assert_kind_of Array, layouts
46
+ assert_kind_of Layout, layouts.first
47
+ end
48
+ end
49
+
50
+ def test_new
51
+ custom_routes do
52
+ get :new, :layout => layout_params
53
+ assert_response :success
54
+
55
+ @layout = assigns(:layout)
56
+ assert_kind_of Layout, @layout
57
+ assert_nil @layout.name
58
+ end
59
+ end
60
+ def test_new__post
61
+ custom_routes do
62
+ post :new, :layout => layout_params
63
+ assert_redirected_to layout_index_url
64
+ assert_match /saved/, flash[:notice]
65
+ assert_kind_of Layout, get_test_layout
66
+ end
67
+ end
68
+ def test_new__post_with_invalid_layout
69
+ custom_routes do
70
+ post :new, :layout => layout_params(:name => nil)
71
+ assert_response :success
72
+ assert_match /error/, flash[:error]
73
+ assert_nil get_test_layout
74
+ end
75
+ end
76
+ def test_new__save_and_continue_editing
77
+ custom_routes do
78
+ post :new, :layout => layout_params, :continue => 'Save and Continue Editing'
79
+ @layout = get_test_layout
80
+ assert_redirected_to layout_edit_url(:id => @layout.id)
81
+ end
82
+ end
83
+
84
+ def test_edit
85
+ custom_routes do
86
+ get :edit, :id => '1', :layout => layout_params
87
+ assert_response :success
88
+ assert_template 'admin/layout/new'
89
+
90
+ @layout = assigns(:layout)
91
+ assert_kind_of Layout, @layout
92
+ assert_equal 'Home Page', @layout.name
93
+ end
94
+ end
95
+ def test_edit__post
96
+ custom_routes do
97
+ @layout = create_test_layout
98
+ post :edit, :id => @layout.id, :layout => layout_params(:content => 'edited')
99
+ assert_response :redirect
100
+ assert_equal 'edited', get_test_layout.content
101
+
102
+ # To-Do: Test what happens when an invalid page is submitted
103
+ end
104
+ end
105
+
106
+ def test_remove
107
+ custom_routes do
108
+ @layout = create_test_layout
109
+ get :remove, :id => @layout.id
110
+ assert_response :success
111
+ assert_equal @layout, assigns(:layout)
112
+ assert_not_nil get_test_layout
113
+ end
114
+ end
115
+ def test_remove__post
116
+ custom_routes do
117
+ @layout = create_test_layout
118
+ post :remove, :id => @layout.id
119
+ assert_nil get_test_layout
120
+ assert_redirected_to layout_index_url
121
+ assert_match /deleted/, flash[:notice]
122
+ end
123
+ end
124
+
125
+ def test_clears_cache_on_save
126
+ custom_routes do
127
+ @layout = layouts(:main)
128
+ post :edit, :id => @layout.id, :layout => layout_params(:content => 'edited')
129
+ assert_redirected_to layout_index_url
130
+ assert_equal true, @cache.cleared?
131
+ end
132
+ end
133
+
134
+ def test_not_cleared_when_invalid
135
+ custom_routes do
136
+ @layout = layouts(:main)
137
+ post :edit, :id => @layout.id, :layout => layout_params(:name => 'x' * 1000)
138
+ assert_response :success
139
+ assert_equal false, @cache.cleared?
140
+ end
141
+ end
142
+
143
+ private
144
+
145
+ def custom_routes
146
+ with_routing do |set|
147
+ set.draw { set.connect ':controller/:action/:id' }
148
+ yield
149
+ end
150
+ end
151
+
152
+ end
@@ -0,0 +1,179 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'admin/page_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class Admin::PageController; def rescue_action(e) raise e end; end
6
+
7
+ class Admin::PageControllerTest < Test::Unit::TestCase
8
+ fixtures :users, :pages
9
+ test_helper :pages, :page_parts, :caching
10
+
11
+ def setup
12
+ @controller = Admin::PageController.new
13
+ @request = ActionController::TestRequest.new
14
+ @response = ActionController::TestResponse.new
15
+ @request.session[:user] = users(:existing)
16
+
17
+ @page_title = 'Just a Test'
18
+
19
+ destroy_test_page
20
+ destroy_test_part
21
+ end
22
+
23
+ def test_initialize
24
+ assert_kind_of ResponseCache, @controller.cache
25
+ end
26
+
27
+ def test_index
28
+ get :index
29
+ assert_response :success
30
+ assert_kind_of Page, assigns(:homepage)
31
+ end
32
+
33
+ def test_new
34
+ @controller.config = { 'default.parts' => 'body, extended, summary' }
35
+
36
+ get :new, :parent_id => '1', :page => page_params
37
+ assert_response :success
38
+
39
+ @page = assigns(:page)
40
+ assert_kind_of Page, @page
41
+ assert_nil @page.title
42
+
43
+ @expected_parent = Page.find(1)
44
+ assert_equal @expected_parent, @page.parent
45
+
46
+ assert_equal 3, @page.parts.size
47
+ end
48
+ def test_new__with_slug_and_breadcrumb
49
+ get :new, :parent_id => '1', :page => page_params, :slug => 'test', :breadcrumb => 'me'
50
+ assert_response :success
51
+
52
+ @page = assigns(:page)
53
+ assert_equal 'test', @page.slug
54
+ assert_equal 'me', @page.breadcrumb
55
+ end
56
+ def test_new__post
57
+ @cache = @controller.cache = FakeResponseCache.new
58
+ post :new, :parent_id => '1', :page => page_params
59
+ assert_redirected_to page_index_url
60
+ assert_match /saved/, flash[:notice]
61
+
62
+ @page = assigns(:page)
63
+ assert_equal 0, @page.parts.size
64
+
65
+ @page = get_test_page
66
+ assert_kind_of Page, @page
67
+ assert_equal '/page/', @cache.expired_path
68
+ end
69
+ def test_new__post_with_invalid_page
70
+ post :new, :parent_id => '1', :page => page_params(:status_id => 'abc')
71
+ assert_response :success
72
+ assert_match /error/, flash[:error]
73
+ assert_nil get_test_page
74
+ end
75
+ def test_new__post_with_parts
76
+ post(:new, :parent_id => '1', :page => page_params,
77
+ :part => {
78
+ '1' => part_params(:name => 'test-part-1'),
79
+ '2' => part_params(:name => 'test-part-2')
80
+ }
81
+ )
82
+ assert_redirected_to page_index_url
83
+
84
+ @page = get_test_page
85
+ assert_kind_of Page, @page
86
+ names = @page.parts.collect { |part| part.name }.sort
87
+ assert_equal ['test-part-1', 'test-part-2'], names
88
+ end
89
+ def test_new__post_with_invalid_part
90
+ @part_name = 'extra long ' * 25
91
+ post :new, :parent_id => '1', :page => page_params, :part => { '1' => part_params(:name => @part_name)}
92
+ assert_response :success # not redirected
93
+ assert_match /error/, flash[:error]
94
+ assert_nil get_test_page
95
+ assert_nil get_test_part
96
+ end
97
+ def test_new__save_and_continue_editing
98
+ post :new, :parent_id => '1', :page => page_params, :continue => 'Save and Continue Editing'
99
+ @page = get_test_page
100
+ assert_redirected_to page_edit_url(:id => @page.id)
101
+ end
102
+
103
+ def test_edit
104
+ get :edit, :id => '1', :page => page_params
105
+ assert_response :success
106
+ assert_template 'admin/page/new'
107
+
108
+ @page = assigns(:page)
109
+ assert_kind_of Page, @page
110
+ assert_equal 'Ruby Home Page', @page.title
111
+ end
112
+ def test_edit__post
113
+ @page = create_test_page
114
+ post :edit, :id => @page.id, :page => page_params(:status_id => '1')
115
+ assert_response :redirect
116
+ assert_equal 1, get_test_page.status.id
117
+
118
+ # To-Do: Test what happens when an invalid page is submitted
119
+ end
120
+ def test_edit__post_with_parts
121
+ @page = create_test_page(:no_part => true)
122
+ @page.parts.create(part_params(:name => 'test-part-1'))
123
+ @page.parts.create(part_params(:name => 'test-part-2'))
124
+
125
+ assert_equal 2, @page.parts.size
126
+
127
+ post :edit, :id => @page.id, :page => page_params, :part => {'1' => part_params(:name => 'test-part-1', :content => 'changed')}
128
+ assert_response :redirect
129
+
130
+ @page = get_test_page
131
+ assert_equal 1, @page.parts.size
132
+ assert_equal 'changed', @page.parts.first.content
133
+ end
134
+
135
+ def test_remove
136
+ @page = create_test_page
137
+ get :remove, :id => @page.id
138
+ assert_response :success
139
+ assert_equal @page, assigns(:page)
140
+ assert_not_nil get_test_page
141
+ end
142
+ def test_remove__post
143
+ @page = create_test_page
144
+ post :remove, :id => @page.id
145
+ assert_redirected_to page_index_url
146
+ assert_match /removed/, flash[:notice]
147
+ assert_nil get_test_page
148
+ end
149
+
150
+ def test_clear_cache
151
+ @cache = @controller.cache = FakeResponseCache.new
152
+ get :clear_cache
153
+ assert_response :success
154
+ assert_match /Do.*?not.*?access/i, @response.body
155
+ assert_equal false, @cache.cleared?
156
+ end
157
+ def test_clear_cache__post
158
+ @cache = @controller.cache = FakeResponseCache.new
159
+ post :clear_cache
160
+ assert_redirected_to page_index_url
161
+ assert_match /cache.*clear/i, flash[:notice]
162
+ assert_equal true, @cache.cleared?
163
+ end
164
+
165
+ def test_add_part
166
+ get :add_part
167
+ assert_response :success
168
+ assert_template 'admin/page/_part'
169
+ end
170
+
171
+ def test_children
172
+ get :children, :id => '1', :level => '1'
173
+ assert_response :success
174
+ assert_equal pages(:homepage), assigns(:parent)
175
+ assert_equal 1, assigns(:level)
176
+ assert ! %r{<head>}.match(@response.body)
177
+ assert_equal 'text/html;charset=utf-8', @response.headers['Content-Type']
178
+ end
179
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'admin/snippet_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class Admin::SnippetController; def rescue_action(e) raise e end; end
6
+
7
+ class Admin::SnippetControllerTest < Test::Unit::TestCase
8
+ def test_ancestors
9
+ assert Admin::SnippetController.ancestors.include?(Admin::AbstractModelController)
10
+ end
11
+ end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+ require 'admin/user_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class Admin::UserController; def rescue_action(e) raise e end; end
6
+
7
+ class Admin::UserControllerTest < Test::Unit::TestCase
8
+
9
+ fixtures :users
10
+
11
+ def setup
12
+ @controller = Admin::UserController.new
13
+ @request = ActionController::TestRequest.new
14
+ @response = ActionController::TestResponse.new
15
+ @user = @request.session[:user] = users(:existing)
16
+ end
17
+
18
+ def test_ancestors
19
+ assert Admin::UserController.ancestors.include?(Admin::AbstractModelController)
20
+ end
21
+
22
+ [:index, :new, :edit, :remove].each do |action|
23
+ define_method "test_#{action}_action_allowed_if_admin" do
24
+ get action, { :id => 1 }, { :user => users(:admin) }
25
+ assert_response :success, "action: #{action}"
26
+ end
27
+
28
+ define_method "test_#{action}_action_not_allowed_if_other" do
29
+ get action, { :id => 1 }, { :user => users(:non_admin) }
30
+ assert_redirected_to page_index_url, "action: #{action}"
31
+ assert_match /privileges/, flash[:error], "action: #{action}"
32
+ end
33
+ end
34
+
35
+ def test_remove__cannot_remove_self
36
+ @user = users(:admin)
37
+ get :remove, { :id => @user.id }, { :user => @user }
38
+ assert_redirected_to user_index_url
39
+ assert_match /cannot.*self/i, flash[:error]
40
+ assert_not_nil User.find(@user.id)
41
+ end
42
+
43
+ def test_preferences
44
+ get :preferences, :user => { :email => 'updated@email.com' }
45
+ assert_response :success
46
+ assigned_user = assigns(:user)
47
+ assert_equal @user, assigned_user
48
+ assert @user.object_id != assigned_user.object_id
49
+ assert_equal 'existing.user@gmail.com', assigned_user.email
50
+ end
51
+ def test_preferences__post
52
+ @user = User.new(:name => 'Test', :login => 'pref_test', :password => 'whoa!', :password_confirmation => 'whoa!')
53
+ assert @user.save
54
+ post(
55
+ :preferences,
56
+ { :user => { :password => '', :password_confirmation => '', :email => 'updated@gmail.com' } },
57
+ { :user => @user }
58
+ )
59
+ @user = User.find(@user.id)
60
+ assert_redirected_to page_index_url
61
+ assert_match /preferences.*?saved/i, flash[:notice]
62
+ assert_equal('updated@gmail.com', @user.email)
63
+ @user.destroy
64
+ end
65
+ def test_preferences__post_with_bad_data
66
+ get :preferences, :user => { :login => 'superman' }
67
+ assert_response :success
68
+ assert_match /bad form data/i, flash[:error]
69
+ end
70
+
71
+ end