browsercms 3.1.4 → 3.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,8 +1,52 @@
1
1
  require File.join(File.dirname(__FILE__), '/../../test_helper')
2
2
 
3
3
  class LinkTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ @link = Factory(:link)
7
+ @another_link = Factory(:link)
8
+ end
9
+
4
10
  def test_create
5
11
  assert Factory.build(:link).valid?
6
12
  assert !Factory.build(:link, :name => "").valid?
7
13
  end
14
+
15
+ test "draft_version is stored on pages" do
16
+ assert_equal 1, @link.version
17
+ assert_equal 1, @link.latest_version
18
+ end
19
+
20
+ test "#update increments the latest_version" do
21
+ @link.name = "New"
22
+ @link.save!
23
+ @link.reload
24
+
25
+ assert_equal 1, @link.version
26
+ assert_equal 2, @link.latest_version
27
+
28
+ assert_equal 1, @another_link.reload.latest_version, "Should only update its own version, not other tables"
29
+ end
30
+
31
+ test "live?" do
32
+ assert @link.live?
33
+ end
34
+
35
+ test "updating makes it not live" do
36
+ @link.update_attributes(:name => "New")
37
+ @link.reload
38
+ refute @link.live?
39
+
40
+ @link.publish!
41
+ @link.reload
42
+ assert @link.live?
43
+ end
44
+
45
+ test "live? as_of_version" do
46
+ @link.update_attributes(:name => "New")
47
+ @link.publish!
48
+
49
+ v1 = @link.as_of_version(1)
50
+ assert v1.live?
51
+ end
8
52
  end
@@ -1,46 +1,105 @@
1
1
  require File.join(File.dirname(__FILE__), '/../../test_helper')
2
2
 
3
3
  class CreatingPageTest < ActiveRecord::TestCase
4
-
4
+
5
5
  def test_it
6
-
6
+
7
7
  @page = Page.new(
8
- :name => "Test",
9
- :path => "test",
10
- :section => root_section,
11
- :publish_on_save => true)
12
-
8
+ :name => "Test",
9
+ :path => "test",
10
+ :section => root_section,
11
+ :publish_on_save => true)
12
+
13
13
  assert @page.save
14
14
  assert_path_is_unique
15
-
15
+
16
16
  @page.update_attributes(:name => "Test v2")
17
-
17
+
18
18
  page = Page.find_live_by_path("/test")
19
19
  assert_equal page.name, "Test"
20
20
  assert_equal 1, page.version
21
-
21
+
22
+ end
23
+
24
+ test "Creating a page builds a section node" do
25
+ @page = Page.create!(:name=>"Hello", :path=>"/hello", :section => Factory(:root_section))
26
+ assert_not_nil @page.section_node
27
+ end
28
+
29
+ test "page with no parent" do
30
+ @page = Page.new
31
+ assert_nil @page.parent
22
32
  end
23
33
 
34
+ test "#section is alias for #parent" do
35
+ @page = Page.new
36
+ assert_nil @page.section
37
+ end
38
+
39
+
24
40
  protected
25
- def assert_path_is_unique
26
- page = Factory.build(:page, :path => @page.path)
27
- assert_not_valid page
28
- assert_has_error_on page, :path
29
- end
30
-
41
+ def assert_path_is_unique
42
+ page = Factory.build(:page, :path => @page.path)
43
+ assert_not_valid page
44
+ assert_has_error_on page, :path
45
+ end
46
+
31
47
  end
32
48
 
49
+ class VersionTest < ActiveSupport::TestCase
50
+
51
+ def setup
52
+ @page = Factory(:public_page)
53
+ @another_page = Factory(:public_page)
54
+ end
55
+
56
+ test "draft_version is stored on pages" do
57
+ assert_equal 1, @page.version
58
+ assert_equal 1, @page.latest_version
59
+ end
60
+
61
+ test "#update increments the latest_version" do
62
+ @page.name = "New"
63
+ @page.save!
64
+ @page.reload
65
+
66
+ assert_equal 1, @page.version
67
+ assert_equal 2, @page.latest_version
68
+
69
+ assert_equal 1, @another_page.reload.latest_version, "Should only update its own version, not other tables"
70
+ end
71
+
72
+ test "live? using latest version" do
73
+ assert @page.live?
74
+
75
+ @page.update_attributes(:name => "New")
76
+ @page.reload
77
+ refute @page.live?
78
+
79
+ @page.publish!
80
+ @page.reload
81
+ assert @page.live?
82
+ end
83
+
84
+ test "live? as_of_version" do
85
+ @page.update_attributes(:name => "New")
86
+ @page.publish!
87
+
88
+ v1 = @page.as_of_version(1)
89
+ assert v1.live?
90
+ end
91
+ end
33
92
  class PageTest < ActiveRecord::TestCase
34
93
 
35
94
  def test_creating_page_with_reserved_path
36
95
  @page = Page.new(:name => "FAIL", :path => "/cms")
37
96
  assert_not_valid @page
38
97
  assert_has_error_on(@page, :path, "is invalid, '/cms' a reserved path")
39
-
98
+
40
99
  @page = Page.new(:name => "FAIL", :path => "/cache")
41
100
  assert_not_valid @page
42
101
  assert_has_error_on(@page, :path, "is invalid, '/cache' a reserved path")
43
-
102
+
44
103
  @page = Page.new(:name => "FTW", :path => "/whatever")
45
104
  assert_valid @page
46
105
  end
@@ -48,15 +107,15 @@ class PageTest < ActiveRecord::TestCase
48
107
  def test_find_live_by_path
49
108
  @page = Factory.build(:page, :path => '/foo')
50
109
  assert_nil Page.find_live_by_path('/foo')
51
-
110
+
52
111
  @page.publish!
53
112
  reset(:page)
54
113
  assert_equal @page, Page.find_live_by_path('/foo')
55
-
114
+
56
115
  @page.update_attributes(:path => '/bar')
57
116
  assert_equal @page, Page.find_live_by_path('/foo')
58
117
  assert_nil Page.find_live_by_path('/bar')
59
-
118
+
60
119
  @page.publish!
61
120
  reset(:page)
62
121
  assert_nil Page.find_live_by_path('/foo')
@@ -79,17 +138,17 @@ class PageTest < ActiveRecord::TestCase
79
138
  assert_equal @new_page, Page.find_live_by_path('/foo')
80
139
  assert_not_equal @page, @new_page
81
140
  end
82
-
141
+
83
142
  def test_path_normalization
84
143
  page = Factory.build(:page, :path => 'foo/bar')
85
144
  assert_valid page
86
145
  assert_equal "/foo/bar", page.path
87
-
146
+
88
147
  page = Factory.build(:page, :path => '/foo/bar')
89
148
  assert_valid page
90
- assert_equal "/foo/bar", page.path
149
+ assert_equal "/foo/bar", page.path
91
150
  end
92
-
151
+
93
152
  def test_template
94
153
  page_template = Factory(:page_template, :name => 'test')
95
154
  page = Factory.build(:page, :template_file_name => 'test.html.erb')
@@ -97,23 +156,23 @@ class PageTest < ActiveRecord::TestCase
97
156
  assert_equal 'Test (html/erb)', page.template_name
98
157
  assert_equal page_template, page.template
99
158
  assert_equal 'templates/test', page.layout
100
-
159
+
101
160
  page = Factory.build(:page, :template_file_name => 'foo.html.erb')
102
161
  assert_equal 'foo.html.erb', page.template_file_name
103
162
  assert_equal 'Foo (html/erb)', page.template_name
104
163
  assert_nil page.template
105
164
  assert_equal 'templates/foo', page.layout
106
165
  end
107
-
166
+
108
167
  def test_revision_comments
109
168
  page = Factory(:page, :section => root_section, :name => "V1")
110
-
169
+
111
170
  assert_equal 'Created', page.live_version.version_comment
112
-
171
+
113
172
  assert page.reload.save
114
173
  assert_equal 'Created', page.reload.live_version.version_comment
115
174
  assert_equal page.live_version.version_comment,
116
- page.as_of_version(page.version).live_version.version_comment
175
+ page.as_of_version(page.version).live_version.version_comment
117
176
 
118
177
  page.update_attributes(:name => "V2")
119
178
  assert_equal 'Changed name', page.draft.version_comment
@@ -122,7 +181,7 @@ class PageTest < ActiveRecord::TestCase
122
181
  block = Factory(:html_block, :name => "Hello, World!")
123
182
  page.create_connector(block, "main")
124
183
  assert_equal "Html Block 'Hello, World!' was added to the 'main' container",
125
- page.draft.version_comment
184
+ page.draft.version_comment
126
185
  assert_equal 'Created', page.live_version.version_comment
127
186
  assert_equal 3, page.reload.draft.version
128
187
 
@@ -131,30 +190,30 @@ class PageTest < ActiveRecord::TestCase
131
190
 
132
191
  page.move_connector_down(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
133
192
  assert_equal "Html Block 'Hello, World!' was moved down within the 'main' container",
134
- page.draft.version_comment
193
+ page.draft.version_comment
135
194
  assert_equal 'Created', page.live_version.version_comment
136
195
 
137
196
  page.move_connector_up(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
138
197
  assert_equal "Html Block 'Hello, World!' was moved up within the 'main' container",
139
- page.draft.version_comment
198
+ page.draft.version_comment
140
199
  assert_equal 'Created', page.live_version.version_comment
141
200
 
142
201
  page.remove_connector(page.connectors.for_page_version(page.reload.draft.version).for_connectable(block).first)
143
202
  assert_equal "Html Block 'Hello, World!' was removed from the 'main' container",
144
- page.draft.version_comment
203
+ page.draft.version_comment
145
204
  assert_equal 'Created', page.live_version.version_comment
146
205
 
147
206
  page.revert_to(1)
148
207
  assert_equal "Reverted to version 1",
149
- page.reload.draft.version_comment
208
+ page.reload.draft.version_comment
150
209
  assert_equal 'Created', page.live_version.version_comment
151
210
 
152
211
  assert_equal "Created", page.as_of_version(1).current_version.version_comment
153
212
  assert_equal "Changed name", page.as_of_version(2).current_version.version_comment
154
213
  assert_equal "Reverted to version 1", page.draft.version_comment
155
214
 
156
- end
157
-
215
+ end
216
+
158
217
  def test_container_live
159
218
  page = Factory(:page)
160
219
  published = Factory(:html_block, :publish_on_save => true)
@@ -165,31 +224,32 @@ class PageTest < ActiveRecord::TestCase
165
224
  assert unpublished.publish
166
225
  assert page.container_published?("main")
167
226
  end
168
-
227
+
169
228
  def test_move_page_to_another_section
170
- page = Factory(:page, :section => root_section)
171
- section = Factory(:section, :name => "Another", :parent => root_section)
172
- assert_not_equal section, page.section
173
- page.section = section
229
+ page = Factory(:public_page)
230
+ new_section = Factory(:public_section)
231
+
232
+ assert_not_equal new_section, page.section
233
+ page.section = new_section
174
234
  assert page.save
175
- assert_equal section, page.section
176
- end
235
+ assert_equal new_section, page.section
236
+ end
177
237
 
178
238
  def test_deleting_page
179
239
  page = Factory(:page)
180
-
240
+
181
241
  page_count = Page.count_with_deleted
182
242
  page_version_count = page.versions.count
183
243
  assert !page.deleted?
184
-
244
+
185
245
  page.destroy
186
-
246
+
187
247
  assert_equal page_count, Page.count_with_deleted
188
248
  assert_incremented page_version_count, page.versions.count
189
249
  assert page.deleted?
190
250
  assert_raise ActiveRecord::RecordNotFound do
191
251
  Page.find(page.id)
192
- end
252
+ end
193
253
  end
194
254
 
195
255
  def test_adding_a_block_to_a_page_puts_page_in_draft_mode
@@ -205,61 +265,61 @@ class PageTest < ActiveRecord::TestCase
205
265
 
206
266
  def test_reverting_and_then_publishing_a_page
207
267
  @page = Factory(:page, :section => root_section, :publish_on_save => true)
208
-
209
- @block = Factory(:html_block,
210
- :connect_to_page_id => @page.id,
211
- :connect_to_container => "main")
268
+
269
+ @block = Factory(:html_block,
270
+ :connect_to_page_id => @page.id,
271
+ :connect_to_container => "main")
212
272
  @page.publish
213
-
273
+
214
274
  reset(:page, :block)
215
-
275
+
216
276
  assert_equal 2, @page.version
217
277
  assert_equal 1, @page.connectors.for_page_version(@page.version).count
218
-
278
+
219
279
  @block.update_attributes(:content => "Something else")
220
280
  @page.publish!
221
281
  reset(:page, :block)
222
-
282
+
223
283
  assert_equal 1, @page.connectors.for_page_version(@page.version).count
224
284
  assert_equal 2, @block.version
225
285
  assert_equal 3, @page.version
226
286
  assert @block.live?
227
287
  assert @page.live?
228
-
288
+
229
289
  @page.revert_to(2)
230
290
  reset(:page, :block)
231
291
 
232
292
  assert_equal 3, @page.version
233
293
  assert_equal 4, @page.draft.version
234
294
  assert_equal 2, @block.version
235
- assert_equal 3, @block.draft.version
295
+ assert_equal 3, @block.draft.version
236
296
  assert_equal 1, @page.connectors.for_page_version(@page.version).count
237
- assert_equal 1, @page.connectors.for_page_version(@page.draft.version).count
297
+ assert_equal 1, @page.connectors.for_page_version(@page.draft.version).count
238
298
  assert !@page.live?
239
299
  assert !@block.live?
240
-
300
+
241
301
  end
242
302
 
243
303
  end
244
304
 
245
- class PageVersioningTest < ActiveRecord::TestCase
246
-
305
+ class UserStampingTest < ActiveRecord::TestCase
306
+
247
307
  def setup
248
308
  @first_guy = Factory(:user, :login => "first_guy")
249
309
  @next_guy = Factory(:user, :login => "next_guy")
250
- User.current = @first_guy
310
+ User.current = @first_guy
251
311
  end
252
-
312
+
253
313
  def teardown
254
314
  User.current = nil
255
315
  end
256
-
257
- def test_that_it_works
316
+
317
+ def test_user_stamps_are_applied_to_versions
258
318
  page = Factory(:page, :name => "Original Value")
259
-
319
+
260
320
  assert_equal page, page.draft.page
261
321
  assert_equal @first_guy, page.updated_by
262
-
322
+
263
323
  User.current = @new_guy
264
324
  page.update_attributes(:name => "Something Different")
265
325
 
@@ -270,74 +330,80 @@ class PageVersioningTest < ActiveRecord::TestCase
270
330
  assert_equal @new_guy, page.versions.last.updated_by
271
331
  assert_equal 2, page.versions.count
272
332
  end
273
-
333
+
274
334
  end
275
335
 
276
336
  class PageInSectionTest < ActiveRecord::TestCase
277
- def test_that_it_returns_true_if_the_page_is_in_a_child_section_of_the_section
278
- @sports = Factory(:section, :parent => root_section, :name => "Sports")
279
- @nfl = Factory(:section, :parent => @sports, :name => "NFL")
280
- @mlb = Factory(:section, :parent => @sports, :name => "MLB")
281
- @afc = Factory(:section, :parent => @nfl, :name => "AFC")
282
- @al = Factory(:section, :parent => @mlb, :name => "AL")
283
- @afc_east = Factory(:section, :parent => @afc, :name => "AFC East")
284
- @al_east = Factory(:section, :parent => @al, :name => "AL East")
285
- @ravens = Factory(:section, :parent => @afc_east, :name => "Baltimore Ravens")
286
- @yanks = Factory(:section, :parent => @al_east, :name => "New York Yankees")
287
- @flacco = Factory(:page, :section => @ravens, :name => "Joe Flacco")
288
- @jeter = Factory(:page, :section => @yanks, :name => "Derek Jeter")
289
-
290
- [root_section, @sports].each do |s|
291
- assert @flacco.in_section?(s)
292
- assert @flacco.in_section?(s.name)
293
- assert @jeter.in_section?(s)
294
- assert @jeter.in_section?(s.name)
295
- end
296
337
 
297
- [@nfl, @afc, @afc_east, @ravens].each do |s|
298
- assert @flacco.in_section?(s)
299
- assert @flacco.in_section?(s.name)
300
- assert !@jeter.in_section?(s)
301
- assert !@jeter.in_section?(s.name)
302
- end
338
+ def setup
339
+ @root = Factory(:root_section, :name=>"First Section")
340
+ @football_section = Factory :public_section, :name=>"Football", :parent=>@root
341
+ @baseball_section = Factory :public_section, :name=>"Baseball", :parent=>@root
303
342
 
304
- [@mlb, @al, @al_east, @yanks].each do |s|
305
- assert !@flacco.in_section?(s)
306
- assert !@flacco.in_section?(s.name)
307
- assert @jeter.in_section?(s)
308
- assert @jeter.in_section?(s.name)
309
- end
343
+ @football_page = Factory :public_page, :section=>@football_section
344
+ @baseball_page = Factory :public_page, :section=>@baseball_section
345
+ end
346
+
347
+ test "in_section if immediate parent section is included" do
348
+ assert @football_page.in_section?("Football")
349
+ assert !@baseball_page.in_section?("Football")
350
+ end
351
+
352
+ test "in_section if immediate parent's name is included" do
353
+ assert @football_page.in_section?("Football")
354
+ assert !@baseball_page.in_section?("Football")
355
+ end
356
+
357
+ test "in_section if any ancestor is included" do
358
+ assert @football_page.in_section?(@root)
359
+ assert @baseball_page.in_section?(@root)
360
+ assert @football_page.in_section?("First Section")
361
+ assert @baseball_page.in_section?("First Section")
362
+ end
363
+
364
+ test "#top_level_section" do
365
+ assert_equal @football_section, @football_page.top_level_section
366
+ assert_equal @baseball_section, @baseball_page.top_level_section
367
+
368
+ second_level_section = Factory(:public_section, :parent=>@football_section)
369
+ second_level_page = Factory(:public_page, :section=>second_level_section)
370
+ assert_equal @football_section, second_level_page.top_level_section
371
+ end
372
+
373
+ test "#top_level_section caches result to avoid repeated requests" do
374
+ top = @football_page.top_level_section
375
+ assert_equal top.object_id, @football_page.top_level_section.object_id
310
376
  end
311
377
  end
312
378
 
313
379
  class PageWithAssociatedBlocksTest < ActiveRecord::TestCase
314
- def setup
315
- super
380
+ def setup
381
+ super
316
382
  @page = Factory(:page, :section => root_section, :name => "Bar")
317
383
  @block = Factory(:html_block)
318
384
  @other_connector = Factory(:connector, :connectable => @block, :connectable_version => @block.version)
319
385
  @page_connector = Factory(:connector, :page => @page, :page_version => @page.version, :connectable => @block, :connectable_version => @block.version)
320
386
  end
321
-
387
+
322
388
  # It should create a new page version and a new connector
323
389
  def test_updating_the_page_with_changes
324
390
  connector_count = Connector.count
325
391
  page_version = @page.version
326
-
327
- @page.update_attributes(:name => "Foo")
328
-
392
+
393
+ @page.update_attributes(:name => "Foo")
394
+
329
395
  assert_incremented connector_count, Connector.count
330
396
  assert_equal page_version, @page.version
331
397
  assert_incremented page_version, @page.draft.version
332
398
  end
333
-
399
+
334
400
  # It should not create a new page version or a new connector
335
- def test_updating_the_page_without_changes
401
+ def test_updating_the_page_without_changes
336
402
  connector_count = Connector.count
337
403
  page_version = @page.version
338
-
339
- @page.update_attributes(:name => @page.name)
340
-
404
+
405
+ @page.update_attributes(:name => @page.name)
406
+
341
407
  assert_equal connector_count, Connector.count
342
408
  assert_equal page_version, @page.version
343
409
  end
@@ -346,9 +412,9 @@ class PageWithAssociatedBlocksTest < ActiveRecord::TestCase
346
412
  connector_count = Connector.count
347
413
  assert Connector.exists?(@page_connector.id)
348
414
  assert Connector.exists?(@other_connector.id)
349
-
415
+
350
416
  @page.destroy
351
-
417
+
352
418
  assert_decremented connector_count, Connector.count
353
419
  assert !Connector.exists?(@page_connector.id)
354
420
  assert Connector.exists?(@other_connector.id)
@@ -361,13 +427,13 @@ class AddingBlocksToPageTest < ActiveRecord::TestCase
361
427
  def test_that_it_works
362
428
  @page = Factory(:page, :section => root_section)
363
429
  @block = Factory(:html_block)
364
- @block2 = Factory(:html_block)
430
+ @block2 = Factory(:html_block)
365
431
  @first_conn = @page.create_connector(@block, "testing")
366
432
  @second_conn = @page.create_connector(@block2, "testing")
367
-
433
+
368
434
  page_version_count = @page.versions.count
369
435
  connector_count = Connector.count
370
-
436
+
371
437
  @conn = @page.create_connector(@block2, "testing")
372
438
 
373
439
  assert_equal 1, @page.reload.version
@@ -376,57 +442,57 @@ class AddingBlocksToPageTest < ActiveRecord::TestCase
376
442
  assert_incremented page_version_count, @page.versions.count
377
443
  assert_equal 3, @page.connectors.for_page_version(@page.draft.version).count
378
444
  assert_equal connector_count + 3, Connector.count
379
-
445
+
380
446
  # should leave the previous connectors untouched
381
447
  @conns = @page.connectors.all(:conditions => ["page_version < 4"], :order => "id")
382
448
 
383
449
  assert_equal 3, @conns.size
384
450
 
385
451
  assert_properties @conns[0], {
386
- :connectable => @block,
387
- :page => @page,
388
- :page_version => 2,
389
- :connectable_version => 1
452
+ :connectable => @block,
453
+ :page => @page,
454
+ :page_version => 2,
455
+ :connectable_version => 1
390
456
  }
391
-
457
+
392
458
  assert_properties @conns[1], {
393
- :connectable => @block,
394
- :page => @page,
395
- :page_version => 3,
396
- :connectable_version => 1
459
+ :connectable => @block,
460
+ :page => @page,
461
+ :page_version => 3,
462
+ :connectable_version => 1
397
463
  }
398
-
464
+
399
465
  assert_properties @conns[2], {
400
- :connectable => @block2,
401
- :page => @page,
402
- :page_version => 3,
403
- :connectable_version => 1
466
+ :connectable => @block2,
467
+ :page => @page,
468
+ :page_version => 3,
469
+ :connectable_version => 1
404
470
  }
405
471
 
406
472
  @conns = @page.connectors.for_page_version(4).all(:order => "id")
407
473
  assert_equal 3, @conns.size
408
-
474
+
409
475
  assert_properties @conns[0], {
410
- :connectable => @block,
411
- :page => @page,
412
- :page_version => 4,
413
- :connectable_version => 1
476
+ :connectable => @block,
477
+ :page => @page,
478
+ :page_version => 4,
479
+ :connectable_version => 1
414
480
  }
415
-
481
+
416
482
  assert_properties @conns[1], {
417
- :connectable => @block2,
418
- :page => @page,
419
- :page_version => 4,
420
- :connectable_version => 1
483
+ :connectable => @block2,
484
+ :page => @page,
485
+ :page_version => 4,
486
+ :connectable_version => 1
421
487
  }
422
-
488
+
423
489
  assert_properties @conns[2], {
424
- :connectable => @block2,
425
- :page => @page,
426
- :page_version => 4,
427
- :connectable_version => 1
490
+ :connectable => @block2,
491
+ :page => @page,
492
+ :page_version => 4,
493
+ :connectable_version => 1
428
494
  }
429
-
495
+
430
496
  end
431
497
  end
432
498
 
@@ -441,31 +507,31 @@ class PageWithTwoBlocksTest < ActiveRecord::TestCase
441
507
  @page.create_connector(@bar_block, "whatever")
442
508
  @page.reload
443
509
  end
444
-
510
+
445
511
  def test_editing_one_of_the_blocks_creates_a_new_version_of_the_page
446
512
  page_version = @page.draft.version
447
513
  @foo_block.update_attributes(:name => "Something Else")
448
514
  assert_incremented page_version, @page.draft.version
449
515
  end
450
-
516
+
451
517
  # A page that had 2 blocks added to it and then had them removed,
452
518
  # when reverting to the previous version,
453
519
  # should restore the connectors from the version being reverted to
454
520
  def test_removing_and_reverting_to_previous_version
455
521
  remove_both_connectors!
456
-
522
+
457
523
  connector_count = Connector.count
458
-
524
+
459
525
  @page.revert
460
-
526
+
461
527
  assert_incremented connector_count, Connector.count
462
-
528
+
463
529
  assert_properties @page.reload.connectors.for_page_version(@page.draft.version).first, {
464
- :page => @page,
465
- :page_version => 6,
466
- :connectable => @bar_block,
467
- :connectable_version => 1,
468
- :container => "whatever"}
530
+ :page => @page,
531
+ :page_version => 6,
532
+ :connectable => @bar_block,
533
+ :connectable_version => 1,
534
+ :container => "whatever"}
469
535
  end
470
536
 
471
537
  # A page that had 2 blocks added to it and then had then removed,
@@ -473,27 +539,27 @@ class PageWithTwoBlocksTest < ActiveRecord::TestCase
473
539
  # should restore the connectors that version
474
540
  def test_removing_and_reverting_to_version_with_both_connectors
475
541
  remove_both_connectors!
476
-
542
+
477
543
  connector_count = Connector.count
478
-
544
+
479
545
  @page.revert_to(3)
480
-
546
+
481
547
  assert_equal connector_count + 2, Connector.count
482
-
548
+
483
549
  foo, bar = @page.reload.connectors.for_page_version(@page.draft.version).find(:all, :order => "connectors.position")
484
550
  assert_properties foo, {
485
- :page => @page,
486
- :page_version => 6,
487
- :connectable => @foo_block,
488
- :connectable_version => 1,
489
- :container => "whatever"}
551
+ :page => @page,
552
+ :page_version => 6,
553
+ :connectable => @foo_block,
554
+ :connectable_version => 1,
555
+ :container => "whatever"}
490
556
  assert_properties bar, {
491
- :page => @page,
492
- :page_version => 6,
493
- :connectable => @bar_block,
494
- :connectable_version => 1,
495
- :container => "whatever"}
496
-
557
+ :page => @page,
558
+ :page_version => 6,
559
+ :connectable => @bar_block,
560
+ :connectable_version => 1,
561
+ :container => "whatever"}
562
+
497
563
  end
498
564
 
499
565
  def test_updating_one_of_the_blocks_and_reverting_to_version_before_the_update
@@ -503,19 +569,19 @@ class PageWithTwoBlocksTest < ActiveRecord::TestCase
503
569
 
504
570
  page_version = @page.draft.version
505
571
  foo_block_version = @foo_block.draft.version
506
-
572
+
507
573
  @page.revert_to(target_version)
508
-
574
+
509
575
  assert_incremented page_version, @page.draft.version
510
576
  assert_incremented foo_block_version, @foo_block.draft.version
511
577
  assert_equal "Foo Block", @page.connectors.for_page_version(@page.draft.version).reload.first.connectable.name
512
578
  end
513
579
 
514
580
  protected
515
- def remove_both_connectors!
516
- @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
517
- @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
518
- end
581
+ def remove_both_connectors!
582
+ @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
583
+ @page.remove_connector(@page.connectors.for_page_version(@page.draft.version).first(:order => "connectors.position"))
584
+ end
519
585
 
520
586
  end
521
587
 
@@ -523,35 +589,35 @@ class PageWithBlockTest < ActiveRecord::TestCase
523
589
  def setup
524
590
  @page = Factory(:page, :section => root_section)
525
591
  @block = Factory(:html_block)
526
- @conn = @page.create_connector(@block, "bar")
592
+ @conn = @page.create_connector(@block, "bar")
527
593
  @page.publish!
528
594
  @conn = @page.connectors.for_page_version(@page.version).for_connectable(@block).first
529
595
  end
530
-
596
+
531
597
  def test_removing_connector
532
598
  page_version = @page.draft.version
533
599
  page_version_count = Page::Version.count
534
600
  assert @page.published?
535
-
536
- @page.remove_connector(@conn)
537
-
601
+
602
+ @page.remove_connector(@conn)
603
+
538
604
  assert_incremented page_version_count, Page::Version.count
539
605
  assert_incremented page_version, @page.draft.version
540
-
606
+
541
607
  conns = @page.connectors.for_page_version(@page.draft.version-1).all
542
608
  assert_equal 1, conns.size
543
-
609
+
544
610
  assert_properties conns.first, {
545
- :page => @page,
546
- :page_version => page_version,
547
- :connectable => @block,
548
- :connectable_version => @block.version
611
+ :page => @page,
612
+ :page_version => page_version,
613
+ :connectable => @block,
614
+ :connectable_version => @block.version
549
615
  }
550
616
 
551
617
  assert @page.reload.connectors.for_page_version(@page.draft.version).empty?
552
618
  assert !@page.live?
553
619
  end
554
-
620
+
555
621
  def test_removing_multiple_connectors
556
622
  @block2 = Factory(:html_block)
557
623
  @conn2 = @page.create_connector(@block2, "bar")
@@ -559,37 +625,37 @@ class PageWithBlockTest < ActiveRecord::TestCase
559
625
  #Need to get the new connector that matches @conn2, otherwise you will delete an older version, not the latest connector
560
626
  @conn2 = Connector.first(:conditions => {:page_id => @page.reload.id, :page_version => @page.draft.version, :connectable_id => @block2.id, :connectable_version => @block2.version, :container => "bar"})
561
627
  @page.remove_connector(@conn2)
562
-
628
+
563
629
  page_version_count = Page::Version.count
564
630
  page_version = @page.draft.version
565
631
  page_connector_count = @page.connectors.for_page_version(@page.draft.version).count
566
-
632
+
567
633
  @conn = Connector.first(:conditions => {:page_id => @page.reload.id, :page_version => @page.draft.version, :connectable_id => @block2.id, :connectable_version => @block2.version, :container => "foo"})
568
- @page.remove_connector(@conn)
634
+ @page.remove_connector(@conn)
569
635
  @page.reload
570
-
636
+
571
637
  assert_incremented page_version_count, Page::Version.count
572
638
  assert_incremented page_version, @page.draft.version
573
- assert_decremented page_connector_count,
574
- @page.connectors.for_page_version(@page.draft.version).count
575
-
639
+ assert_decremented page_connector_count,
640
+ @page.connectors.for_page_version(@page.draft.version).count
641
+
576
642
  conns = @page.connectors.all(:order => "id")
577
-
643
+
578
644
  #log_array conns, :id, :page_id, :page_version, :connectable_id, :connectable_type, :connectable_version, :container, :position
579
645
 
580
646
  assert_equal 9, conns.size
581
647
 
582
- assert_properties conns[0], {:page => @page, :page_version => 2, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
583
- assert_properties conns[1], {:page => @page, :page_version => 3, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
648
+ assert_properties conns[0], {:page => @page, :page_version => 2, :connectable => @block, :connectable_version => 1, :container => "bar", :position => 1}
649
+ assert_properties conns[1], {:page => @page, :page_version => 3, :connectable => @block, :connectable_version => 1, :container => "bar", :position => 1}
584
650
  assert_properties conns[2], {:page => @page, :page_version => 3, :connectable => @block2, :connectable_version => 1, :container => "bar", :position => 2}
585
- assert_properties conns[3], {:page => @page, :page_version => 4, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
651
+ assert_properties conns[3], {:page => @page, :page_version => 4, :connectable => @block, :connectable_version => 1, :container => "bar", :position => 1}
586
652
  assert_properties conns[4], {:page => @page, :page_version => 4, :connectable => @block2, :connectable_version => 1, :container => "bar", :position => 2}
587
653
  assert_properties conns[5], {:page => @page, :page_version => 4, :connectable => @block2, :connectable_version => 1, :container => "foo", :position => 1}
588
- assert_properties conns[6], {:page => @page, :page_version => 5, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
654
+ assert_properties conns[6], {:page => @page, :page_version => 5, :connectable => @block, :connectable_version => 1, :container => "bar", :position => 1}
589
655
  assert_properties conns[7], {:page => @page, :page_version => 5, :connectable => @block2, :connectable_version => 1, :container => "foo", :position => 1}
590
- assert_properties conns[8], {:page => @page, :page_version => 6, :connectable => @block , :connectable_version => 1, :container => "bar", :position => 1}
656
+ assert_properties conns[8], {:page => @page, :page_version => 6, :connectable => @block, :connectable_version => 1, :container => "bar", :position => 1}
591
657
  end
592
-
658
+
593
659
  end
594
660
 
595
661
  class UnpublishedPageWithOnePublishedAndOneUnpublishedBlockTest < ActiveRecord::TestCase
@@ -600,23 +666,23 @@ class UnpublishedPageWithOnePublishedAndOneUnpublishedBlockTest < ActiveRecord::
600
666
  @page.create_connector(@published_block, "main")
601
667
  @page.create_connector(@unpublished_block, "main")
602
668
  @published_block.publish!
603
- @page.reload
669
+ @page.reload
604
670
  end
605
-
671
+
606
672
  def test_publishing_the_block
607
673
  @unpublished_block.publish!
608
674
  assert @unpublished_block.reload.published?
609
675
  @page.reload
610
676
  assert !@page.live?
611
677
  end
612
-
678
+
613
679
  def test_publishing_the_page
614
680
  page_version_count = Page::Version.count
615
681
  unpublished_block_version_count = @unpublished_block.versions.count
616
682
  published_block_version_count = @published_block.versions.count
617
-
683
+
618
684
  @page.publish!
619
-
685
+
620
686
  assert_equal page_version_count, Page::Version.count
621
687
  assert_equal unpublished_block_version_count, @unpublished_block.versions.count
622
688
  assert_equal published_block_version_count, @published_block.versions.count
@@ -624,12 +690,12 @@ class UnpublishedPageWithOnePublishedAndOneUnpublishedBlockTest < ActiveRecord::
624
690
  assert @unpublished_block.reload.live?
625
691
  assert @published_block.reload.live?
626
692
  end
627
-
693
+
628
694
  end
629
695
 
630
696
  class RevertingABlockThatIsOnMultiplePagesTest < ActiveRecord::TestCase
631
697
  def test_that_it_reverts_both_pages
632
-
698
+
633
699
  # 1. Create a new page (Page 1, v1)
634
700
  @page1 = Factory(:page, :name => "Page 1")
635
701
  assert_equal 1, @page1.version
@@ -638,8 +704,8 @@ class RevertingABlockThatIsOnMultiplePagesTest < ActiveRecord::TestCase
638
704
  @page2 = Factory(:page, :name => "Page 2")
639
705
 
640
706
  # 3. Add a new html block to Page 1. Save, don't publish. (Page 1, v2)
641
- @block = Factory(:html_block, :name => "Block v1",
642
- :connect_to_page_id => @page1.id, :connect_to_container => "main")
707
+ @block = Factory(:html_block, :name => "Block v1",
708
+ :connect_to_page_id => @page1.id, :connect_to_container => "main")
643
709
  reset(:page1, :page2, :block)
644
710
  assert_equal 2, @page1.draft.version
645
711
  assert_equal 1, @page2.draft.version
@@ -667,9 +733,9 @@ class RevertingABlockThatIsOnMultiplePagesTest < ActiveRecord::TestCase
667
733
  # Expected: Both page 1 and 2 will display the same version of the block (v1).
668
734
  assert_equal "Block v1", @page1.connectors.first.connectable.name
669
735
  assert_equal "Block v1", @page2.connectors.first.connectable.name
670
-
736
+
671
737
  end
672
-
738
+
673
739
  end
674
740
 
675
741
  class ViewingAPreviousVersionOfAPageTest < ActiveRecord::TestCase
@@ -677,31 +743,31 @@ class ViewingAPreviousVersionOfAPageTest < ActiveRecord::TestCase
677
743
  def test_that_it_shows_the_correct_version_of_the_blocks_it_is_connected_to
678
744
  # 1. Create Page A (v1)
679
745
  @page = Factory(:page, :section => root_section)
680
-
746
+
681
747
  # 2. Add new Html Block A to Page A (Page A v2, Block A v1)
682
748
  @block = Factory(:html_block, :name => "Block 1", :connect_to_page_id => @page.id, :connect_to_container => "main")
683
749
  reset(:page, :block)
684
750
  assert_equal 2, @page.draft.version
685
- assert_equal 1, @block.draft.version
686
-
751
+ assert_equal 1, @block.draft.version
752
+
687
753
  # 3. Publish Page A (Page A v3, Block A v2)
688
754
  @page.publish!
689
755
  reset(:page, :block)
690
756
  assert_equal 2, @page.draft.version
691
- assert_equal 1, @block.draft.version
692
-
757
+ assert_equal 1, @block.draft.version
758
+
693
759
  # 4. Edit Block A (Page A v4, Block A v3)
694
760
  @block.update_attributes!(:name => "Block 2")
695
761
  reset(:page, :block)
696
762
  assert_equal 2, @page.version
697
763
  assert_equal 3, @page.draft.version
698
- assert_equal 2, @block.draft.version
699
-
764
+ assert_equal 2, @block.draft.version
765
+
700
766
  # Open Page A in a different browser (as guest)
701
767
  @live_page = Page.find_live_by_path(@page.path)
702
768
  assert_equal 2, @live_page.version
703
769
  assert_equal "Block 1", @live_page.connectors.for_page_version(@live_page.version).first.connectable.live_version.name
704
-
770
+
705
771
  end
706
772
  end
707
773