zena 1.2.7 → 1.2.8

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 (407) hide show
  1. data/History.txt +80 -25
  2. data/Rakefile +2 -2
  3. data/app/controllers/columns_controller.rb +2 -2
  4. data/app/controllers/nodes_controller.rb +22 -29
  5. data/app/controllers/user_sessions_controller.rb +35 -10
  6. data/app/controllers/users_controller.rb +2 -2
  7. data/app/controllers/versions_controller.rb +2 -2
  8. data/app/models/group.rb +15 -1
  9. data/app/models/node.rb +109 -8
  10. data/app/models/role.rb +4 -0
  11. data/app/models/site.rb +64 -58
  12. data/app/models/template.rb +1 -1
  13. data/app/models/user.rb +135 -29
  14. data/app/models/user_session.rb +0 -1
  15. data/app/models/virtual_class.rb +11 -6
  16. data/app/views/columns/_form.html.erb +3 -1
  17. data/app/views/columns/_li.html.erb +1 -1
  18. data/app/views/columns/create.rjs +1 -1
  19. data/app/views/groups/_form.rhtml +16 -13
  20. data/app/views/relations/_form.erb +18 -6
  21. data/app/views/sites/_form.erb +12 -6
  22. data/app/views/users/_form.rhtml +23 -8
  23. data/app/views/users/_li.rhtml +14 -3
  24. data/app/views/users/index.rhtml +1 -1
  25. data/app/views/virtual_classes/_form.erb +12 -2
  26. data/app/views/zafu/default/Node-+login.zafu +8 -1
  27. data/app/views/zafu/default/Node-+search.zafu +1 -1
  28. data/bricks/acls/lib/bricks/acls.rb +1 -0
  29. data/bricks/acls/zena/migrate/20130903150356_longer_names_for_acl.rb +9 -0
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
  31. data/bricks/currency/lib/bricks/currency.rb +120 -0
  32. data/bricks/currency/zena/test/unit/currency_test.rb +43 -0
  33. data/bricks/fs_skin/lib/bricks/fs_skin.rb +1 -1
  34. data/bricks/fs_skin/zena/skins/blog/Node-+search.zafu +1 -1
  35. data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
  36. data/bricks/fs_skin/zena/test/unit/fs_skin_view_test.rb +35 -0
  37. data/bricks/pdf/lib/bricks/pdf.rb +1 -1
  38. data/bricks/sphinx/lib/bricks/sphinx.rb +2 -0
  39. data/bricks/sphinx/zena/init.rb +14 -0
  40. data/bricks/tags/zena/test/zafu/tags.yml +5 -1
  41. data/bricks/worker/lib/bricks/worker.rb +3 -2
  42. data/bricks/zena/zena/migrate/20130829093753_add_versioned_flag_to_column.rb +10 -0
  43. data/bricks/zena/zena/migrate/20130903084909_count_login_attempts.rb +11 -0
  44. data/bricks/zena/zena/migrate/20131104153126_index_fullpath.rb +10 -0
  45. data/bricks/zena/zena/migrate/20131104210011_rebuild_fullpath_after_change.rb +10 -0
  46. data/bricks/zena/zena/migrate/20131105160420_add_skin_id_to_sites.rb +9 -0
  47. data/bricks/zena/zena/migrate/20131105175822_add_profile_to_users.rb +11 -0
  48. data/bricks/zena/zena/migrate/20140213120038_fix_idx_scope.rb +13 -0
  49. data/bricks/zena/zena/migrate/20140628140247_add_site_readonly.rb +9 -0
  50. data/config/bricks.yml +8 -4
  51. data/config/gems.yml +5 -3
  52. data/db/init/base/skins/default/Node-+login.zafu +8 -1
  53. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  54. data/lib/bricks/loader.rb +5 -5
  55. data/lib/gettext_strings.rb +3 -0
  56. data/lib/tasks/zena.rake +25 -22
  57. data/lib/zafu/process/context.rb +4 -0
  58. data/lib/zena/acts/secure_node.rb +3 -3
  59. data/lib/zena/app.rb +1 -0
  60. data/lib/zena/deploy.rb +1 -1
  61. data/lib/zena/deploy/template.rb +1 -1
  62. data/lib/zena/foxy_parser.rb +5 -2
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/site_worker.rb +2 -2
  65. data/lib/zena/test_controller.rb +5 -2
  66. data/lib/zena/use/action.rb +9 -2
  67. data/lib/zena/use/ajax.rb +20 -4
  68. data/lib/zena/use/ancestry.rb +89 -15
  69. data/lib/zena/use/authlogic.rb +8 -2
  70. data/lib/zena/use/context.rb +1 -0
  71. data/lib/zena/use/display.rb +1 -97
  72. data/lib/zena/use/forms.rb +28 -8
  73. data/lib/zena/use/html_tags.rb +16 -7
  74. data/lib/zena/use/i18n.rb +1 -1
  75. data/lib/zena/use/prop_eval.rb +6 -1
  76. data/lib/zena/use/query_node.rb +69 -4
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/refactor.rb +5 -2
  79. data/lib/zena/use/relations.rb +1 -0
  80. data/lib/zena/use/rendering.rb +7 -4
  81. data/lib/zena/use/test_helper.rb +8 -4
  82. data/lib/zena/use/upload.rb +14 -0
  83. data/lib/zena/use/urls.rb +39 -23
  84. data/lib/zena/use/version_hash.rb +5 -2
  85. data/lib/zena/use/workflow.rb +116 -70
  86. data/lib/zena/use/zafu_eval.rb +41 -0
  87. data/lib/zena/use/zafu_safe_definitions.rb +1 -0
  88. data/lib/zena/use/zafu_templates.rb +32 -26
  89. data/lib/zena/use/zazen.rb +8 -7
  90. data/locale/app.pot +5 -1
  91. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  92. data/locale/de/zena.po +385 -281
  93. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  94. data/locale/en/zena.po +378 -271
  95. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  96. data/locale/fr/zena.po +387 -272
  97. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  98. data/locale/it/zena.po +433 -404
  99. data/locale/zena.pot +362 -268
  100. data/public/javascripts/grid.js +280 -104
  101. data/public/javascripts/zena.js +43 -15
  102. data/public/stylesheets/admin.css +8 -2
  103. data/public/stylesheets/grid.css +5 -2
  104. data/public/stylesheets/popup.css +1 -1
  105. data/test/fixtures/files/TestNode.zafu +51 -0
  106. data/test/functional/nodes_controller_test.rb +20 -5
  107. data/test/functional/user_sessions_controller_test.rb +41 -6
  108. data/test/functional/users_controller_test.rb +1 -2
  109. data/test/integration/navigation_test.rb +22 -4
  110. data/test/integration/query_node/basic.yml +7 -0
  111. data/test/integration/query_node/complex.yml +1 -1
  112. data/test/integration/query_node/errors.yml +1 -1
  113. data/test/integration/query_node/filters.yml +34 -1
  114. data/test/integration/query_node/relations.yml +6 -13
  115. data/test/integration/query_node_test.rb +22 -3
  116. data/test/integration/zafu_compiler/action.yml +1 -1
  117. data/test/integration/zafu_compiler/alias_site.yml +52 -0
  118. data/test/integration/zafu_compiler/complex.yml +1 -1
  119. data/test/integration/zafu_compiler/complex_ok.yml +5 -5
  120. data/test/integration/zafu_compiler/context.yml +1 -1
  121. data/test/integration/zafu_compiler/display.yml +56 -5
  122. data/test/integration/zafu_compiler/forms.yml +35 -2
  123. data/test/integration/zafu_compiler/meta.yml +4 -0
  124. data/test/integration/zafu_compiler/rubyless.yml +1 -1
  125. data/test/integration/zafu_compiler/safe_definitions.yml +4 -0
  126. data/test/integration/zafu_compiler/security.yml +10 -0
  127. data/test/integration/zafu_compiler/site.yml +5 -1
  128. data/test/integration/zafu_compiler/urls.yml +8 -2
  129. data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
  130. data/test/integration/zafu_compiler/zazen.yml +4 -0
  131. data/test/integration/zafu_compiler_test.rb +47 -4
  132. data/test/selenium/Grid/grid1.rsel +8 -8
  133. data/test/sites/complex/sites.yml +2 -2
  134. data/test/sites/complex/users.yml +1 -0
  135. data/test/sites/zena/columns.yml +4 -0
  136. data/test/sites/zena/sites.yml +1 -0
  137. data/test/sites/zena/users.yml +1 -0
  138. data/test/unit/node_test.rb +53 -5
  139. data/test/unit/note_test.rb +1 -1
  140. data/test/unit/relation_proxy_test.rb +20 -0
  141. data/test/unit/role_test.rb +2 -0
  142. data/test/unit/site_test.rb +28 -6
  143. data/test/unit/user_test.rb +332 -1
  144. data/test/unit/virtual_class_test.rb +55 -0
  145. data/test/unit/workflow_test.rb +175 -0
  146. data/test/unit/zena/use/ancestry_test.rb +52 -10
  147. data/test/unit/zena/use/prop_eval_test.rb +44 -0
  148. data/test/unit/zena/use/rendering_test.rb +48 -2
  149. data/test/unit/zena/use/upload_test.rb +15 -13
  150. data/test/unit/zena/use/urls_test.rb +1 -0
  151. data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +39 -25
  152. data/zena.gemspec +69 -307
  153. metadata +143 -368
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
  218. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
  219. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
  220. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
  221. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
  222. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
  223. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
  224. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
  225. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
  226. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
  227. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
  228. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
  229. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  230. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
  231. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  232. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
  233. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
  234. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
  235. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
  236. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
  237. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
  238. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
  239. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  240. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
  241. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  242. data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
  243. data/vendor/plugins/selenium-on-rails/CHANGELOG +0 -125
  244. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +0 -202
  245. data/vendor/plugins/selenium-on-rails/README.md +0 -202
  246. data/vendor/plugins/selenium-on-rails/Rakefile +0 -38
  247. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +0 -265
  248. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +0 -148
  249. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +0 -126
  250. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +0 -231
  251. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +0 -195
  252. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +0 -295
  253. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +0 -219
  254. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +0 -156
  255. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +0 -179
  256. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +0 -223
  257. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +0 -441
  258. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +0 -3098
  259. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +0 -2080
  260. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +0 -116
  261. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +0 -116
  262. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +0 -150
  263. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +0 -422
  264. data/vendor/plugins/selenium-on-rails/doc/files/README.html +0 -321
  265. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +0 -108
  266. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +0 -101
  267. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +0 -222
  268. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +0 -109
  269. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +0 -111
  270. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +0 -101
  271. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +0 -101
  272. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +0 -118
  273. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +0 -101
  274. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +0 -101
  275. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +0 -114
  276. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +0 -113
  277. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +0 -120
  278. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +0 -108
  279. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +0 -115
  280. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +0 -42
  281. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +0 -43
  282. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +0 -182
  283. data/vendor/plugins/selenium-on-rails/doc/index.html +0 -24
  284. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +0 -208
  285. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +0 -19
  286. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +0 -50
  287. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +0 -16
  288. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +0 -14
  289. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +0 -11
  290. data/vendor/plugins/selenium-on-rails/init.rb +0 -15
  291. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +0 -122
  292. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +0 -16
  293. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +0 -8
  294. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +0 -11
  295. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +0 -215
  296. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +0 -57
  297. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +0 -36
  298. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +0 -61
  299. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +0 -20
  300. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +0 -44
  301. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +0 -87
  302. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +0 -56
  303. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +0 -116
  304. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +0 -1002
  305. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +0 -514
  306. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +0 -91
  307. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +0 -24
  308. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +0 -30
  309. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +0 -18
  310. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +0 -5
  311. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +0 -9
  312. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +0 -67
  313. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +0 -26
  314. data/vendor/plugins/selenium-on-rails/routes.rb +0 -24
  315. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +0 -7
  316. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +0 -8
  317. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +0 -110
  318. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +0 -109
  319. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +0 -145
  320. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +0 -55
  321. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +0 -177
  322. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +0 -177
  323. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +0 -298
  326. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +0 -16
  327. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +0 -205
  328. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +0 -1759
  337. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +0 -1800
  338. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  339. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  340. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  341. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  342. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  343. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +0 -2006
  344. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +0 -101
  345. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +0 -815
  346. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  347. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +0 -958
  348. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  349. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +0 -283
  350. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +0 -383
  351. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +0 -91
  352. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +0 -69
  353. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +0 -1616
  354. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +0 -72
  355. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +0 -3184
  356. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +0 -2300
  357. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +0 -153
  358. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  359. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +0 -175
  360. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +0 -148
  361. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +0 -695
  362. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +0 -1362
  363. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +0 -5
  364. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +0 -803
  365. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +0 -1537
  366. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +0 -979
  367. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +0 -3
  368. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +0 -75
  369. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +0 -153
  370. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  371. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +0 -43
  372. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +0 -316
  373. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +0 -566
  374. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +0 -2816
  375. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +0 -549
  376. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +0 -149
  377. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +0 -2450
  378. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +0 -8
  379. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +0 -37
  380. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +0 -27
  381. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +0 -72
  382. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +0 -157
  383. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +0 -708
  384. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +0 -242
  385. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +0 -67
  386. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +0 -43
  387. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +0 -35
  388. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +0 -31
  389. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +0 -109
  390. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +0 -17
  391. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +0 -51
  392. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +0 -101
  393. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +0 -1
  394. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +0 -12
  395. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +0 -6
  396. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +0 -2
  397. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +0 -6
  398. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +0 -1
  399. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +0 -5
  400. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +0 -5
  401. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +0 -7
  402. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +0 -8
  403. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +0 -7
  404. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +0 -1
  405. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +0 -1
  406. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +0 -1
  407. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +0 -1
@@ -1207,6 +1207,61 @@ class VirtualClassTest < Zena::Unit::TestCase
1207
1207
  end # with relations
1208
1208
 
1209
1209
  end
1210
+
1211
+ context 'with same classes in different sites' do
1212
+
1213
+ setup do
1214
+ @one = Site.create_for_host('one.host', 'secret')
1215
+ assert_equal 'one.host', current_site.host
1216
+ make_vclass_and_relations(current_site)
1217
+ check_relations(@one.id)
1218
+
1219
+ @two = Site.create_for_host('two.host', 'secret')
1220
+ assert_equal 'two.host', current_site.host
1221
+ assert_equal 'admin', visitor.login
1222
+ make_vclass_and_relations(current_site)
1223
+ check_relations(@two.id)
1224
+ end
1225
+
1226
+ subject do
1227
+ VirtualClass['Cat']
1228
+ end
1229
+
1230
+ should 'not make a mess on move' do
1231
+ assert_difference('Relation.count', 0) do
1232
+ assert subject.update_attributes(:superclass => 'Project')
1233
+ check_relations(@one.id)
1234
+ end
1235
+ end
1236
+ end
1210
1237
  end # An admin
1238
+
1239
+ private
1240
+
1241
+ def make_vclass_and_relations(site)
1242
+ sub = VirtualClass.create(:superclass => 'Page', :name => 'Sub', :create_group_id => site.public_group_id)
1243
+ cat = VirtualClass.create(:superclass => 'Section', :name => 'Cat', :create_group_id => site.public_group_id)
1244
+
1245
+ Relation.create(
1246
+ :source_kpath => sub.kpath,
1247
+ :source_role => 'cat_sub',
1248
+ :target_kpath => cat.kpath,
1249
+ :target_role => 'sub_cat'
1250
+ )
1251
+
1252
+ Relation.create(
1253
+ :source_kpath => sub.kpath,
1254
+ :source_role => 'cat_page',
1255
+ :target_kpath => Page.kpath,
1256
+ :target_role => 'page_cat'
1257
+ )
1258
+ end
1211
1259
 
1260
+ def check_relations(site_id)
1261
+ assert cat = VirtualClass.find_by_site_id_and_name(site_id, 'Cat')
1262
+ assert sub = VirtualClass.find_by_site_id_and_name(site_id, 'Sub')
1263
+ assert cat_sub = Relation.find_by_site_id_and_source_role(site_id, 'cat_sub')
1264
+ assert cat_page = Relation.find_by_site_id_and_source_role(site_id, 'cat_page')
1265
+ assert_equal 2, Relation.count(:conditions => {:site_id => site_id})
1266
+ end
1212
1267
  end
@@ -377,6 +377,181 @@ class WorkflowTest < Zena::Unit::TestCase
377
377
  assert_equal 'Brazil', node.prop['country']
378
378
  end
379
379
  end
380
+
381
+ context 'with another user' do
382
+ setup do
383
+ login(:lion)
384
+ end
385
+
386
+ context 'saving without clone' do
387
+
388
+ should 'not create new version' do
389
+ node = secure!(Node) { nodes(:lake) }
390
+ assert_difference('Version.count', 0) do
391
+ assert node.update_attributes_without_clone(:first_name => 'Mea Lua', :country => 'Brazil')
392
+ node = secure!(Node) { nodes(:lake) } # reload
393
+ assert_equal 'Mea Lua we love', node.title
394
+ assert_equal 'Brazil', node.prop['country']
395
+ end
396
+ end
397
+
398
+ should 'not change version author' do
399
+ node = secure!(Node) { nodes(:lake) }
400
+ orig_user = node.version.user_id
401
+ assert_not_equal visitor.id, orig_user
402
+ assert_difference('Version.count', 0) do
403
+ assert node.update_attributes_without_clone(:first_name => 'Mea Lua', :country => 'Brazil')
404
+ node = secure!(Node) { nodes(:lake) } # reload
405
+ assert_equal orig_user, node.version.user_id
406
+ end
407
+ end
408
+
409
+ should 'not change node timestamp' do
410
+ node = secure!(Node) { nodes(:lake) }
411
+ updated_at = node.updated_at
412
+ assert_difference('Version.count', 0) do
413
+ assert node.update_attributes_without_clone(:first_name => 'Mea Lua', :country => 'Brazil')
414
+ node = secure!(Node) { nodes(:lake) } # reload
415
+ assert_equal updated_at, node.updated_at
416
+ end
417
+ end
418
+
419
+ should 'not change version timestamp' do
420
+ node = secure!(Node) { nodes(:lake) }
421
+ updated_at = node.version.updated_at
422
+ assert_difference('Version.count', 0) do
423
+ assert node.update_attributes_without_clone(:first_name => 'Mea Lua', :country => 'Brazil')
424
+ node = secure!(Node) { nodes(:lake) } # reload
425
+ assert_equal updated_at, node.version.updated_at
426
+ end
427
+ end
428
+
429
+ should 'evaluate prop_eval' do
430
+ node = secure!(Node) { nodes(:lake) }
431
+ assert_difference('Version.count', 0) do
432
+ assert node.update_attributes_without_clone(:first_name => 'Mea Lua', :country => 'Brazil')
433
+ node = secure!(Node) { nodes(:lake) } # reload
434
+ assert_equal 'Mea Lua we love', node.title
435
+ end
436
+ end
437
+
438
+ should 'evaluate indices' do
439
+ node = secure!(Node) { nodes(:opening) }
440
+ assert_difference('Version.count', 0) do
441
+ t = Time.utc(2013, 8, 21, 10, 59)
442
+ assert node.update_attributes_without_clone(:date => t)
443
+ node = secure!(Node) { nodes(:opening) } # reload
444
+ assert_equal t, node.idx_datetime1
445
+ end
446
+ end
447
+
448
+ context 'with save cmd' do
449
+
450
+ should 'not create new version' do
451
+ node = secure!(Node) { nodes(:lake) }
452
+ assert_difference('Version.count', 0) do
453
+ node.attributes = {:first_name => 'Mea Lua', :country => 'Brazil'}
454
+ assert node.save_without_clone
455
+ node = secure!(Node) { nodes(:lake) } # reload
456
+ assert_equal 'Mea Lua we love', node.title
457
+ assert_equal 'Brazil', node.prop['country']
458
+ end
459
+ end
460
+
461
+ should 'evaluate prop_eval' do
462
+ node = secure!(Node) { nodes(:lake) }
463
+ assert_difference('Version.count', 0) do
464
+ node.attributes = {:first_name => 'Mea Lua', :country => 'Brazil'}
465
+ assert node.save_without_clone
466
+ node = secure!(Node) { nodes(:lake) } # reload
467
+ assert_equal 'Mea Lua we love', node.title
468
+ end
469
+ end
470
+
471
+ should 'evaluate indices' do
472
+ node = secure!(Node) { nodes(:opening) }
473
+ assert_difference('Version.count', 0) do
474
+ t = Time.utc(2013, 8, 21, 10, 59)
475
+ node.prop['date'] = t
476
+ assert node.save_without_clone
477
+ node = secure!(Node) { nodes(:opening) } # reload
478
+ assert_equal t, node.idx_datetime1
479
+ end
480
+ end
481
+ end
482
+ end
483
+
484
+ context 'updating not versioned props only' do
485
+
486
+ should 'not create new version' do
487
+ node = secure!(Node) { nodes(:lake) }
488
+ assert_difference('Version.count', 0) do
489
+ assert node.update_attributes(:'cart' => {'foo' => 'hello'})
490
+ node = secure!(Node) { nodes(:lake) } # reload
491
+ assert_equal 'hello', node.cart['foo']
492
+ end
493
+ end
494
+
495
+ should 'not change version author' do
496
+ node = secure!(Node) { nodes(:lake) }
497
+ orig_user = node.version.user_id
498
+ assert_not_equal visitor.id, orig_user
499
+ assert_difference('Version.count', 0) do
500
+ assert node.update_attributes(:'cart' => {'foo' => 'hello'})
501
+ node = secure!(Node) { nodes(:lake) } # reload
502
+ assert_equal orig_user, node.version.user_id
503
+ end
504
+ end
505
+
506
+ should 'not change node timestamp' do
507
+ node = secure!(Node) { nodes(:lake) }
508
+ updated_at = node.updated_at
509
+ assert_difference('Version.count', 0) do
510
+ assert node.update_attributes(:'cart' => {'foo' => 'hello'})
511
+ node = secure!(Node) { nodes(:lake) } # reload
512
+ assert_equal updated_at, node.updated_at
513
+ end
514
+ end
515
+
516
+ should 'not change version timestamp' do
517
+ node = secure!(Node) { nodes(:lake) }
518
+ updated_at = node.version.updated_at
519
+ assert_difference('Version.count', 0) do
520
+ assert node.update_attributes(:'cart' => {'foo' => 'hello'})
521
+ node = secure!(Node) { nodes(:lake) } # reload
522
+ assert_equal updated_at, node.version.updated_at
523
+ end
524
+ end
525
+
526
+ should 'evaluate prop_eval' do
527
+ node = secure!(Node) { nodes(:lake) }
528
+
529
+ c = secure(VirtualClass) { virtual_classes(:Contact) }
530
+ assert c.update_attributes(:prop_eval => %q[{'cart' => {'baz' => cart['foo']}}])
531
+
532
+ assert_difference('Version.count', 0) do
533
+ assert node.update_attributes(:'cart' => {'foo' => 'hello'})
534
+ node = secure!(Node) { nodes(:lake) } # reload
535
+ assert_equal 'hello', node.cart['baz']
536
+ end
537
+
538
+ # Make sure to clear VirtualClass cache to avoid errors due to prop_eval propagation
539
+ VirtualClass.expire_cache!
540
+ end
541
+
542
+ should 'evaluate indices' do
543
+
544
+ c = secure(Column) { columns(:Contact_cart) }
545
+ assert c.update_attributes(:index => '.idx_string1', :ptype => 'string')
546
+ node = secure!(Node) { nodes(:lake) }
547
+ assert_difference('Version.count', 0) do
548
+ assert node.update_attributes(:'cart' => 'Hop', :v_status => Zena::Status::Pub)
549
+ node = secure!(Node) { nodes(:lake) } # reload
550
+ assert_equal 'Hop', node.idx_string1
551
+ end
552
+ end
553
+ end
554
+ end
380
555
 
381
556
  should 'be able to create nodes using properties' do
382
557
  node = secure!(Node) { Node.create(defaults.merge(:title => 'Pandeiro')) }
@@ -68,12 +68,12 @@ class AncestryTest < Zena::Unit::TestCase
68
68
  end
69
69
 
70
70
  should 'rebuild fullpath in new parent' do
71
- assert_equal fullpath(:people, :lion, :secret), subject.fullpath
71
+ assert_equal fullpath(:zena, :people, :lion, :secret), subject.fullpath
72
72
  end
73
73
 
74
74
  should 'rebuild children fullpath' do
75
- assert_equal fullpath(:people, :lion, :secret, :talk), nodes(:talk).fullpath
76
- assert_equal fullpath(:people, :lion, :secret, :proposition), nodes(:proposition).fullpath
75
+ assert_equal fullpath(:zena, :people, :lion, :secret, :talk), nodes(:talk).fullpath
76
+ assert_equal fullpath(:zena, :people, :lion, :secret, :proposition), nodes(:proposition).fullpath
77
77
  end
78
78
 
79
79
  context 'with custom_base set' do
@@ -93,6 +93,31 @@ class AncestryTest < Zena::Unit::TestCase
93
93
 
94
94
  end # Moving an object
95
95
 
96
+ context 'Moving a document' do
97
+ setup do
98
+ login(:lion)
99
+ # Move 'talk' inside 'tree_jpg'
100
+ talk = secure(Node) {nodes(:talk)}
101
+
102
+ assert talk.update_attributes(:parent_id => subject.id)
103
+
104
+ # Move 'tree_jpg' inside 'ant'
105
+ subject.update_attributes(:parent_id => nodes_id(:ant))
106
+ end
107
+
108
+ subject do
109
+ secure(Node) { nodes(:tree_jpg) }
110
+ end
111
+
112
+ should 'rebuild fullpath in new parent' do
113
+ assert_equal fullpath(:zena, :people, :ant, :tree_jpg), subject.fullpath
114
+ end
115
+
116
+ should 'rebuild children fullpath' do
117
+ assert_equal fullpath(:zena, :people, :ant, :tree_jpg, :talk), nodes(:talk).fullpath
118
+ end
119
+ end
120
+
96
121
  context 'Finding an object from a path' do
97
122
  setup do
98
123
  login(:lion)
@@ -188,12 +213,12 @@ class AncestryTest < Zena::Unit::TestCase
188
213
  end
189
214
 
190
215
  should 'build fullpath' do
191
- assert_equal [nodes_zip(:projects), subject.zip].join('/'), subject.fullpath
216
+ assert_equal [nodes_zip(:zena), nodes_zip(:projects), subject.zip].join('/'), subject.fullpath
192
217
  end
193
218
 
194
219
  should 'build basepath' do
195
220
  err subject
196
- assert_equal [nodes_zip(:projects), subject.zip].join('/'), subject.fullpath
221
+ assert_equal [nodes_zip(:zena), nodes_zip(:projects), subject.zip].join('/'), subject.fullpath
197
222
  end
198
223
  end # creating a node
199
224
 
@@ -205,16 +230,33 @@ class AncestryTest < Zena::Unit::TestCase
205
230
  login(:ant)
206
231
  Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:status)} WHERE id = #{nodes_id(:cleanWater)}"
207
232
  end
208
-
233
+
209
234
  subject do
210
- secure(Node) { nodes(:lake_jpg) }
235
+ secure(Node) { nodes(:status) }
211
236
  end
212
-
237
+
213
238
  should 'raise Invalid record on site rebuild_fullpath' do
214
- assert_raise(Zena::InvalidRecord) { current_site.rebuild_fullpath(subject.parent_id) }
239
+ assert_raise(Zena::InvalidRecord) do
240
+ Zena::Use::Ancestry.rebuild_all_paths(subject)
241
+ end
215
242
  end
216
243
  end # A node in an ancestry loop
217
-
244
+
245
+ context 'Rebuilding paths for site' do
246
+ setup do
247
+ Zena::Db.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL"
248
+ end
249
+
250
+ should 'Rebuild paths for all nodes' do
251
+ login(:lion)
252
+ assert_nil s.fullpath
253
+ assert_nil s.basepath
254
+ current_site.rebuild_fullpath(nil, 1)
255
+ s = nodes(:status)
256
+ assert_equal '11/18/21/22', s.fullpath
257
+ assert_equal '18/21', s.basepath
258
+ end
259
+ end
218
260
 
219
261
  private
220
262
  def fullpath(*args)
@@ -36,6 +36,36 @@ class PropEvalTest < Zena::Unit::TestCase
36
36
  end
37
37
  end # with valid code
38
38
 
39
+ context 'with valid code creating empty title' do
40
+ setup do
41
+ assert subject.update_attributes(:prop_eval => %q[{'title' => ''}])
42
+ end
43
+
44
+ should 'save class name as title' do
45
+ letter = secure(Node) { nodes(:letter) }
46
+ assert_equal 'zena enhancements', nodes(:letter).title
47
+ letter.rebuild_index!
48
+ assert_equal 'Letter', nodes(:letter).title
49
+ assert letter.update_attributes(:date => Time.now)
50
+ assert_equal 'Letter', nodes(:letter).title
51
+ end
52
+ end # with valid code
53
+
54
+ context 'with valid code creating nil title' do
55
+ setup do
56
+ assert subject.update_attributes(:prop_eval => %q[{'title' => nil}])
57
+ end
58
+
59
+ should 'save class name as title' do
60
+ letter = secure(Node) { nodes(:letter) }
61
+ assert_equal 'zena enhancements', nodes(:letter).title
62
+ letter.rebuild_index!
63
+ assert_equal 'Letter', nodes(:letter).title
64
+ assert letter.update_attributes(:date => Time.now)
65
+ assert_equal 'Letter', nodes(:letter).title
66
+ end
67
+ end # with valid code
68
+
39
69
  context 'with valid code using vclass methods' do
40
70
  subject do
41
71
  secure(VirtualClass) { virtual_classes(:Post) }
@@ -168,6 +198,20 @@ class PropEvalTest < Zena::Unit::TestCase
168
198
  assert_equal 'LAST:Invicta FIRST:Solenopsis', idx_ml_value(subject.id, 'title')
169
199
  assert_equal 'LAST:Invicta FIRST:Solenopsis', nodes(:ant).title
170
200
  end
201
+
202
+ context 'with a rule yielding blank title' do
203
+ setup do
204
+ v = VirtualClass['Letter']
205
+ v.update_attributes(:prop_eval => %q[{'title' => ''}])
206
+ end
207
+
208
+ should 'use class name for title' do
209
+ l = secure(Node) { nodes(:letter) }
210
+ l.rebuild_index!
211
+ l = secure(Node) { nodes(:letter) }
212
+ assert_equal 'Letter', l.title
213
+ end
214
+ end
171
215
  end # rebuilding index
172
216
 
173
217
  end # from a class with evaluated properties
@@ -22,7 +22,53 @@ class RenderingTest < Zena::View::TestCase
22
22
  assert File.exist?(fullpath)
23
23
  FileUtils.rm(fullpath)
24
24
  end
25
+
26
+ should 'build template partial on template_path_from_template_url' do
27
+ fullpath = fullpath_from_template_url('Default skin/Node/pages', false)
28
+ main_path = fullpath_from_template_url('Default skin/Node/_main', false)
29
+ FileUtils.rm(fullpath) if File.exist?(fullpath)
30
+ FileUtils.rm(main_path) if File.exist?(main_path)
31
+ assert_equal '/test.host/zafu/Default skin/Node/en/pages.erb', template_path_from_template_url('', 'Default skin/Node/pages', true)
32
+ assert File.exist?(main_path)
33
+ assert File.exist?(fullpath)
34
+ FileUtils.rm(fullpath)
35
+ end
36
+
37
+ context 'with an alias site' do
38
+ setup do
39
+ setup_visitor(visitor, Site.find_by_host('alias.host'))
40
+ end
41
+
42
+ should 'build template on template_path_from_template_url' do
43
+ fullpath = fullpath_from_template_url('wiki skin/Page-changes/_main', false)
44
+ if File.exist?(fullpath)
45
+ FileUtils.rm(fullpath)
46
+ end
47
+ assert_equal '/test.host/zafu/wiki skin/Page-changes/en/foo.erb', template_path_from_template_url('', 'wiki skin/Page-changes/foo', true)
48
+ assert File.exist?(fullpath)
49
+ FileUtils.rm(fullpath)
50
+ end
25
51
 
52
+ should 'build template partial on template_path_from_template_url' do
53
+ fullpath = fullpath_from_template_url('Default skin/Node/pages', false)
54
+ main_path = fullpath_from_template_url('Default skin/Node/_main', false)
55
+ FileUtils.rm(fullpath) if File.exist?(fullpath)
56
+ FileUtils.rm(main_path) if File.exist?(main_path)
57
+ assert_equal '/test.host/zafu/Default skin/Node/en/pages.erb', template_path_from_template_url('', 'Default skin/Node/pages', true)
58
+ assert File.exist?(main_path)
59
+ assert File.exist?(fullpath)
60
+ FileUtils.rm(fullpath)
61
+ end
62
+
63
+ should 'find site alias on visitor site' do
64
+ assert_equal 'alias.host', visitor.site.host
65
+ end
66
+
67
+ should 'find forced skin on any node' do
68
+ assert_equal 'wiki skin', visitor.get_skin(nodes(:zena)).title
69
+ end
70
+ end
71
+
26
72
  should 'return a fullpath on fullpath_from_template_url' do
27
73
  assert_equal "#{SITES_ROOT}/test.host/zafu/SKIN/TEMPLATE/en/DOM_ID.erb", fullpath_from_template_url('SKIN/TEMPLATE/DOM_ID', false)
28
74
  end
@@ -168,7 +214,7 @@ class RenderingControllerTest < Zena::Controller::TestCase
168
214
  :t_url => 'Default skin/Node-ins/foo',
169
215
  :dom_id => 'foo',
170
216
  }
171
- assert_equal %Q{Element.replace(\"foo\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n}, @response.body
217
+ assert_equal %Q{if (Zena.stampOk('foo', 0)) {\nElement.replace(\"foo\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n\n}}, @response.body
172
218
  end
173
219
 
174
220
  context 'with insert' do
@@ -179,7 +225,7 @@ class RenderingControllerTest < Zena::Controller::TestCase
179
225
  :dom_id => 'foo',
180
226
  :insert => 'bottom',
181
227
  }
182
- assert_equal %Q{Zena.insert_inner(\"foo\", \"bottom\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n}, @response.body
228
+ assert_equal %Q{if (Zena.stampOk('foo', 0)) {\nZena.insert_inner(\"foo\", \"bottom\", \"\\u003Cdiv id='foo' data-z='12'\\u003Ehello people\\u003C/div\\u003E\");\n\n}}, @response.body
183
229
  end
184
230
  end # with insert
185
231
  end # to update