zen 0.3 → 0.4

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 (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -1,7 +1,7 @@
1
1
  require File.expand_path('../../../../helper', __FILE__)
2
2
 
3
- describe('Settings::Setting') do
4
- it('Register a settings group') do
3
+ describe 'Settings::Setting' do
4
+ it 'Register a settings group' do
5
5
  Settings::SettingsGroup.add do |group|
6
6
  group.name = 'general_spec'
7
7
  group.title = 'General Spec'
@@ -13,7 +13,7 @@ describe('Settings::Setting') do
13
13
  .title.should == 'General Spec'
14
14
  end
15
15
 
16
- it('Register an already existing settings group') do
16
+ it 'Register an already existing settings group' do
17
17
  should.raise?(Zen::ValidationError) do
18
18
  Settings::SettingsGroup.add do |group|
19
19
  group.name = 'general_spec'
@@ -22,7 +22,7 @@ describe('Settings::Setting') do
22
22
  end
23
23
  end
24
24
 
25
- it('Register a setting with an invalid type') do
25
+ it 'Register a setting with an invalid type' do
26
26
  should.raise?(Zen::ValidationError) do
27
27
  Settings::Setting.add do |setting|
28
28
  setting.name = 'invalid'
@@ -33,7 +33,7 @@ describe('Settings::Setting') do
33
33
  end
34
34
  end
35
35
 
36
- it('Register a setting with an invalid group') do
36
+ it 'Register a setting with an invalid group' do
37
37
  should.raise?(Zen::ValidationError) do
38
38
  Settings::Setting.add do |setting|
39
39
  setting.name = 'invalid'
@@ -44,7 +44,7 @@ describe('Settings::Setting') do
44
44
  end
45
45
  end
46
46
 
47
- it('Register two settings') do
47
+ it 'Register two settings' do
48
48
  Settings::Setting.add do |setting|
49
49
  setting.name = 'spec'
50
50
  setting.title = 'Spec'
@@ -65,7 +65,7 @@ describe('Settings::Setting') do
65
65
  Settings::Setting::REGISTERED.key?(:spec_textbox).should == true
66
66
  end
67
67
 
68
- it('Register an already existing setting') do
68
+ it 'Register an already existing setting' do
69
69
  should.raise?(Zen::ValidationError) do
70
70
  Settings::Setting.add do |setting|
71
71
  setting.name = 'spec'
@@ -76,13 +76,13 @@ describe('Settings::Setting') do
76
76
  end
77
77
  end
78
78
 
79
- it('Retrieve a non existing setting') do
79
+ it 'Retrieve a non existing setting' do
80
80
  should.raise?(ArgumentError) do
81
81
  get_setting('invalid')
82
82
  end
83
83
  end
84
84
 
85
- it('Retrieve a setting') do
85
+ it 'Retrieve a setting' do
86
86
  setting = get_setting('spec')
87
87
 
88
88
  setting.title.should == 'Spec'
@@ -91,14 +91,14 @@ describe('Settings::Setting') do
91
91
  setting.description.should == 'An example of a setting with a select box.'
92
92
  end
93
93
 
94
- it('Migrate all settings') do
94
+ it 'Migrate all settings' do
95
95
  Settings::Setting.migrate
96
96
 
97
97
  Settings::Model::Setting[:name => 'spec'].nil?.should == false
98
98
  Settings::Model::Setting[:name => 'spec_textbox'].nil?.should == false
99
99
  end
100
100
 
101
- it('Update a setting') do
101
+ it 'Update a setting' do
102
102
  Ramaze.setup_dependencies
103
103
 
104
104
  get_setting(:spec).value = 'Setting value'
@@ -109,7 +109,7 @@ describe('Settings::Setting') do
109
109
  == Ramaze::Cache.settings.fetch(:spec)
110
110
  end
111
111
 
112
- it('Remove all settings') do
112
+ it 'Remove all settings' do
113
113
  Settings::Setting.remove('spec')
114
114
  Settings::Setting.remove(['spec_textbox'])
115
115
 
@@ -2,7 +2,7 @@ require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
3
  Zen::Language.load('user_groups')
4
4
 
5
- describe('Users::Controller::UserGroups') do
5
+ describe 'Users::Controller::UserGroups' do
6
6
  behaves_like :capybara
7
7
 
8
8
  index_url = Users::Controller::UserGroups.r(:index).to_s
@@ -10,16 +10,7 @@ describe('Users::Controller::UserGroups') do
10
10
  new_button = lang('user_groups.buttons.new')
11
11
  delete_button = lang('user_groups.buttons.delete')
12
12
 
13
- it('Submit a form without a CSRF token') do
14
- response = page.driver.post(
15
- Users::Controller::UserGroups.r(:save).to_s
16
- )
17
-
18
- response.body.include?(lang('zen_general.errors.csrf')).should == true
19
- response.status.should == 403
20
- end
21
-
22
- it('Find a single user group') do
13
+ it 'Find a single user group' do
23
14
  message = lang('user_groups.messages.no_groups')
24
15
 
25
16
  visit(index_url)
@@ -29,11 +20,23 @@ describe('Users::Controller::UserGroups') do
29
20
  page.all('table tbody tr').count.should == 1
30
21
  end
31
22
 
32
- it('Create a new user group') do
23
+ it 'Try to create a new user group with a missing CSRF token' do
33
24
  visit(index_url)
34
25
  click_link(new_button)
35
26
 
36
- within('#user_group_form') do
27
+ within '#user_group_form' do
28
+ find('input[name="csrf_token"]').set('')
29
+ click_on(save_button)
30
+ end
31
+
32
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
33
+ end
34
+
35
+ it 'Create a new user group' do
36
+ visit(index_url)
37
+ click_link(new_button)
38
+
39
+ within '#user_group_form' do
37
40
  fill_in('name', :with => 'Spec group')
38
41
  choose('form_super_group_0')
39
42
  click_on(save_button)
@@ -43,13 +46,13 @@ describe('Users::Controller::UserGroups') do
43
46
  page.find('#form_super_group_0').checked?.should == 'checked'
44
47
  end
45
48
 
46
- it('Search for a user group') do
49
+ it 'Search for a user group' do
47
50
  search_button = lang('zen_general.buttons.search')
48
51
  error = lang('zen_general.errors.invalid_search')
49
52
 
50
53
  visit(index_url)
51
54
 
52
- within('#search_form') do
55
+ within '#search_form' do
53
56
  fill_in('query', :with => 'Spec group')
54
57
  click_on(search_button)
55
58
  end
@@ -57,7 +60,7 @@ describe('Users::Controller::UserGroups') do
57
60
  page.has_content?(error).should == false
58
61
  page.has_content?('Spec group').should == true
59
62
 
60
- within('#search_form') do
63
+ within '#search_form' do
61
64
  fill_in('query', :with => 'does not exist')
62
65
  click_on(search_button)
63
66
  end
@@ -66,7 +69,7 @@ describe('Users::Controller::UserGroups') do
66
69
  page.has_content?('Spec group').should == false
67
70
  end
68
71
 
69
- it('Edit an existing user group') do
72
+ it 'Edit an existing user group' do
70
73
  group = Users::Model::UserGroup[:name => 'Spec group']
71
74
  path = Users::Controller::UserGroups.r(:edit, group.id).to_s
72
75
 
@@ -75,7 +78,7 @@ describe('Users::Controller::UserGroups') do
75
78
 
76
79
  current_path.should == path
77
80
 
78
- within('#user_group_form') do
81
+ within '#user_group_form' do
79
82
  fill_in('name', :with => 'Spec group modified')
80
83
  check('permission_show_user')
81
84
  click_on(save_button)
@@ -88,11 +91,40 @@ describe('Users::Controller::UserGroups') do
88
91
  page.find('#permission_show_user').checked?.should == 'checked'
89
92
  end
90
93
 
91
- it('Edit an existing user group with invalid data') do
94
+ enable_javascript
95
+
96
+ it 'Automatically save a user group' do
97
+ visit(index_url)
98
+ click_link('Spec group modified')
99
+
100
+ within '#user_group_form' do
101
+ fill_in('name', :with => 'Spec group autosave')
102
+ end
103
+
104
+ autosave_form('user_group_form')
105
+
106
+ visit(index_url)
107
+
108
+ page.has_content?('Spec group autosave')
109
+
110
+ click_link('Spec group autosave')
111
+
112
+ within '#user_group_form' do
113
+ fill_in('name', :with => 'Spec group modified')
114
+ click_on(save_button)
115
+ end
116
+
117
+ page.has_selector?('span.error').should == false
118
+ page.find('input[name="name"]').value.should == 'Spec group modified'
119
+ end
120
+
121
+ disable_javascript
122
+
123
+ it 'Edit an existing user group with invalid data' do
92
124
  visit(index_url)
93
125
  click_link('Spec group')
94
126
 
95
- within('#user_group_form') do
127
+ within '#user_group_form' do
96
128
  fill_in('name', :with => '')
97
129
  click_on(save_button)
98
130
  end
@@ -100,7 +132,7 @@ describe('Users::Controller::UserGroups') do
100
132
  page.has_selector?('label[for="form_name"] span.error').should == true
101
133
  end
102
134
 
103
- it('Delete a group without an ID') do
135
+ it 'Delete a group without an ID' do
104
136
  visit(index_url)
105
137
  click_on(delete_button)
106
138
 
@@ -108,10 +140,10 @@ describe('Users::Controller::UserGroups') do
108
140
  page.all('table tbody tr').count.should == 2
109
141
  end
110
142
 
111
- it('Delete an existing user group') do
143
+ it 'Delete an existing user group' do
112
144
  visit(index_url)
113
145
 
114
- within('table tbody tr:last-child') do
146
+ within 'table tbody tr:last-child' do
115
147
  check('user_group_ids[]')
116
148
  end
117
149
 
@@ -120,7 +152,7 @@ describe('Users::Controller::UserGroups') do
120
152
  page.all('table tbody tr').count.should == 1
121
153
  end
122
154
 
123
- it('Call the event new_user_group (before and after)') do
155
+ it 'Call the event new_user_group (before and after)' do
124
156
  event_name = nil
125
157
 
126
158
  Zen::Event.listen(:before_new_user_group) do |user_group|
@@ -134,7 +166,7 @@ describe('Users::Controller::UserGroups') do
134
166
  visit(index_url)
135
167
  click_on(new_button)
136
168
 
137
- within('#user_group_form') do
169
+ within '#user_group_form' do
138
170
  fill_in('name', :with => 'Group')
139
171
  choose('form_super_group_0')
140
172
  click_on(save_button)
@@ -147,7 +179,7 @@ describe('Users::Controller::UserGroups') do
147
179
  Zen::Event.delete(:before_new_user_group, :after_new_user_group)
148
180
  end
149
181
 
150
- it('Call the event edit_user_group (before and after)') do
182
+ it 'Call the event edit_user_group (before and after)' do
151
183
  event_name = nil
152
184
 
153
185
  Zen::Event.listen(:before_edit_user_group) do |user_group|
@@ -161,7 +193,7 @@ describe('Users::Controller::UserGroups') do
161
193
  visit(index_url)
162
194
  click_on('Group with event')
163
195
 
164
- within('#user_group_form') do
196
+ within '#user_group_form' do
165
197
  click_on(save_button)
166
198
  end
167
199
 
@@ -172,7 +204,7 @@ describe('Users::Controller::UserGroups') do
172
204
  Zen::Event.delete(:before_edit_user_group, :after_edit_user_group)
173
205
  end
174
206
 
175
- it('Call the event delete_user_group (before and after)') do
207
+ it 'Call the event delete_user_group (before and after)' do
176
208
  event_name = nil
177
209
  event_name2 = nil
178
210
 
@@ -186,7 +218,7 @@ describe('Users::Controller::UserGroups') do
186
218
 
187
219
  visit(index_url)
188
220
 
189
- within('table tbody tr:last-child') do
221
+ within 'table tbody tr:last-child' do
190
222
  check('user_group_ids[]')
191
223
  end
192
224
 
@@ -1,26 +1,17 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe("Users::Controller::Users") do
3
+ describe "Users::Controller::Users" do
4
4
  behaves_like :capybara
5
5
 
6
6
  login_url = Users::Controller::Users.r(:login).to_s
7
- dashboard_url = Sections::Controller::Sections.r(:index).to_s
7
+ dashboard_url = Dashboard::Controller::Dashboard.r(:index).to_s
8
8
  index_url = Users::Controller::Users.r(:index).to_s
9
9
  save_button = lang('users.buttons.save')
10
10
  new_button = lang('users.buttons.new')
11
11
  delete_button = lang('users.buttons.delete')
12
12
  status = lang('users.special.status_hash.active')
13
13
 
14
- it('Submit a form without a CSRF token') do
15
- response = page.driver.post(
16
- Users::Controller::Users.r(:save).to_s
17
- )
18
-
19
- response.body.include?(lang('zen_general.errors.csrf')).should == true
20
- response.status.should == 403
21
- end
22
-
23
- it('Show the login form') do
14
+ it 'Show the login form' do
24
15
  visit(login_url)
25
16
 
26
17
  page.has_selector?('#login_form').should == true
@@ -29,7 +20,7 @@ describe("Users::Controller::Users") do
29
20
  page.has_content?('Password').should == true
30
21
  end
31
22
 
32
- it('Log in') do
23
+ it 'Log in' do
33
24
  event_email = nil
34
25
 
35
26
  Zen::Event.listen(:user_login) do |user|
@@ -38,7 +29,7 @@ describe("Users::Controller::Users") do
38
29
 
39
30
  visit(login_url)
40
31
 
41
- within('#login_form') do
32
+ within '#login_form' do
42
33
  fill_in 'Email' , :with => 'spec@domain.tld'
43
34
  fill_in 'Password', :with => 'spec'
44
35
  click_button 'Login'
@@ -48,7 +39,7 @@ describe("Users::Controller::Users") do
48
39
  event_email.should == 'spec@domain.tld'
49
40
  end
50
41
 
51
- it('Find an existing user') do
42
+ it 'Find an existing user' do
52
43
  message = lang('users.messages.no_users')
53
44
 
54
45
  visit(index_url)
@@ -57,11 +48,23 @@ describe("Users::Controller::Users") do
57
48
  page.has_content?(message).should == false
58
49
  end
59
50
 
60
- it("Create a new user") do
51
+ it 'Try to create a new user with a missing CSRF token' do
52
+ visit(index_url)
53
+ click_link(new_button)
54
+
55
+ within '#user_form' do
56
+ find('input[name="csrf_token"]').set('')
57
+ click_on(save_button)
58
+ end
59
+
60
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
61
+ end
62
+
63
+ it "Create a new user" do
61
64
  visit(index_url)
62
65
  click_link(new_button)
63
66
 
64
- within('#user_form') do
67
+ within '#user_form' do
65
68
  fill_in('name' , :with => 'Spec user')
66
69
  fill_in('email' , :with => 'spec@email.com')
67
70
  fill_in('website', :with => 'spec.com')
@@ -77,13 +80,13 @@ describe("Users::Controller::Users") do
77
80
  page.find('input[name="email"]').value.should == 'spec@email.com'
78
81
  end
79
82
 
80
- it('Search for a user') do
83
+ it 'Search for a user' do
81
84
  search_button = lang('zen_general.buttons.search')
82
85
  error = lang('zen_general.errors.invalid_search')
83
86
 
84
87
  visit(index_url)
85
88
 
86
- within('#search_form') do
89
+ within '#search_form' do
87
90
  fill_in('query', :with => 'Spec user')
88
91
  click_on(search_button)
89
92
  end
@@ -91,7 +94,7 @@ describe("Users::Controller::Users") do
91
94
  page.has_content?(error).should == false
92
95
  page.has_content?('Spec user').should == true
93
96
 
94
- within('#search_form') do
97
+ within '#search_form' do
95
98
  fill_in('query', :with => 'does not exist')
96
99
  click_on(search_button)
97
100
  end
@@ -100,25 +103,61 @@ describe("Users::Controller::Users") do
100
103
  page.has_content?('Spec user').should == false
101
104
  end
102
105
 
103
- it("Edit an existing user") do
106
+ it "Edit an existing user" do
104
107
  visit(index_url)
105
108
  click_link('Spec user')
106
109
 
107
- within('#user_form') do
110
+ within '#user_form' do
108
111
  fill_in('name', :with => 'Spec user modified')
109
112
  check('permission_show_user')
113
+ check('form_user_group_pks_0')
114
+ click_on(save_button)
115
+ end
116
+
117
+ page.find('#permission_show_user').checked?.should == 'checked'
118
+ page.find('#form_user_group_pks_0').checked?.should == 'checked'
119
+ page.find_field('name').value.should == 'Spec user modified'
120
+
121
+ user = Users::Model::User[:email => 'spec@email.com']
122
+ group = Users::Model::UserGroup[:slug => 'administrators']
123
+
124
+ user.user_group_pks.include?(group.id).should == true
125
+ end
126
+
127
+ enable_javascript
128
+
129
+ it 'Automatically save a user' do
130
+ visit(index_url)
131
+ click_link('Spec user modified')
132
+
133
+ within '#user_form' do
134
+ fill_in('name', :with => 'Spec user autosave')
135
+ end
136
+
137
+ autosave_form('user_form')
138
+
139
+ visit(index_url)
140
+
141
+ page.has_content?('Spec user autosave').should == true
142
+
143
+ click_link('Spec user autosave')
144
+
145
+ within '#user_form' do
146
+ fill_in('name', :with => 'Spec user modified')
110
147
  click_on(save_button)
111
148
  end
112
149
 
113
- page.find('#permission_show_user').checked?.should == 'checked'
114
- page.find_field('name').value.should == 'Spec user modified'
150
+ page.has_selector?('span.error').should == false
151
+ page.find('input[name="name"]').value.should == 'Spec user modified'
115
152
  end
116
153
 
117
- it('Remove a permission from a user') do
154
+ disable_javascript
155
+
156
+ it 'Remove a permission from a user' do
118
157
  visit(index_url)
119
158
  click_link('Spec user')
120
159
 
121
- within('#user_form') do
160
+ within '#user_form' do
122
161
  uncheck('permission_show_user')
123
162
  click_on(save_button)
124
163
  end
@@ -126,11 +165,11 @@ describe("Users::Controller::Users") do
126
165
  page.find('#permission_show_user').checked?.should != 'checked'
127
166
  end
128
167
 
129
- it("Edit an existing user with invalid data") do
168
+ it "Edit an existing user with invalid data" do
130
169
  visit(index_url)
131
170
  click_link('Spec user')
132
171
 
133
- within('#user_form') do
172
+ within '#user_form' do
134
173
  fill_in('form_name', :with => '')
135
174
  click_on(save_button)
136
175
  end
@@ -139,17 +178,17 @@ describe("Users::Controller::Users") do
139
178
  page.has_selector?('label[for="form_name"] span.error').should == true
140
179
  end
141
180
 
142
- it("Delete an existing user without specifying an ID") do
181
+ it "Delete an existing user without specifying an ID" do
143
182
  visit(index_url)
144
183
  click_on(delete_button)
145
184
 
146
185
  page.has_selector?('input[name="user_ids[]"]').should == true
147
186
  end
148
187
 
149
- it("Delete an existing user") do
188
+ it "Delete an existing user" do
150
189
  visit(index_url)
151
190
 
152
- within('table tbody tr:last-child') do
191
+ within 'table tbody tr:last-child' do
153
192
  check('user_ids[]')
154
193
  end
155
194
 
@@ -158,7 +197,7 @@ describe("Users::Controller::Users") do
158
197
  page.has_content?('spec@email.com').should == false
159
198
  end
160
199
 
161
- it('Call the event new_user (before and after)') do
200
+ it 'Call the event new_user (before and after)' do
162
201
  event_name = nil
163
202
 
164
203
  Zen::Event.listen(:before_new_user) do |user|
@@ -172,7 +211,7 @@ describe("Users::Controller::Users") do
172
211
  visit(index_url)
173
212
  click_on(new_button)
174
213
 
175
- within('#user_form') do
214
+ within '#user_form' do
176
215
  fill_in('name' , :with => 'User')
177
216
  fill_in('email' , :with => 'spec@email.com')
178
217
  fill_in('website', :with => 'spec.com')
@@ -189,7 +228,7 @@ describe("Users::Controller::Users") do
189
228
  Zen::Event.delete(:before_new_user, :after_new_user)
190
229
  end
191
230
 
192
- it('Call the event edit_user (before and after)') do
231
+ it 'Call the event edit_user (before and after)' do
193
232
  event_name = nil
194
233
 
195
234
  Zen::Event.listen(:before_edit_user) do |user|
@@ -203,7 +242,7 @@ describe("Users::Controller::Users") do
203
242
  visit(index_url)
204
243
  click_on('User with event')
205
244
 
206
- within('#user_form') do
245
+ within '#user_form' do
207
246
  click_on(save_button)
208
247
  end
209
248
 
@@ -214,7 +253,7 @@ describe("Users::Controller::Users") do
214
253
  Zen::Event.delete(:before_edit_user, :after_edit_user)
215
254
  end
216
255
 
217
- it('Call the event delete_user (before and after)') do
256
+ it 'Call the event delete_user (before and after)' do
218
257
  event_name = nil
219
258
  event_name2 = nil
220
259
 
@@ -228,7 +267,7 @@ describe("Users::Controller::Users") do
228
267
 
229
268
  visit(index_url)
230
269
 
231
- within('table tbody tr:last-child') do
270
+ within 'table tbody tr:last-child' do
232
271
  check('user_ids[]')
233
272
  end
234
273
 
@@ -241,7 +280,7 @@ describe("Users::Controller::Users") do
241
280
  Zen::Event.delete(:before_delete_user, :after_delete_user)
242
281
  end
243
282
 
244
- it('Register a new user') do
283
+ it 'Register a new user' do
245
284
  get_setting(:allow_registration).value = '1'
246
285
 
247
286
  logout_path = Users::Controller::Users.r(:logout).to_s
@@ -253,7 +292,7 @@ describe("Users::Controller::Users") do
253
292
 
254
293
  current_path.should == register_path
255
294
 
256
- within('#register_form') do
295
+ within '#register_form' do
257
296
  fill_in('name', :with => 'New user')
258
297
  fill_in('email', :with => 'test@test.com')
259
298
  fill_in('password', :with => 'abc')
@@ -270,6 +309,46 @@ describe("Users::Controller::Users") do
270
309
  user.user_status.name.should == 'closed'
271
310
  end
272
311
 
312
+ it 'Allow users to edit their own account' do
313
+ user = Users::Model::User[:email => 'test@test.com']
314
+ edit_url = Users::Controller::Users.r(:edit, user.id).to_s
315
+ logout_url = Users::Controller::Users.r(:logout).to_s
316
+
317
+ user.activate!
318
+
319
+ visit(logout_url)
320
+ visit(Users::Controller::Users.r(:login).to_s)
321
+
322
+ # Log in as the user created in the previous tests.
323
+ within '#login_form' do
324
+ fill_in('Email', :with => 'test@test.com')
325
+ fill_in('Password', :with => 'abc')
326
+ click_button('Login')
327
+ end
328
+
329
+ visit(edit_url)
330
+
331
+ current_path.should == edit_url
332
+
333
+ within '#user_form' do
334
+ fill_in('name', :with => 'Modified user')
335
+ click_on(save_button)
336
+ end
337
+
338
+ user.reload
339
+
340
+ current_path.should == edit_url
341
+ page.has_selector?('span.error').should == false
342
+ page.has_selector?('select[name="user_status_id"]').should == false
343
+ page.has_selector?('input[name="user_group_pks[]"]').should == false
344
+
345
+ page.find('input[name="name"]').value.should == 'Modified user'
346
+ user.name.should == 'Modified user'
347
+ user.user_group_pks.empty?.should == true
348
+
349
+ visit(logout_url)
350
+ end
351
+
273
352
  capybara_login
274
353
  Users::Model::User[:email => 'test@test.com'].destroy
275
354
  end