browsercms 3.1.4 → 3.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/app/controllers/cms/content_block_controller.rb +2 -2
  2. data/app/controllers/cms/section_nodes_controller.rb +6 -1
  3. data/app/controllers/cms/sections_controller.rb +1 -1
  4. data/app/helpers/cms/application_helper.rb +1 -1
  5. data/app/helpers/cms/content_block_helper.rb +27 -0
  6. data/app/helpers/cms/section_nodes_helper.rb +43 -5
  7. data/app/models/abstract_file_block.rb +16 -1
  8. data/app/models/attachment.rb +17 -35
  9. data/app/models/file_block.rb +0 -12
  10. data/app/models/image_block.rb +0 -12
  11. data/app/models/link.rb +4 -21
  12. data/app/models/page.rb +31 -34
  13. data/app/models/section.rb +82 -44
  14. data/app/models/section_node.rb +39 -24
  15. data/app/models/user.rb +5 -0
  16. data/app/views/cms/blocks/index.html.erb +4 -4
  17. data/app/views/cms/file_blocks/_form.html.erb +1 -1
  18. data/app/views/cms/image_blocks/_form.html.erb +1 -1
  19. data/app/views/cms/section_nodes/_link.html.erb +6 -3
  20. data/app/views/cms/section_nodes/_node.html.erb +11 -1
  21. data/app/views/cms/section_nodes/_page.html.erb +13 -7
  22. data/app/views/cms/section_nodes/_section.html.erb +24 -8
  23. data/app/views/cms/section_nodes/index.html.erb +28 -16
  24. data/app/views/layouts/templates/default.html.erb +17 -0
  25. data/browsercms.gemspec +28 -1413
  26. data/db/migrate/20120117144039_browsercms315.rb +94 -0
  27. data/db/migrate/{20081114172307_load_seed_data.rb → 20121114172307_load_seeds.rb} +8 -1
  28. data/lib/acts_as_list.rb +1 -1
  29. data/lib/browsercms.rb +2 -0
  30. data/lib/cms/addressable.rb +83 -0
  31. data/lib/cms/behaviors/attaching.rb +44 -24
  32. data/lib/cms/behaviors/connecting.rb +2 -1
  33. data/lib/cms/behaviors/publishing.rb +12 -3
  34. data/lib/cms/behaviors/versioning.rb +83 -53
  35. data/lib/cms/content_rendering_support.rb +3 -3
  36. data/lib/cms/error_pages.rb +8 -0
  37. data/lib/cms/init.rb +5 -3
  38. data/lib/cms/version.rb +1 -1
  39. data/templates/blank.rb +2 -0
  40. data/templates/demo.rb +2 -0
  41. data/templates/module.rb +2 -0
  42. data/test/custom_assertions.rb +7 -1
  43. data/test/factories.rb +3 -1
  44. data/test/factories/sitemap_factories.rb +28 -0
  45. data/test/fixtures/connectors.yml +97 -0
  46. data/test/fixtures/content_type_groups.yml +13 -0
  47. data/test/fixtures/content_types.yml +50 -0
  48. data/test/fixtures/dynamic_view_versions.yml +26 -0
  49. data/test/fixtures/dynamic_views.yml +26 -0
  50. data/test/fixtures/group_permissions.yml +16 -0
  51. data/test/fixtures/group_sections.yml +31 -0
  52. data/test/fixtures/group_type_permissions.yml +11 -0
  53. data/test/fixtures/group_types.yml +25 -0
  54. data/test/fixtures/groups.yml +25 -0
  55. data/test/fixtures/html_block_versions.yml +67 -0
  56. data/test/fixtures/html_blocks.yml +63 -0
  57. data/test/fixtures/page_versions.yml +265 -0
  58. data/test/fixtures/pages.yml +85 -0
  59. data/test/fixtures/permissions.yml +28 -0
  60. data/test/fixtures/section_nodes.yml +46 -0
  61. data/test/fixtures/sections.yml +19 -0
  62. data/test/fixtures/sites.yml +9 -0
  63. data/test/fixtures/user_group_memberships.yml +11 -0
  64. data/test/fixtures/users.yml +15 -0
  65. data/test/functional/cms/content_controller_test.rb +6 -1
  66. data/test/functional/cms/file_blocks_controller_test.rb +1 -0
  67. data/test/functional/cms/html_blocks_controller_test.rb +1 -0
  68. data/test/functional/cms/image_blocks_controller_test.rb +39 -32
  69. data/test/functional/cms/section_nodes_controller_test.rb +48 -20
  70. data/test/functional/cms/sections_controller_test.rb +3 -1
  71. data/test/functional/tests/pretend_controller_test.rb +6 -3
  72. data/test/integration/cms/ckeditor_test.rb +5 -2
  73. data/test/integration/sitemap_performance_test.rb +26 -0
  74. data/test/selenium-core/Blank.html +7 -0
  75. data/test/selenium-core/InjectedRemoteRunner.html +8 -0
  76. data/test/selenium-core/RemoteRunner.html +110 -0
  77. data/test/selenium-core/SeleniumLog.html +109 -0
  78. data/test/selenium-core/TestPrompt.html +145 -0
  79. data/test/selenium-core/TestRunner-splash.html +55 -0
  80. data/test/selenium-core/TestRunner.hta +176 -0
  81. data/test/selenium-core/TestRunner.html +176 -0
  82. data/test/selenium-core/domviewer/butmin.gif +0 -0
  83. data/test/selenium-core/domviewer/butplus.gif +0 -0
  84. data/test/selenium-core/domviewer/domviewer.css +298 -0
  85. data/test/selenium-core/domviewer/domviewer.html +16 -0
  86. data/test/selenium-core/domviewer/selenium-domviewer.js +205 -0
  87. data/test/selenium-core/icons/all.png +0 -0
  88. data/test/selenium-core/icons/continue.png +0 -0
  89. data/test/selenium-core/icons/continue_disabled.png +0 -0
  90. data/test/selenium-core/icons/pause.png +0 -0
  91. data/test/selenium-core/icons/pause_disabled.png +0 -0
  92. data/test/selenium-core/icons/selected.png +0 -0
  93. data/test/selenium-core/icons/step.png +0 -0
  94. data/test/selenium-core/icons/step_disabled.png +0 -0
  95. data/test/selenium-core/iedoc-core.xml +1515 -0
  96. data/test/selenium-core/iedoc.xml +1469 -0
  97. data/test/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  98. data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  99. data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  100. data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  101. data/test/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  102. data/test/selenium-core/lib/prototype.js +2006 -0
  103. data/test/selenium-core/lib/scriptaculous/builder.js +101 -0
  104. data/test/selenium-core/lib/scriptaculous/controls.js +815 -0
  105. data/test/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  106. data/test/selenium-core/lib/scriptaculous/effects.js +958 -0
  107. data/test/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  108. data/test/selenium-core/lib/scriptaculous/slider.js +283 -0
  109. data/test/selenium-core/lib/scriptaculous/unittest.js +383 -0
  110. data/test/selenium-core/scripts/find_matching_child.js +69 -0
  111. data/test/selenium-core/scripts/htmlutils.js +894 -0
  112. data/test/selenium-core/scripts/injection.html +72 -0
  113. data/test/selenium-core/scripts/js2html.js +70 -0
  114. data/test/selenium-core/scripts/narcissus-defs.js +175 -0
  115. data/test/selenium-core/scripts/narcissus-exec.js +1054 -0
  116. data/test/selenium-core/scripts/narcissus-parse.js +1003 -0
  117. data/test/selenium-core/scripts/se2html.js +63 -0
  118. data/test/selenium-core/scripts/selenium-api.js +2409 -0
  119. data/test/selenium-core/scripts/selenium-browserbot.js +2203 -0
  120. data/test/selenium-core/scripts/selenium-browserdetect.js +150 -0
  121. data/test/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  122. data/test/selenium-core/scripts/selenium-executionloop.js +175 -0
  123. data/test/selenium-core/scripts/selenium-logging.js +147 -0
  124. data/test/selenium-core/scripts/selenium-remoterunner.js +571 -0
  125. data/test/selenium-core/scripts/selenium-testrunner.js +1333 -0
  126. data/test/selenium-core/scripts/selenium-version.js +5 -0
  127. data/test/selenium-core/scripts/user-extensions.js +3 -0
  128. data/test/selenium-core/scripts/user-extensions.js.sample +75 -0
  129. data/test/selenium-core/scripts/xmlextras.js +153 -0
  130. data/test/selenium-core/selenium-logo.png +0 -0
  131. data/test/selenium-core/selenium-test.css +43 -0
  132. data/test/selenium-core/selenium.css +299 -0
  133. data/test/selenium-core/xpath/dom.js +428 -0
  134. data/test/selenium-core/xpath/misc.js +252 -0
  135. data/test/selenium-core/xpath/xpath.js +2223 -0
  136. data/test/selenium/_login_as_cmsadmin.rsel +4 -0
  137. data/test/selenium/dashboard.rsel +5 -0
  138. data/test/selenium/html_blocks.rsel +4 -0
  139. data/test/selenium/login/failed_login.rsel +8 -0
  140. data/test/selenium/login/successful_login.rsel +9 -0
  141. data/test/selenium/page_templates.rsel +12 -0
  142. data/test/selenium/pages/edit_properties.rsel +5 -0
  143. data/test/selenium/site/view_home_page.rsel +4 -0
  144. data/test/selenium/sitemap/move_page.rsel +9 -0
  145. data/test/selenium/sitemap/open_section.rsel +6 -0
  146. data/test/selenium/sitemap/select_page.rsel +12 -0
  147. data/test/selenium/sitemap/select_section.rsel +17 -0
  148. data/test/test_helper.rb +30 -12
  149. data/test/unit/behaviors/attaching_test.rb +4 -6
  150. data/test/unit/behaviors/connectable_test.rb +29 -0
  151. data/test/unit/behaviors/publishable_test.rb +40 -9
  152. data/test/unit/behaviors/versioning_test.rb +36 -0
  153. data/test/unit/helpers/menu_helper_test.rb +5 -2
  154. data/test/unit/helpers/page_helper_test.rb +2 -0
  155. data/test/unit/lib/cms/sitemap_test.rb +206 -0
  156. data/test/unit/models/attachment_test.rb +51 -31
  157. data/test/unit/models/file_block_test.rb +74 -55
  158. data/test/unit/models/link_test.rb +44 -0
  159. data/test/unit/models/page_test.rb +290 -224
  160. data/test/unit/models/sections_test.rb +144 -44
  161. data/test/unit/models/user_test.rb +28 -18
  162. metadata +581 -350
  163. data/app/views/cms/section_nodes/_section_node.html.erb +0 -10
  164. data/test/unit/models/section_node_test.rb +0 -92
@@ -0,0 +1,85 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ page_1:
3
+ name: Home
4
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
5
+ updated_by_id: 1
6
+ title:
7
+ language:
8
+ published: true
9
+ template_file_name: default
10
+ lock_version: 2
11
+ id: 1
12
+ created_by_id: 1
13
+ version: 3
14
+ description:
15
+ archived: false
16
+ deleted: false
17
+ path: /
18
+ keywords:
19
+ hidden: false
20
+ created_at: Wed Mar 04 22:55:28 UTC 2009
21
+ cacheable: true
22
+
23
+ page_2:
24
+ name: Not Found
25
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
26
+ updated_by_id: 1
27
+ title:
28
+ language:
29
+ published: true
30
+ template_file_name: default.html.erb
31
+ lock_version: 2
32
+ id: 2
33
+ created_by_id: 1
34
+ version: 3
35
+ description:
36
+ archived: false
37
+ deleted: false
38
+ path: /system/not_found
39
+ keywords:
40
+ hidden: true
41
+ created_at: Wed Mar 04 22:55:28 UTC 2009
42
+ cacheable: true
43
+
44
+ page_3:
45
+ name: Access Denied
46
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
47
+ updated_by_id: 1
48
+ title:
49
+ language:
50
+ published: true
51
+ template_file_name: default.html.erb
52
+ lock_version: 2
53
+ id: 3
54
+ created_by_id: 1
55
+ version: 3
56
+ description:
57
+ archived: false
58
+ deleted: false
59
+ path: /system/access_denied
60
+ keywords:
61
+ hidden: true
62
+ created_at: Wed Mar 04 22:55:28 UTC 2009
63
+ cacheable: true
64
+
65
+ page_4:
66
+ name: Server Error
67
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
68
+ updated_by_id: 1
69
+ title:
70
+ language:
71
+ published: true
72
+ template_file_name: default.html.erb
73
+ lock_version: 2
74
+ id: 4
75
+ created_by_id: 1
76
+ version: 3
77
+ description:
78
+ archived: false
79
+ deleted: false
80
+ path: /system/server_error
81
+ keywords:
82
+ hidden: true
83
+ created_at: Wed Mar 04 22:55:28 UTC 2009
84
+ cacheable: true
85
+
@@ -0,0 +1,28 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ permission_1:
3
+ name: administrate
4
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
5
+ id: 1
6
+ for_module:
7
+ description: Allows users to administer the CMS, including adding users and groups.
8
+ full_name: Administrate CMS
9
+ created_at: Wed Mar 04 22:55:28 UTC 2009
10
+
11
+ permission_2:
12
+ name: edit_content
13
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
14
+ id: 2
15
+ for_module:
16
+ description: Allows users to Add, Edit and Delete both Pages and Blocks. Can Save (but not Publish) and Assign them as well.
17
+ full_name: Edit Content
18
+ created_at: Wed Mar 04 22:55:28 UTC 2009
19
+
20
+ permission_3:
21
+ name: publish_content
22
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
23
+ id: 3
24
+ for_module:
25
+ description: Allows users to Save and Publish, Hide and Archive both Pages and Blocks.
26
+ full_name: Publish Content
27
+ created_at: Wed Mar 04 22:55:28 UTC 2009
28
+
@@ -0,0 +1,46 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ section_node_1:
3
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
4
+ node_type: Section
5
+ id: 1
6
+ ancestry: 1
7
+ node_id: 2
8
+ position: 1
9
+ created_at: Wed Mar 04 22:55:28 UTC 2009
10
+
11
+ section_node_2:
12
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
13
+ node_type: Page
14
+ ancestry: 1
15
+ id: 2
16
+ node_id: 1
17
+ position: 2
18
+ created_at: Wed Mar 04 22:55:28 UTC 2009
19
+
20
+ section_node_3:
21
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
22
+ node_type: Page
23
+ ancestry: 1/2
24
+ id: 3
25
+ node_id: 2
26
+ position: 1
27
+ created_at: Wed Mar 04 22:55:28 UTC 2009
28
+
29
+ section_node_4:
30
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
31
+ node_type: Page
32
+ ancestry: 1/2
33
+ id: 4
34
+ node_id: 3
35
+ position: 2
36
+ created_at: Wed Mar 04 22:55:28 UTC 2009
37
+
38
+ section_node_5:
39
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
40
+ node_type: Page
41
+ ancestry: 1/2
42
+ id: 5
43
+ node_id: 4
44
+ position: 3
45
+ created_at: Wed Mar 04 22:55:28 UTC 2009
46
+
@@ -0,0 +1,19 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ section_1:
3
+ name: My Site
4
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
5
+ id: 1
6
+ root: true
7
+ path: /
8
+ hidden: false
9
+ created_at: Wed Mar 04 22:55:28 UTC 2009
10
+
11
+ section_2:
12
+ name: system
13
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
14
+ id: 2
15
+ root: false
16
+ path: /system
17
+ hidden: true
18
+ created_at: Wed Mar 04 22:55:28 UTC 2009
19
+
@@ -0,0 +1,9 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ site_1:
3
+ name: Default
4
+ updated_at: Wed Mar 04 22:55:28 UTC 2009
5
+ the_default: true
6
+ domain: example.com
7
+ id: 1
8
+ created_at: Wed Mar 04 22:55:28 UTC 2009
9
+
@@ -0,0 +1,11 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ user_group_membership_1:
3
+ id: 1
4
+ group_id: 2
5
+ user_id: 1
6
+
7
+ user_group_membership_2:
8
+ id: 2
9
+ group_id: 3
10
+ user_id: 1
11
+
@@ -0,0 +1,15 @@
1
+ # auto-generated by rake db:fixtures:dump, DO NOT EDIT BY HAND!
2
+ user_1:
3
+ salt: d193b3629a4805ec6a9cabf2d5336aed56ec4533
4
+ updated_at: Wed Mar 04 22:55:27 UTC 2009
5
+ expires_at:
6
+ crypted_password: 763ef0d40c98bff03ab3762e0865c12bd76f4607
7
+ remember_token_expires_at:
8
+ id: 1
9
+ remember_token:
10
+ first_name: CMS
11
+ login: cmsadmin
12
+ last_name: Administrator
13
+ email: cmsadmin@example.com
14
+ created_at: Wed Mar 04 22:55:27 UTC 2009
15
+
@@ -3,6 +3,10 @@ require File.join(File.dirname(__FILE__), '/../../test_helper')
3
3
  class Cms::ContentControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
5
 
6
+ def setup
7
+ given_a_site_exists
8
+ end
9
+
6
10
  def test_show_home_page
7
11
  get :show
8
12
  assert_response :success
@@ -19,7 +23,6 @@ class Cms::ContentControllerTest < ActionController::TestCase
19
23
  get :show, :path => ["foo"]
20
24
  assert_response :not_found
21
25
  assert_select "title", "Not Found"
22
- assert_select "h1", "Page Not Found"
23
26
  end
24
27
 
25
28
  def test_page_not_found_to_cms_admin
@@ -312,6 +315,8 @@ class Cms::ContentCachingDisabledControllerTest < ActionController::TestCase
312
315
  include Cms::ControllerTestHelper
313
316
 
314
317
  def setup
318
+ given_a_site_exists
319
+
315
320
  ActionController::Base.perform_caching = false
316
321
  @page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
317
322
  @registered_user = Factory(:user)
@@ -4,6 +4,7 @@ class Cms::FileBlocksControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
5
 
6
6
  def setup
7
+ given_a_site_exists
7
8
  login_as_cms_admin
8
9
  end
9
10
 
@@ -4,6 +4,7 @@ class Cms::HtmlBlocksControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
5
 
6
6
  def setup
7
+ given_a_site_exists
7
8
  login_as_cms_admin
8
9
  @block = Factory(:html_block, :name => "Test", :content => "I worked.", :publish_on_save => true)
9
10
  end
@@ -4,6 +4,7 @@ class Cms::ImageBlocksControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
5
 
6
6
  def setup
7
+ given_a_site_exists
7
8
  login_as_cms_admin
8
9
  end
9
10
 
@@ -12,38 +13,7 @@ class Cms::ImageBlocksControllerTest < ActionController::TestCase
12
13
  assert_response :success
13
14
  assert_select "title", "Content Library / Add New Image"
14
15
  end
15
-
16
- def test_edit
17
- @image = Factory(:image_block,
18
- :attachment_section => root_section,
19
- :attachment_file => mock_file,
20
- :attachment_file_path => "test.jpg")
21
-
22
- get :edit, :id => @image.id
23
-
24
- assert_response :success
25
- assert_equal root_section.id, assigns(:block).attachment_section_id
26
- assert_select "title", "Content Library / Edit Image"
27
- assert_select "h1", "Edit Image '#{@image.name}'"
28
- assert_select "select[name=?]", "image_block[attachment_section_id]" do
29
- assert_select "option[value=?][selected=?]", root_section.id, "selected"
30
- end
31
- end
32
-
33
- def test_update_image
34
- @image = Factory(:image_block,
35
- :attachment_section => root_section,
36
- :attachment_file => mock_file,
37
- :attachment_file_path => "test.jpg")
38
- @other_section = Factory(:section, :parent => root_section, :name => "Other")
39
-
40
- put :update, :id => @image.id, :image_block => {:attachment_section_id => @other_section.id}
41
- reset(:image)
42
16
 
43
- assert_redirected_to [:cms, @image]
44
- assert_equal @other_section, @image.attachment_section
45
- end
46
-
47
17
  def test_revert_to
48
18
  @image = Factory(:image_block,
49
19
  :attachment_section => root_section,
@@ -71,5 +41,42 @@ class Cms::ImageBlocksControllerTest < ActionController::TestCase
71
41
  assert_equal "22222", File.read(@image.attachment.full_file_location)
72
42
  assert_equal "11111", File.read(@draft_image.attachment.full_file_location)
73
43
  end
74
-
44
+
45
+ end
46
+
47
+ class Cms::MoveImageBlocks < ActionController::TestCase
48
+ include Cms::ControllerTestHelper
49
+ tests Cms::ImageBlocksController
50
+
51
+ def setup
52
+ given_a_site_exists
53
+ login_as_cms_admin
54
+
55
+ @image = Factory(:image_block,
56
+ :attachment_section => root_section,
57
+ :attachment_file => mock_file,
58
+ :attachment_file_path => "test.jpg")
59
+ end
60
+
61
+ def test_edit
62
+ get :edit, :id => @image.id
63
+
64
+ assert_response :success
65
+ assert_equal root_section.id, assigns(:block).attachment_section_id
66
+ assert_select "title", "Content Library / Edit Image"
67
+ assert_select "h1", "Edit Image '#{@image.name}'"
68
+ assert_select "select[name=?]", "image_block[attachment_section_id]" do
69
+ assert_select "option[value=?][selected=?]", root_section.id, "selected"
70
+ end
71
+ end
72
+
73
+ def test_update_image
74
+ @other_section = Factory(:public_section, :parent => root_section, :name => "Other")
75
+
76
+ put :update, :id => @image.id, :image_block => {:attachment_section_id => @other_section.id}
77
+ reset(:image)
78
+
79
+ assert_redirected_to [:cms, @image]
80
+ assert_equal @other_section, @image.attachment.section
81
+ end
75
82
  end
@@ -2,7 +2,12 @@ require File.join(File.dirname(__FILE__), '/../../test_helper')
2
2
 
3
3
  class Cms::SectionNodesControllerTest < ActionController::TestCase
4
4
  include Cms::ControllerTestHelper
5
-
5
+
6
+ def setup
7
+ remove_all_sitemap_fixtures_to_avoid_bugs
8
+ given_a_site_exists
9
+ end
10
+
6
11
  def test_index_as_admin
7
12
  login_as_cms_admin
8
13
  @foo = Factory(:section, :name => "Foo", :parent => root_section)
@@ -13,7 +18,7 @@ class Cms::SectionNodesControllerTest < ActionController::TestCase
13
18
  assert_select "title", "Sitemap"
14
19
  assert_select "h1", "Sitemap"
15
20
  assert_select "#sitemap" do
16
- assert_select "ul#root_1" do
21
+ assert_select "ul#root_#{root_section.id}" do
17
22
  assert_select "#section_#{root_section.id}" do
18
23
  assert_select "div", "My Site"
19
24
  end
@@ -32,52 +37,75 @@ class Cms::SectionNodesControllerTest < ActionController::TestCase
32
37
  assert_select "div", "Test Page"
33
38
  end
34
39
  end
35
- end
40
+ end
36
41
  end
37
42
  end
38
-
43
+
39
44
  end
40
45
 
41
46
  class Cms::SectionNodesControllerPermissionsTest < ActionController::TestCase
42
47
  tests Cms::SectionNodesController
43
48
  include Cms::ControllerTestHelper
44
-
49
+
45
50
  def setup
51
+ given_a_site_exists
52
+
53
+ @user = Factory(:content_editor)
46
54
  # DRYME copypaste from UserPermissionTest
47
- @user = Factory(:user)
48
55
  login_as(@user)
49
56
  @group = Factory(:group, :name => "Test", :group_type => Factory(:group_type, :name => "CMS User", :cms_access => true))
50
57
  @group.permissions << create_or_find_permission_named("edit_content")
51
58
  @group.permissions << create_or_find_permission_named("publish_content")
52
59
  @user.groups << @group
53
-
60
+
54
61
  @editable_section = Factory(:section, :parent => root_section, :name => "Editable")
55
- @group.sections << @editable_section
62
+ @group.sections << @editable_section << root_section
56
63
  @editable_page = Factory(:page, :section => @editable_section, :name => "Editable Page")
57
64
  @editable_link = Factory(:link, :section => @editable_section, :name => "Editable Link")
58
-
65
+
59
66
  @noneditable_section = Factory(:section, :parent => root_section, :name => "Not Editable")
60
67
  @noneditable_page = Factory(:page, :section => @noneditable_section, :name => "Non-Editable Page")
61
68
  @noneditable_link = Factory(:link, :section => @noneditable_section, :name => "Non-Editable Link")
62
-
69
+
63
70
  @noneditables = [@noneditable_section, @noneditable_page, @noneditable_link]
64
- @editables = [@editable_section,
65
- @editable_page,
66
- @editable_link,]
71
+ @editables = [@editable_section, @editable_page, @editable_link]
72
+ verify_user_cannot_edit
73
+ verify_user_can_edit
67
74
  end
68
-
75
+
69
76
  def test_index_as_contributor_with_subsections
70
77
  get :index
78
+
71
79
  assert_response :success
72
-
73
- # Check that each non-editable has the non-editable class, and that each editable does not have
74
- # the non-editable class
75
- @noneditables.each do |ne|
80
+
81
+ user_shouldnt_not_be_able_to_edit(@noneditables)
82
+ user_should_be_able_to_edit(@editables)
83
+ end
84
+
85
+ private
86
+
87
+ def user_shouldnt_not_be_able_to_edit(sections)
88
+ sections.each do |ne|
76
89
  assert_select "td.node.non-editable div", ne.name
77
90
  end
78
- @editables.each do |e|
91
+ end
92
+
93
+ def user_should_be_able_to_edit(user_should_be_able_to_edit)
94
+ user_should_be_able_to_edit.each do |e|
79
95
  td = css_select("td##{e.class.to_s.underscore}_#{e.id}", e.name).first
80
- assert !td.attributes["class"].include?("non-editable")
96
+ assert !td.attributes["class"].include?("non-editable"), "Looking at #{td}, was editable."
97
+ end
98
+ end
99
+
100
+ def verify_user_can_edit
101
+ @editables.each do |node|
102
+ assert_equal true, @user.able_to_modify?(node), "Should be able to edit #{node}"
103
+ end
104
+ end
105
+
106
+ def verify_user_cannot_edit
107
+ @noneditables.each do |node|
108
+ assert_equal false, @user.able_to_modify?(node), "Shouldnt be able to edit #{node}"
81
109
  end
82
110
  end
83
111
  end