adva_cms 0.0.1

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 (551) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/NOTES +132 -0
  6. data/README.md +29 -0
  7. data/Rakefile +2 -0
  8. data/adva_cms.gemspec +22 -0
  9. data/app/assets/images/adva_cms/admin/header_bg.png +0 -0
  10. data/app/assets/images/adva_cms/admin/section_menu_bg.png +0 -0
  11. data/app/assets/images/adva_cms/admin/tab_action_active.png +0 -0
  12. data/app/assets/images/adva_cms/admin/tab_main_active.png +0 -0
  13. data/app/assets/images/adva_cms/admin/tab_sidebar_active.png +0 -0
  14. data/app/assets/images/adva_cms/admin/tab_top_active.png +0 -0
  15. data/app/assets/images/adva_cms/asset_selected.png +0 -0
  16. data/app/assets/images/adva_cms/avatar.gif +0 -0
  17. data/app/assets/images/adva_cms/filter-bg.png +0 -0
  18. data/app/assets/images/adva_cms/icons/accept.png +0 -0
  19. data/app/assets/images/adva_cms/icons/add.png +0 -0
  20. data/app/assets/images/adva_cms/icons/arrow_cross.png +0 -0
  21. data/app/assets/images/adva_cms/icons/arrow_cross_2.png +0 -0
  22. data/app/assets/images/adva_cms/icons/arrow_cross_3.png +0 -0
  23. data/app/assets/images/adva_cms/icons/arrow_up_down.png +0 -0
  24. data/app/assets/images/adva_cms/icons/assets/audio.png +0 -0
  25. data/app/assets/images/adva_cms/icons/assets/doc.png +0 -0
  26. data/app/assets/images/adva_cms/icons/assets/pdf.png +0 -0
  27. data/app/assets/images/adva_cms/icons/assets/video.png +0 -0
  28. data/app/assets/images/adva_cms/icons/attach.png +0 -0
  29. data/app/assets/images/adva_cms/icons/bin.png +0 -0
  30. data/app/assets/images/adva_cms/icons/bin_closed.png +0 -0
  31. data/app/assets/images/adva_cms/icons/bin_empty.png +0 -0
  32. data/app/assets/images/adva_cms/icons/bullet_black.png +0 -0
  33. data/app/assets/images/adva_cms/icons/bullet_delete.png +0 -0
  34. data/app/assets/images/adva_cms/icons/bullet_error.png +0 -0
  35. data/app/assets/images/adva_cms/icons/bullet_go.png +0 -0
  36. data/app/assets/images/adva_cms/icons/bullet_red.png +0 -0
  37. data/app/assets/images/adva_cms/icons/bullet_white.png +0 -0
  38. data/app/assets/images/adva_cms/icons/bullet_yellow.png +0 -0
  39. data/app/assets/images/adva_cms/icons/cancel.png +0 -0
  40. data/app/assets/images/adva_cms/icons/comment.gif +0 -0
  41. data/app/assets/images/adva_cms/icons/comment.png +0 -0
  42. data/app/assets/images/adva_cms/icons/comment_add.png +0 -0
  43. data/app/assets/images/adva_cms/icons/comment_blue.gif +0 -0
  44. data/app/assets/images/adva_cms/icons/comment_delete.png +0 -0
  45. data/app/assets/images/adva_cms/icons/comment_edit.png +0 -0
  46. data/app/assets/images/adva_cms/icons/comment_yellow.gif +0 -0
  47. data/app/assets/images/adva_cms/icons/cross.png +0 -0
  48. data/app/assets/images/adva_cms/icons/delete.png +0 -0
  49. data/app/assets/images/adva_cms/icons/eye.png +0 -0
  50. data/app/assets/images/adva_cms/icons/favorites.png +0 -0
  51. data/app/assets/images/adva_cms/icons/help.png +0 -0
  52. data/app/assets/images/adva_cms/icons/hourglass.png +0 -0
  53. data/app/assets/images/adva_cms/icons/icon_attachment.gif +0 -0
  54. data/app/assets/images/adva_cms/icons/icon_padlock.gif +0 -0
  55. data/app/assets/images/adva_cms/icons/link.png +0 -0
  56. data/app/assets/images/adva_cms/icons/lock.png +0 -0
  57. data/app/assets/images/adva_cms/icons/magnifier.png +0 -0
  58. data/app/assets/images/adva_cms/icons/minus.gif +0 -0
  59. data/app/assets/images/adva_cms/icons/page_add.png +0 -0
  60. data/app/assets/images/adva_cms/icons/page_delete.png +0 -0
  61. data/app/assets/images/adva_cms/icons/page_edit.png +0 -0
  62. data/app/assets/images/adva_cms/icons/page_favorites.png +0 -0
  63. data/app/assets/images/adva_cms/icons/page_go.png +0 -0
  64. data/app/assets/images/adva_cms/icons/page_green.png +0 -0
  65. data/app/assets/images/adva_cms/icons/page_red.png +0 -0
  66. data/app/assets/images/adva_cms/icons/page_white_add.png +0 -0
  67. data/app/assets/images/adva_cms/icons/page_white_delete.png +0 -0
  68. data/app/assets/images/adva_cms/icons/page_white_edit.png +0 -0
  69. data/app/assets/images/adva_cms/icons/page_white_go.png +0 -0
  70. data/app/assets/images/adva_cms/icons/page_white_link.png +0 -0
  71. data/app/assets/images/adva_cms/icons/page_white_magnify.png +0 -0
  72. data/app/assets/images/adva_cms/icons/pencil.png +0 -0
  73. data/app/assets/images/adva_cms/icons/star.png +0 -0
  74. data/app/assets/images/adva_cms/icons/stop.png +0 -0
  75. data/app/assets/images/adva_cms/icons/tag_green.png +0 -0
  76. data/app/assets/images/adva_cms/icons/tick.png +0 -0
  77. data/app/assets/images/adva_cms/icons/zoom.png +0 -0
  78. data/app/assets/images/adva_cms/indicator.gif +0 -0
  79. data/app/assets/images/adva_cms/preview.png +0 -0
  80. data/app/assets/images/adva_cms/rails.png +0 -0
  81. data/app/assets/images/adva_cms/sortable_tree/drag.png +0 -0
  82. data/app/assets/images/adva_cms/theme_selected.png +0 -0
  83. data/app/assets/javascripts/admin.js +1 -0
  84. data/app/assets/javascripts/adva_cms/admin/jquery.admin.js +23 -0
  85. data/app/assets/javascripts/adva_cms/admin/jquery.article.js +22 -0
  86. data/app/assets/javascripts/adva_cms/admin/jquery.cached_pages.js +14 -0
  87. data/app/assets/javascripts/adva_cms/admin/jquery.table_tree.js +7 -0
  88. data/app/assets/javascripts/adva_cms/application.js +14 -0
  89. data/app/assets/javascripts/adva_cms/base.js +4 -0
  90. data/app/assets/javascripts/adva_cms/cookie.js +49 -0
  91. data/app/assets/javascripts/adva_cms/jquery.common.js +41 -0
  92. data/app/assets/javascripts/adva_cms/jquery.dates.js +51 -0
  93. data/app/assets/javascripts/adva_cms/jquery.flash.js +57 -0
  94. data/app/assets/javascripts/adva_cms/jquery.roles.js +25 -0
  95. data/app/assets/javascripts/adva_cms/jquery/jquery-lowpro.js +224 -0
  96. data/app/assets/javascripts/adva_cms/jquery/jquery.qtip.js +2085 -0
  97. data/app/assets/javascripts/adva_cms/jquery/jquery.table_tree.js +307 -0
  98. data/app/assets/javascripts/adva_cms/jquery/jquery.tablednd_0_5.js +386 -0
  99. data/app/assets/javascripts/adva_cms/json.js +139 -0
  100. data/app/assets/stylesheets/admin.css +1 -0
  101. data/app/assets/stylesheets/adva_cms/admin.css +16 -0
  102. data/app/assets/stylesheets/adva_cms/admin/alternate/common.css +76 -0
  103. data/app/assets/stylesheets/adva_cms/admin/alternate/forms.css +121 -0
  104. data/app/assets/stylesheets/adva_cms/admin/alternate/header.css +125 -0
  105. data/app/assets/stylesheets/adva_cms/admin/alternate/layout.css +103 -0
  106. data/app/assets/stylesheets/adva_cms/admin/alternate/lists.css +153 -0
  107. data/app/assets/stylesheets/adva_cms/admin/alternate/sidebar.css +65 -0
  108. data/app/assets/stylesheets/adva_cms/admin/alternate/top.css +123 -0
  109. data/app/assets/stylesheets/adva_cms/admin/common.css +76 -0
  110. data/app/assets/stylesheets/adva_cms/admin/content.css +11 -0
  111. data/app/assets/stylesheets/adva_cms/admin/forms.css +116 -0
  112. data/app/assets/stylesheets/adva_cms/admin/header.css +114 -0
  113. data/app/assets/stylesheets/adva_cms/admin/helptip.css +35 -0
  114. data/app/assets/stylesheets/adva_cms/admin/layout.css +56 -0
  115. data/app/assets/stylesheets/adva_cms/admin/lists.css +152 -0
  116. data/app/assets/stylesheets/adva_cms/admin/projection.css +118 -0
  117. data/app/assets/stylesheets/adva_cms/admin/reset.css +25 -0
  118. data/app/assets/stylesheets/adva_cms/admin/screen/top.css +8 -0
  119. data/app/assets/stylesheets/adva_cms/admin/sidebar.css +67 -0
  120. data/app/assets/stylesheets/adva_cms/admin/themes.css +49 -0
  121. data/app/assets/stylesheets/adva_cms/admin/top.css +83 -0
  122. data/app/assets/stylesheets/adva_cms/admin/users.css +40 -0
  123. data/app/assets/stylesheets/adva_cms/common.css +49 -0
  124. data/app/assets/stylesheets/adva_cms/default.css +201 -0
  125. data/app/assets/stylesheets/adva_cms/forms.css +60 -0
  126. data/app/assets/stylesheets/adva_cms/jquery/alternate/jquery.tooltip.css +13 -0
  127. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  128. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  129. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  130. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  131. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  132. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  133. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  134. data/app/assets/stylesheets/adva_cms/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  135. data/app/assets/stylesheets/adva_cms/jquery/images/ui-icons_222222_256x240.png +0 -0
  136. data/app/assets/stylesheets/adva_cms/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  137. data/app/assets/stylesheets/adva_cms/jquery/images/ui-icons_454545_256x240.png +0 -0
  138. data/app/assets/stylesheets/adva_cms/jquery/images/ui-icons_888888_256x240.png +0 -0
  139. data/app/assets/stylesheets/adva_cms/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  140. data/app/assets/stylesheets/adva_cms/jquery/jquery-ui.css +406 -0
  141. data/app/assets/stylesheets/adva_cms/jquery/jquery.tooltip.css +10 -0
  142. data/app/assets/stylesheets/adva_cms/layout/login.css +8 -0
  143. data/app/assets/stylesheets/adva_cms/layout/simple.css +8 -0
  144. data/app/assets/stylesheets/adva_cms/menu.css +129 -0
  145. data/app/assets/stylesheets/adva_cms/reset.css +25 -0
  146. data/app/controllers/admin/base_controller.rb +101 -0
  147. data/app/controllers/admin/categories_controller.rb +3 -0
  148. data/app/controllers/admin/install_controller.rb +61 -0
  149. data/app/controllers/admin/page/articles_controller.rb +150 -0
  150. data/app/controllers/admin/page/categories_controller.rb +62 -0
  151. data/app/controllers/admin/page/contents_controller.rb +52 -0
  152. data/app/controllers/admin/page/links_controller.rb +69 -0
  153. data/app/controllers/admin/pages_controller.rb +2 -0
  154. data/app/controllers/admin/plugins_controller.rb +40 -0
  155. data/app/controllers/admin/sections_controller.rb +91 -0
  156. data/app/controllers/admin/sites_controller.rb +99 -0
  157. data/app/controllers/articles_controller.rb +81 -0
  158. data/app/controllers/base_controller.rb +82 -0
  159. data/app/helpers/admin/base_helper.rb +106 -0
  160. data/app/helpers/base_helper.rb +56 -0
  161. data/app/helpers/content_helper.rb +90 -0
  162. data/app/helpers/resource_helper.rb +127 -0
  163. data/app/models/article.rb +40 -0
  164. data/app/models/categorization.rb +4 -0
  165. data/app/models/category.rb +60 -0
  166. data/app/models/content.rb +155 -0
  167. data/app/models/event.rb +34 -0
  168. data/app/models/link.rb +4 -0
  169. data/app/models/page.rb +36 -0
  170. data/app/models/section.rb +126 -0
  171. data/app/models/site.rb +104 -0
  172. data/app/views/admin/cached_pages/_filter.html.erb +8 -0
  173. data/app/views/admin/cached_pages/destroy.js.erb +18 -0
  174. data/app/views/admin/cached_pages/index.html.erb +26 -0
  175. data/app/views/admin/install/confirmation.html.erb +10 -0
  176. data/app/views/admin/install/index.html.erb +38 -0
  177. data/app/views/admin/page/articles/_form.html.erb +40 -0
  178. data/app/views/admin/page/articles/_options.html.erb +20 -0
  179. data/app/views/admin/page/articles/edit.html.erb +15 -0
  180. data/app/views/admin/page/articles/new.html.erb +12 -0
  181. data/app/views/admin/page/categories/edit.html.erb +22 -0
  182. data/app/views/admin/page/categories/index.html.erb +23 -0
  183. data/app/views/admin/page/categories/new.html.erb +19 -0
  184. data/app/views/admin/page/contents/index.html.erb +40 -0
  185. data/app/views/admin/page/links/_form.html.erb +26 -0
  186. data/app/views/admin/page/links/_options.html.erb +23 -0
  187. data/app/views/admin/page/links/edit.html.erb +12 -0
  188. data/app/views/admin/page/links/new.html.erb +12 -0
  189. data/app/views/admin/plugins/_form.html.erb +11 -0
  190. data/app/views/admin/plugins/index.html.erb +16 -0
  191. data/app/views/admin/plugins/show.html.erb +43 -0
  192. data/app/views/admin/sections/_form.html.haml +20 -0
  193. data/app/views/admin/sections/edit.html.haml +6 -0
  194. data/app/views/admin/sections/index.html.erb +27 -0
  195. data/app/views/admin/sections/new.html.erb +29 -0
  196. data/app/views/admin/sections/settings/_page.html.haml +10 -0
  197. data/app/views/admin/shared/_header.html.erb +18 -0
  198. data/app/views/admin/shared/_language_select.html.erb +6 -0
  199. data/app/views/admin/shared/_section.html.erb +8 -0
  200. data/app/views/admin/shared/_section_summary.html.erb +23 -0
  201. data/app/views/admin/shared/_section_tree.html.erb +23 -0
  202. data/app/views/admin/sites/_email_notifications.html.erb +9 -0
  203. data/app/views/admin/sites/_form.html.erb +15 -0
  204. data/app/views/admin/sites/_recent_users.html.erb +11 -0
  205. data/app/views/admin/sites/_sections.html.erb +10 -0
  206. data/app/views/admin/sites/_unapproved_comments.html.erb +10 -0
  207. data/app/views/admin/sites/edit.html.erb +4 -0
  208. data/app/views/admin/sites/index.html.erb +21 -0
  209. data/app/views/admin/sites/multi_sites_disabled.html.erb +11 -0
  210. data/app/views/admin/sites/new.html.erb +21 -0
  211. data/app/views/admin/sites/show.html.erb +16 -0
  212. data/app/views/categories/_checkboxes.html.erb +12 -0
  213. data/app/views/layouts/admin.html.haml +50 -0
  214. data/app/views/layouts/default.html.erb +38 -0
  215. data/app/views/layouts/simple.html.erb +22 -0
  216. data/app/views/pages/articles/index.html.erb +10 -0
  217. data/app/views/pages/articles/show.html.erb +17 -0
  218. data/app/views/shared/_flash.html.erb +3 -0
  219. data/app/views/shared/_footer.html.erb +4 -0
  220. data/app/views/shared/_menu.html.erb +10 -0
  221. data/app/views/shared/_sidebar.html.erb +19 -0
  222. data/app/views/shared/messages/insufficient_permissions.html.erb +4 -0
  223. data/config/environment.rb +21 -0
  224. data/config/initializers/has_options.rb +2 -0
  225. data/config/initializers/has_permalink.rb +27 -0
  226. data/config/initializers/mailer.rb +12 -0
  227. data/config/initializers/menus.rb +184 -0
  228. data/config/initializers/roles.rb +91 -0
  229. data/config/initializers/settings.rb +26 -0
  230. data/config/initializers/site.rb +5 -0
  231. data/config/initializers/translations_are_a_pain.rb +9 -0
  232. data/config/locales/en.yml +1295 -0
  233. data/config/routes.rb +47 -0
  234. data/db/migrate/20080401000001_create_sites_table.rb +28 -0
  235. data/db/migrate/20080401000002_create_sections_table.rb +25 -0
  236. data/db/migrate/20080401000003_create_contents_table.rb +35 -0
  237. data/db/migrate/20080401000004_create_categories_table.rb +17 -0
  238. data/db/migrate/20080401000005_create_category_assignments.rb +12 -0
  239. data/db/migrate/20080401000006_create_taggable_tables.rb +26 -0
  240. data/db/migrate/20080710000000_create_plugin_configs.rb +13 -0
  241. data/db/migrate/20080715131051_plugin_owner_column.rb +13 -0
  242. data/db/migrate/20081208161500_add_content_type_to_join_tables.rb +10 -0
  243. data/db/migrate/20090216114034_rename_category_assignment_to_categorization.rb +13 -0
  244. data/db/migrate/20090305123429_move_sections_to_pages.rb +9 -0
  245. data/db/migrate/20090519132700_add_published_at_to_sections.rb +10 -0
  246. data/db/migrate/20090702085459_create_section_translations.rb +9 -0
  247. data/db/migrate/20090702200226_create_category_translations.rb +9 -0
  248. data/db/migrate/20090707171100_upgrade_paperclip_paths.rb +31 -0
  249. data/db/migrate/20090709111934_add_email_notification_to_site.rb +12 -0
  250. data/db/migrate/20091026000906_add_nesting_to_articles.rb +26 -0
  251. data/db/migrate/20140721000000_add_title_to_contents.rb +7 -0
  252. data/lib/adva_cms.rb +50 -0
  253. data/lib/adva_cms/version.rb +3 -0
  254. data/lib/core_ext.rb +7 -0
  255. data/lib/extensible_forms.rb +283 -0
  256. data/lib/has_options.rb +46 -0
  257. data/lib/html_diff.rb +48 -0
  258. data/lib/rails_ext.rb +15 -0
  259. data/lib/rails_ext/action_controller/cacheable_flash.rb +30 -0
  260. data/lib/rails_ext/action_controller/content_for_assignments.rb +105 -0
  261. data/lib/rails_ext/action_controller/default_params.rb +19 -0
  262. data/lib/rails_ext/action_controller/event_helper.rb +18 -0
  263. data/lib/rails_ext/action_controller/page_caching.rb +23 -0
  264. data/lib/rails_ext/action_controller/render_with_error_proc.rb +46 -0
  265. data/lib/rails_ext/action_controller/responds_to_parent.rb +46 -0
  266. data/lib/rails_ext/action_controller/url_for_returning.rb +12 -0
  267. data/lib/rails_ext/active_record/exists.rb +5 -0
  268. data/lib/rails_ext/active_record/sti_instantiation.rb +35 -0
  269. data/lib/rails_ext/active_record/sticky_changes.rb +30 -0
  270. data/lib/rails_ext/railties/plugin.rb +58 -0
  271. data/lib/rails_ext/railties/plugin_configuration.rb +72 -0
  272. data/lib/rails_ext/railties/plugin_initializers.rb +25 -0
  273. data/lib/registry.rb +49 -0
  274. data/lib/tasks/adva_cms.rake +178 -0
  275. data/lib/tasks/translation.rake +69 -0
  276. data/lib/time_hacks.rb +57 -0
  277. data/lib/webrat_patch.rb +11 -0
  278. data/locale/rails/fr.yml +123 -0
  279. data/test/NOTES +56 -0
  280. data/test/contexts.rb +365 -0
  281. data/test/fixtures.rb +190 -0
  282. data/test/fixtures/templates/alternative_templates/index.html.erb +1 -0
  283. data/test/fixtures/templates/context_templates_test/index.html.erb +1 -0
  284. data/test/fixtures/templates/context_templates_test/show.html.erb +0 -0
  285. data/test/fixtures/templates/layouts/alternative.html.erb +0 -0
  286. data/test/fixtures/templates/layouts/default.html.erb +0 -0
  287. data/test/fixtures/templates/menu/shared/_menu.html.erb +8 -0
  288. data/test/functional/admin/articles_controller_test.rb +329 -0
  289. data/test/functional/admin/base_controller_test.rb +68 -0
  290. data/test/functional/admin/cached_pages_controller_test.rb +66 -0
  291. data/test/functional/admin/categories_controller_test.rb +164 -0
  292. data/test/functional/admin/cells_controller_spec.rb +32 -0
  293. data/test/functional/admin/install_controller_test.rb +89 -0
  294. data/test/functional/admin/plugins_controller_test.rb +93 -0
  295. data/test/functional/admin/sections_controller_test.rb +201 -0
  296. data/test/functional/admin/sites_controller_test.rb +240 -0
  297. data/test/functional/asset_tag_expansions_test.rb +82 -0
  298. data/test/functional/base_controller_test.rb +73 -0
  299. data/test/functional/page_articles_controller_test.rb +168 -0
  300. data/test/functional/page_articles_routes_test.rb +73 -0
  301. data/test/integration/admin/cached_pages_test.rb +43 -0
  302. data/test/integration/admin/categories_test.rb +66 -0
  303. data/test/integration/admin/custom_templates_test.rb +42 -0
  304. data/test/integration/admin/filtering_articles_test.rb +32 -0
  305. data/test/integration/admin/plugins.rb +32 -0
  306. data/test/integration/admin/section_article_test.rb +150 -0
  307. data/test/integration/admin/section_test.rb +88 -0
  308. data/test/integration/admin/sites_test.rb +48 -0
  309. data/test/integration/installation_test.rb +109 -0
  310. data/test/integration/page_article_comment_test.rb +51 -0
  311. data/test/integration/page_article_test.rb +87 -0
  312. data/test/integration/section_index_test.rb +37 -0
  313. data/test/javascript/assets/jquery-lowpro.js +224 -0
  314. data/test/javascript/assets/jquery-ui.js +298 -0
  315. data/test/javascript/assets/jquery.js +4376 -0
  316. data/test/javascript/assets/testrunner.js +815 -0
  317. data/test/javascript/assets/testsuite.css +120 -0
  318. data/test/javascript/lib/jstest.rb +588 -0
  319. data/test/javascript/templates/test_case.erb +33 -0
  320. data/test/plugins/adva_context_templates/context_templates_test.rb +138 -0
  321. data/test/plugins/adva_post_ping/controller/integration_test.rb +78 -0
  322. data/test/plugins/adva_post_ping/post_ping_test.rb +94 -0
  323. data/test/plugins/adva_url_history/article_test.rb +94 -0
  324. data/test/plugins/adva_url_history/init_url_history.rb +18 -0
  325. data/test/plugins/adva_url_history/section_test.rb +49 -0
  326. data/test/test_helper.rb +75 -0
  327. data/test/test_helper/clear_directories.rb +16 -0
  328. data/test/test_helper/ensure_single_site_mode.rb +10 -0
  329. data/test/test_helper/extensions/cacheable_flash.rb +14 -0
  330. data/test/test_helper/extensions/cronjob.rb +11 -0
  331. data/test/test_helper/extensions/even_test_log.rb +21 -0
  332. data/test/test_helper/extensions/integration_test.rb +78 -0
  333. data/test/test_helper/extensions/matchy.rb +365 -0
  334. data/test/test_helper/extensions/matchy_adva_cms.rb +441 -0
  335. data/test/test_helper/extensions/rails_patch.rb +40 -0
  336. data/test/test_helper/extensions/rr.rb +7 -0
  337. data/test/test_helper/extensions/test_unit.rb +35 -0
  338. data/test/test_helper/extensions/with_sugar.rb +166 -0
  339. data/test/test_helper/parse_options.rb +18 -0
  340. data/test/test_helper/setup_db_transaction.rb +15 -0
  341. data/test/test_helper/setup_webrat.rb +9 -0
  342. data/test/test_helper/test_server/init.rb +15 -0
  343. data/test/unit/helpers/admin/base_helper_test.rb +139 -0
  344. data/test/unit/helpers/base_helper_spec.rb +54 -0
  345. data/test/unit/helpers/base_helper_test.rb +165 -0
  346. data/test/unit/helpers/content_helper_test.rb +127 -0
  347. data/test/unit/helpers/resource_helper_test.rb +180 -0
  348. data/test/unit/i18n_test.rb +22 -0
  349. data/test/unit/lib/cells_ext_spec.rb +96 -0
  350. data/test/unit/lib/extensible_forms_test.rb +362 -0
  351. data/test/unit/lib/menu_test.rb +119 -0
  352. data/test/unit/lib/rails_ext/content_for_assignments_test.rb +75 -0
  353. data/test/unit/lib/rails_ext/plugin_configuration_test.rb +40 -0
  354. data/test/unit/lib/rails_ext/sticky_changes_test.rb +33 -0
  355. data/test/unit/lib/registry_test.rb +91 -0
  356. data/test/unit/lib/routing_filter/routing_filter_categories_spec.rb +63 -0
  357. data/test/unit/lib/routing_filter/routing_filter_categories_test.rb +159 -0
  358. data/test/unit/lib/routing_filter/routing_filter_locale_spec.rb +73 -0
  359. data/test/unit/lib/routing_filter/routing_filter_root_blog_archive_spec.rb +40 -0
  360. data/test/unit/lib/routing_filter/routing_filter_root_section_articles_spec.rb +48 -0
  361. data/test/unit/lib/routing_filter/routing_filter_root_wikipages_spec.rb +40 -0
  362. data/test/unit/lib/routing_filter/routing_filter_sections_spec.rb +143 -0
  363. data/test/unit/lib/routing_filter/routing_filter_sections_test.rb +32 -0
  364. data/test/unit/lib/routing_filter/routing_filter_sets_test.rb +86 -0
  365. data/test/unit/models/article_test.rb +191 -0
  366. data/test/unit/models/category_test.rb +68 -0
  367. data/test/unit/models/content_test.rb +409 -0
  368. data/test/unit/models/counter_test.rb +43 -0
  369. data/test/unit/models/event_test.rb +41 -0
  370. data/test/unit/models/nested_categories_test.rb +34 -0
  371. data/test/unit/models/page_test.rb +63 -0
  372. data/test/unit/models/section_test.rb +315 -0
  373. data/test/unit/models/site_test.rb +199 -0
  374. data/test/unit/observers/activities_article_observer_test.rb +42 -0
  375. data/vendor/gems/belongs_to_cacheable/.gitignore +17 -0
  376. data/vendor/gems/belongs_to_cacheable/Gemfile +4 -0
  377. data/vendor/gems/belongs_to_cacheable/LICENSE +22 -0
  378. data/vendor/gems/belongs_to_cacheable/README.md +29 -0
  379. data/vendor/gems/belongs_to_cacheable/Rakefile +2 -0
  380. data/vendor/gems/belongs_to_cacheable/belongs_to_cacheable.gemspec +22 -0
  381. data/vendor/gems/belongs_to_cacheable/init.rb +1 -0
  382. data/vendor/gems/belongs_to_cacheable/lib/active_record/belongs_to_cacheable.rb +77 -0
  383. data/vendor/gems/belongs_to_cacheable/lib/belongs_to_cacheable.rb +3 -0
  384. data/vendor/gems/belongs_to_cacheable/lib/belongs_to_cacheable/version.rb +3 -0
  385. data/vendor/gems/belongs_to_cacheable/spec/belongs_to_cacheable_spec.rb +52 -0
  386. data/vendor/gems/belongs_to_cacheable/spec/spec_helper.rb +50 -0
  387. data/vendor/gems/filtered_column/.gitignore +17 -0
  388. data/vendor/gems/filtered_column/Gemfile +4 -0
  389. data/vendor/gems/filtered_column/LICENSE +22 -0
  390. data/vendor/gems/filtered_column/README +4 -0
  391. data/vendor/gems/filtered_column/README.md +29 -0
  392. data/vendor/gems/filtered_column/Rakefile +23 -0
  393. data/vendor/gems/filtered_column/filtered_column.gemspec +17 -0
  394. data/vendor/gems/filtered_column/lib/filtered_column.rb +17 -0
  395. data/vendor/gems/filtered_column/lib/filtered_column/filters/base.rb +28 -0
  396. data/vendor/gems/filtered_column/lib/filtered_column/filters/smartypants_filter.rb +14 -0
  397. data/vendor/gems/filtered_column/lib/filtered_column/filters/textile_filter.rb +13 -0
  398. data/vendor/gems/filtered_column/lib/filtered_column/macros/base.rb +25 -0
  399. data/vendor/gems/filtered_column/lib/filtered_column/mixin.rb +46 -0
  400. data/vendor/gems/filtered_column/lib/filtered_column/processor.rb +52 -0
  401. data/vendor/gems/filtered_column/lib/filtered_column/version.rb +3 -0
  402. data/vendor/gems/filtered_column/tasks/filtered_column_tasks.rake +4 -0
  403. data/vendor/gems/filtered_column/test/abstract_unit.rb +73 -0
  404. data/vendor/gems/filtered_column/test/filtered_column_test.rb +53 -0
  405. data/vendor/gems/filtered_column/test/macro_filter_test.rb +23 -0
  406. data/vendor/gems/has_counter/.gitignore +17 -0
  407. data/vendor/gems/has_counter/Gemfile +4 -0
  408. data/vendor/gems/has_counter/LICENSE +22 -0
  409. data/vendor/gems/has_counter/MIT-LICENSE +20 -0
  410. data/vendor/gems/has_counter/README.markdown +64 -0
  411. data/vendor/gems/has_counter/README.md +29 -0
  412. data/vendor/gems/has_counter/Rakefile +2 -0
  413. data/vendor/gems/has_counter/db/migrate/20080601194338_create_counters_table.rb.rb +13 -0
  414. data/vendor/gems/has_counter/has_counter.gemspec +17 -0
  415. data/vendor/gems/has_counter/lib/active_record/has_counter.rb +64 -0
  416. data/vendor/gems/has_counter/lib/counter.rb +23 -0
  417. data/vendor/gems/has_counter/lib/has_counter.rb +4 -0
  418. data/vendor/gems/has_counter/lib/has_counter/version.rb +3 -0
  419. data/vendor/gems/has_counter/spec/has_counter.spec.log +0 -0
  420. data/vendor/gems/has_counter/spec/has_counter.sqlite3.db +0 -0
  421. data/vendor/gems/has_counter/spec/has_counter_spec.rb +55 -0
  422. data/vendor/gems/has_counter/spec/spec_helper.rb +117 -0
  423. data/vendor/gems/has_filter/.gitignore +17 -0
  424. data/vendor/gems/has_filter/Gemfile +4 -0
  425. data/vendor/gems/has_filter/LICENSE +22 -0
  426. data/vendor/gems/has_filter/README.md +29 -0
  427. data/vendor/gems/has_filter/Rakefile +2 -0
  428. data/vendor/gems/has_filter/app/assets/images/has_filter/filter_add.png +0 -0
  429. data/vendor/gems/has_filter/app/assets/images/has_filter/filter_button_left.png +0 -0
  430. data/vendor/gems/has_filter/app/assets/images/has_filter/filter_button_right.png +0 -0
  431. data/vendor/gems/has_filter/app/assets/images/has_filter/filter_remove.png +0 -0
  432. data/vendor/gems/has_filter/app/assets/javascripts/has_filter/filter.js +35 -0
  433. data/vendor/gems/has_filter/app/assets/javascripts/has_filter/jquery.filter.js +23 -0
  434. data/vendor/gems/has_filter/app/assets/stylesheets/has_filter/alternate/filter.css +102 -0
  435. data/vendor/gems/has_filter/app/assets/stylesheets/has_filter/filter.css +100 -0
  436. data/vendor/gems/has_filter/app/helpers/filter_helper.rb +3 -0
  437. data/vendor/gems/has_filter/has_filter.gemspec +17 -0
  438. data/vendor/gems/has_filter/init.rb +3 -0
  439. data/vendor/gems/has_filter/lib/has_filter.rb +22 -0
  440. data/vendor/gems/has_filter/lib/has_filter/active_record/act_macro.rb +102 -0
  441. data/vendor/gems/has_filter/lib/has_filter/filter.rb +17 -0
  442. data/vendor/gems/has_filter/lib/has_filter/filter/base.rb +67 -0
  443. data/vendor/gems/has_filter/lib/has_filter/filter/categorized.rb +24 -0
  444. data/vendor/gems/has_filter/lib/has_filter/filter/chain.rb +45 -0
  445. data/vendor/gems/has_filter/lib/has_filter/filter/set.rb +80 -0
  446. data/vendor/gems/has_filter/lib/has_filter/filter/state.rb +25 -0
  447. data/vendor/gems/has_filter/lib/has_filter/filter/tagged.rb +22 -0
  448. data/vendor/gems/has_filter/lib/has_filter/filter/text.rb +55 -0
  449. data/vendor/gems/has_filter/lib/has_filter/version.rb +3 -0
  450. data/vendor/gems/has_filter/test/db/setup.rb +45 -0
  451. data/vendor/gems/has_filter/test/db/test.sqlite3.db +0 -0
  452. data/vendor/gems/has_filter/test/fixtures.rb +15 -0
  453. data/vendor/gems/has_filter/test/has_filter/filter_chain_test.rb +41 -0
  454. data/vendor/gems/has_filter/test/has_filter/filter_scopes_test.rb +102 -0
  455. data/vendor/gems/has_filter/test/has_filter/filter_tags_test.rb +113 -0
  456. data/vendor/gems/has_filter/test/has_filter/integration.rb +15 -0
  457. data/vendor/gems/has_filter/test/has_filter/scopes_test.rb +48 -0
  458. data/vendor/gems/has_filter/test/log/test.log +34346 -0
  459. data/vendor/gems/has_filter/test/models.rb +23 -0
  460. data/vendor/gems/has_filter/test/templates/has_filter/test/index.html.erb +5 -0
  461. data/vendor/gems/has_filter/test/test_helper.rb +66 -0
  462. data/vendor/gems/simple_taggable/.gitignore +17 -0
  463. data/vendor/gems/simple_taggable/Gemfile +4 -0
  464. data/vendor/gems/simple_taggable/LICENSE +22 -0
  465. data/vendor/gems/simple_taggable/README +24 -0
  466. data/vendor/gems/simple_taggable/README.md +29 -0
  467. data/vendor/gems/simple_taggable/Rakefile +2 -0
  468. data/vendor/gems/simple_taggable/lib/simple_taggable.rb +153 -0
  469. data/vendor/gems/simple_taggable/lib/simple_taggable/version.rb +3 -0
  470. data/vendor/gems/simple_taggable/lib/tag.rb +31 -0
  471. data/vendor/gems/simple_taggable/lib/tag_list.rb +90 -0
  472. data/vendor/gems/simple_taggable/lib/tagging.rb +8 -0
  473. data/vendor/gems/simple_taggable/simple_taggable.gemspec +17 -0
  474. data/vendor/gems/simple_taggable/test/db/schema.rb +41 -0
  475. data/vendor/gems/simple_taggable/test/db/simple_taggable.sqlite3.db +0 -0
  476. data/vendor/gems/simple_taggable/test/fixtures/magazine.rb +3 -0
  477. data/vendor/gems/simple_taggable/test/fixtures/magazines.yml +2 -0
  478. data/vendor/gems/simple_taggable/test/fixtures/photo.rb +8 -0
  479. data/vendor/gems/simple_taggable/test/fixtures/photos.yml +19 -0
  480. data/vendor/gems/simple_taggable/test/fixtures/post.rb +5 -0
  481. data/vendor/gems/simple_taggable/test/fixtures/posts.yml +27 -0
  482. data/vendor/gems/simple_taggable/test/fixtures/subscription.rb +4 -0
  483. data/vendor/gems/simple_taggable/test/fixtures/subscriptions.yml +3 -0
  484. data/vendor/gems/simple_taggable/test/fixtures/taggings.yml +112 -0
  485. data/vendor/gems/simple_taggable/test/fixtures/tags.yml +14 -0
  486. data/vendor/gems/simple_taggable/test/fixtures/user.rb +6 -0
  487. data/vendor/gems/simple_taggable/test/fixtures/users.yml +5 -0
  488. data/vendor/gems/simple_taggable/test/log/simple_taggable.log +1614 -0
  489. data/vendor/gems/simple_taggable/test/simple_taggable_test.rb +226 -0
  490. data/vendor/gems/simple_taggable/test/tag_list_test.rb +105 -0
  491. data/vendor/gems/simple_taggable/test/test_helper.rb +80 -0
  492. data/vendor/gems/table_builder/.gitignore +17 -0
  493. data/vendor/gems/table_builder/Gemfile +4 -0
  494. data/vendor/gems/table_builder/LICENSE +22 -0
  495. data/vendor/gems/table_builder/README.md +29 -0
  496. data/vendor/gems/table_builder/Rakefile +2 -0
  497. data/vendor/gems/table_builder/lib/table_builder.rb +27 -0
  498. data/vendor/gems/table_builder/lib/table_builder/body.rb +28 -0
  499. data/vendor/gems/table_builder/lib/table_builder/cell.rb +21 -0
  500. data/vendor/gems/table_builder/lib/table_builder/column.rb +26 -0
  501. data/vendor/gems/table_builder/lib/table_builder/foot.rb +6 -0
  502. data/vendor/gems/table_builder/lib/table_builder/head.rb +16 -0
  503. data/vendor/gems/table_builder/lib/table_builder/row.rb +40 -0
  504. data/vendor/gems/table_builder/lib/table_builder/rows.rb +26 -0
  505. data/vendor/gems/table_builder/lib/table_builder/table.rb +75 -0
  506. data/vendor/gems/table_builder/lib/table_builder/tag.rb +58 -0
  507. data/vendor/gems/table_builder/lib/table_builder/version.rb +3 -0
  508. data/vendor/gems/table_builder/table_builder.gemspec +17 -0
  509. data/vendor/gems/table_builder/test/fixtures/templates/table_all.html.erb +20 -0
  510. data/vendor/gems/table_builder/test/fixtures/templates/table_auto_body.html.erb +3 -0
  511. data/vendor/gems/table_builder/test/fixtures/templates/table_auto_columns.html.erb +1 -0
  512. data/vendor/gems/table_builder/test/fixtures/templates/table_simple.html.erb +7 -0
  513. data/vendor/gems/table_builder/test/table_builder/table_test.rb +230 -0
  514. data/vendor/gems/table_builder/test/test_helper.rb +49 -0
  515. data/vendor/gems/tags/.gitignore +17 -0
  516. data/vendor/gems/tags/Gemfile +4 -0
  517. data/vendor/gems/tags/LICENSE +22 -0
  518. data/vendor/gems/tags/README.md +29 -0
  519. data/vendor/gems/tags/Rakefile +2 -0
  520. data/vendor/gems/tags/lib/breadcrumbs.rb +13 -0
  521. data/vendor/gems/tags/lib/menu.rb +179 -0
  522. data/vendor/gems/tags/lib/menu/builder.rb +74 -0
  523. data/vendor/gems/tags/lib/tags.rb +7 -0
  524. data/vendor/gems/tags/lib/tags/tag.rb +125 -0
  525. data/vendor/gems/tags/lib/tags/version.rb +3 -0
  526. data/vendor/gems/tags/tags.gemspec +17 -0
  527. data/vendor/gems/tags/test/tags/menu_test.rb +173 -0
  528. data/vendor/gems/tags/test/tags/tag_test.rb +13 -0
  529. data/vendor/gems/tags/test/test_helper.rb +18 -0
  530. data/vendor/gems/xss_terminate/.gitignore +17 -0
  531. data/vendor/gems/xss_terminate/Gemfile +4 -0
  532. data/vendor/gems/xss_terminate/LICENSE +22 -0
  533. data/vendor/gems/xss_terminate/MIT-LICENSE +20 -0
  534. data/vendor/gems/xss_terminate/README +94 -0
  535. data/vendor/gems/xss_terminate/README.md +29 -0
  536. data/vendor/gems/xss_terminate/Rakefile +23 -0
  537. data/vendor/gems/xss_terminate/lib/html5lib_sanitize.rb +2453 -0
  538. data/vendor/gems/xss_terminate/lib/rails_sanitize.rb +8 -0
  539. data/vendor/gems/xss_terminate/lib/xss_terminate.rb +141 -0
  540. data/vendor/gems/xss_terminate/lib/xss_terminate/version.rb +3 -0
  541. data/vendor/gems/xss_terminate/tasks/xss_terminate_tasks.rake +7 -0
  542. data/vendor/gems/xss_terminate/test/models/comment.rb +5 -0
  543. data/vendor/gems/xss_terminate/test/models/entry.rb +7 -0
  544. data/vendor/gems/xss_terminate/test/models/message.rb +3 -0
  545. data/vendor/gems/xss_terminate/test/models/person.rb +5 -0
  546. data/vendor/gems/xss_terminate/test/models/review.rb +5 -0
  547. data/vendor/gems/xss_terminate/test/schema.rb +34 -0
  548. data/vendor/gems/xss_terminate/test/setup_test.rb +16 -0
  549. data/vendor/gems/xss_terminate/test/xss_terminate_test.rb +50 -0
  550. data/vendor/gems/xss_terminate/xss_terminate.gemspec +17 -0
  551. metadata +744 -0
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class I18nTest < ActiveSupport::TestCase
4
+ test "/config/locale/rails/de.yml is included in the I18n load_path" do
5
+ paths = I18n.load_path.map { |path| path.gsub(%r(.*/adva_cms/), '') }
6
+ paths.should include('config/locales/rails/de.yml')
7
+ end
8
+
9
+ test "correctly looks up english ar errormessage :invalid" do
10
+ I18n.t(:"activerecord.errors.messages.invalid").should == "is invalid"
11
+ end
12
+
13
+ test "correctly looks up german ar errormessage :invalid" do
14
+ I18n.t(:"activerecord.errors.messages.invalid", :locale => :de).should == "ist nicht gültig"
15
+ end
16
+
17
+ test "foo" do
18
+ true.should be_true
19
+ false.should be_false
20
+ nil.should be_nil
21
+ end
22
+ end
@@ -0,0 +1,96 @@
1
+ # FIXME implement
2
+
3
+ # require File.dirname(__FILE__) + '/spec_helper'
4
+ # require 'cells_ext'
5
+ #
6
+ # class TestCell < BaseCell
7
+ # def exposed_state; nil; end;
8
+ # def unexposed_state; nil; end;
9
+ #
10
+ # has_state :exposed_state
11
+ # end
12
+ #
13
+ # describe Cell do
14
+ # describe "class methods" do
15
+ # describe ".all" do
16
+ # it "responds to .all" do
17
+ # Cell.should respond_to(:all)
18
+ # end
19
+ #
20
+ # it "returns a collection of cells" do
21
+ # Cell.all.should be_a_kind_of(Array)
22
+ # end
23
+ #
24
+ # it "returns a collection that can be serialized to XML" do
25
+ # Cell.all.should respond_to(:to_xml)
26
+ # end
27
+ #
28
+ # it "returns a collection of BaseCell objects" do
29
+ # Cell.all.each do |cell|
30
+ # Object.subclasses_of(BaseCell).should include(cell)
31
+ # end
32
+ # end
33
+ # end
34
+ #
35
+ # describe ".has_state" do
36
+ # before(:each) do
37
+ # TestCell.states = [:exposed_state]
38
+ # end
39
+ #
40
+ # it "adds a new state if the state exists" do
41
+ # #lambda { TestCell.has_state :unexposed_state }.should change(TestCell, :states) # TODO: somehow this doesn't work ...
42
+ # TestCell.states.should_not include(:unexposed_state)
43
+ # TestCell.has_state :unexposed_state
44
+ # TestCell.states.should include(:unexposed_state)
45
+ # end
46
+ #
47
+ # # TODO: should we somewhere exclude nonexistent states?
48
+ # it "adds a new state even if the state doesn't exist" do
49
+ # #lambda { TestCell.has_state :nonexistent_state }.should_not change(TestCell, :states) # TODO: somehow this doesn't work ...
50
+ # TestCell.states.should_not include(:nonexistent_state)
51
+ # TestCell.has_state :nonexistent_state
52
+ # TestCell.states.should include(:nonexistent_state)
53
+ # end
54
+ # end
55
+ #
56
+ # describe ".states" do
57
+ # it "responds to states" do
58
+ # TestCell.should respond_to(:states)
59
+ # end
60
+ #
61
+ # it "returns an array" do
62
+ # TestCell.states.should be_a_kind_of(Array)
63
+ # end
64
+ #
65
+ # # TODO: is it good to test this heavily for implementation?
66
+ # it "returns the cell's exposed states" do
67
+ # TestCell.states.should include(:exposed_state)
68
+ # end
69
+ # end
70
+ #
71
+ # describe ".to_xml" do
72
+ # it "responds to to_xml" do
73
+ # TestCell.should respond_to(:to_xml)
74
+ # end
75
+ #
76
+ # it "translates the cell's name and its states' names and descriptions" do
77
+ # I18n.should_receive(:translate).with(:'adva.cells.test.name', :default => 'Test')
78
+ #
79
+ # I18n.should_receive(:translate).with(:'adva.cells.test.states.exposed_state.name', :default => 'Exposed state')
80
+ # I18n.should_receive(:translate).with(:'adva.cells.test.states.exposed_state.description', :default => '')
81
+ #
82
+ # I18n.should_receive(:translate).with(:'adva.cells.test.states.nonexistent_state.name', :default => 'Nonexistent state')
83
+ # I18n.should_receive(:translate).with(:'adva.cells.test.states.nonexistent_state.description', :default => '')
84
+ #
85
+ # TestCell.to_xml
86
+ # end
87
+ #
88
+ # # TODO: maybe test the output?
89
+ # # it "...?" do
90
+ # # require 'rexml'
91
+ # #
92
+ # # xml = REXML::Document.new(@cell.to_xml)
93
+ # # end
94
+ # end
95
+ # end
96
+ # end
@@ -0,0 +1,362 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+
3
+ class FooFormBuilder < ExtensibleFormBuilder
4
+ end
5
+
6
+ class TestFormBuilder < ExtensibleFormBuilder
7
+ def self.reset!
8
+ self.labels = true
9
+ self.wrap = true
10
+ self.default_class_names.clear
11
+ end
12
+ end
13
+
14
+ module ExtensibleFormsBuilderTests
15
+ class RailsExtTest < ActionView::TestCase
16
+ tests ActionView::Helpers::FormHelper
17
+
18
+ def setup
19
+ super
20
+ @article = Article.new :title => 'article title'
21
+ @controller = Class.new { def url_for(options); 'url' end }.new
22
+ end
23
+
24
+ def build_form(&block)
25
+ block ||= Proc.new { |f| concat f.field_set { f.text_field(:title) } }
26
+ form_for(:article, @article, :builder => TestFormBuilder, &block)
27
+ output_buffer
28
+ end
29
+
30
+ test "renders a fieldset" do
31
+ build_form =~ /<fieldset/
32
+ end
33
+
34
+ test "adds a default id to the a fieldset" do
35
+ build_form =~ /id="article_default"/
36
+ end
37
+
38
+ test "adds a custom id to the a fieldset" do
39
+ build_form { |f| concat f.field_set(:foo) } =~ /id="article_foo"/
40
+ end
41
+
42
+ test "picks a formbuilder for given object_name" do
43
+ pick_form_builder(:foo).should == FooFormBuilder
44
+ end
45
+
46
+ protected
47
+
48
+ def protect_against_forgery?
49
+ false
50
+ end
51
+ end
52
+
53
+ class CoreTest < ActionView::TestCase
54
+ tests ActionView::Helpers::FormHelper
55
+
56
+ attr_reader :controller
57
+ attr_reader :assigns
58
+
59
+ def setup
60
+ super
61
+ @article = Article.new :title => 'article title'
62
+ @controller = Class.new { def url_for(options); 'url' end }.new
63
+ @builder = TestFormBuilder.new(nil, nil, self, {}, nil)
64
+ @assigns = {}
65
+ TestFormBuilder.reset!
66
+ end
67
+
68
+ def teardown
69
+ reset_form_callbacks
70
+ end
71
+
72
+ def build_form(*args)
73
+ options = args.extract_options!
74
+ method = args.shift || :title
75
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
76
+ concat f.text_field(method, options)
77
+ end
78
+ output_buffer
79
+ end
80
+
81
+ test "builds the form" do
82
+ assert build_form =~ /<input id="article_title"/
83
+ end
84
+
85
+ # options
86
+
87
+ test "adds a label when labels enabled" do
88
+ assert build_form =~ /label/
89
+ end
90
+
91
+ test "does not add a label when labels disabled" do
92
+ TestFormBuilder.options[:labels] = false
93
+ assert build_form !~ /label/
94
+ end
95
+
96
+ test "adds default_class_names to the generated text_field" do
97
+ TestFormBuilder.default_class_names(:text_field) << 'default class names'
98
+ assert build_form =~ /<input class="default class names"/
99
+ end
100
+
101
+ test "adds default_class_names to the generated fieldset" do
102
+ TestFormBuilder.default_class_names(:field_set) << 'default class names'
103
+ expected = '<fieldset class="bar default class names" id="foo"><legend>legend</legend>baz</fieldset>'
104
+ assert_equal expected, @builder.field_set(:id => 'foo', :legend => 'legend', :class => 'bar') { 'baz' }
105
+ end
106
+
107
+ # labels
108
+
109
+ test "uses the given string as label text (labels enabled)" do
110
+ assert build_form(:label => 'the article label') =~ /<label for="article_title">the article label/
111
+ end
112
+
113
+ test "translates the given symbol and uses it as label text (labels enabled)" do
114
+ assert build_form(:label => :'activerecord.errors.messages.invalid') =~ /<label for="article_title">is invalid/
115
+ end
116
+
117
+ test "uses the ActiveRecord namespace's translation as label text when label option is true" do
118
+ I18n.backend.store_translations(:en, { :activerecord => { :attributes => { :article => { :body => "Text" } } } })
119
+ assert build_form(:body, :label => true) =~ /<label for="article_body">Text/
120
+ end
121
+
122
+ test "uses the humanized method name as label text when label option is true and no translation can be found in ActiveRecord namespace (labels enabled)" do
123
+ assert build_form(:label => true) =~ /<label for="article_title">Title/
124
+ end
125
+
126
+ # callbacks
127
+
128
+ test "registers before and after callbacks (given as block or string)" do
129
+ builder = TestFormBuilder
130
+ assert_nothing_raised do
131
+ builder.before(:article, :title) { |f| 'before!' }
132
+ builder.after(:article, :title, 'after!')
133
+ end
134
+ assert_equal 1, builder.callbacks[:before][:article][:title].size
135
+ assert_equal 1, builder.callbacks[:after][:article][:title].size
136
+ end
137
+
138
+ test "run_callbacks returns concatenated callback results (given as block or string)" do
139
+ 2.times { TestFormBuilder.before(:article, :title) { 'before!' } }
140
+ 2.times { TestFormBuilder.after(:article, :title, 'after!') }
141
+ @builder.object_name = 'article'
142
+ assert_equal 'before!before!', @builder.send(:run_callbacks, :before, :title)
143
+ assert_equal 'after!after!', @builder.send(:run_callbacks, :after, :title)
144
+ end
145
+
146
+ test "with_callbacks returns the concatenated callback results enclosing the passed block's result" do
147
+ TestFormBuilder.before(:article, :article_title) { 'before!' }
148
+ TestFormBuilder.after(:article, :article_title, 'after!')
149
+ @builder.object_name = 'article'
150
+ assert_equal 'before!foo!after!', @builder.send(:with_callbacks, :article_title) { 'foo!' }
151
+ end
152
+
153
+ test "renders tag with callbacks" do
154
+ TestFormBuilder.before(:article, :title) { 'before!' }
155
+ TestFormBuilder.after(:article, :title, 'after!')
156
+ expected = '<form action="url" method="post">' +
157
+ 'before!<p><label for="article_title">Title</label>' +
158
+ '<input id="article_title" name="article[title]" size="30" tabindex="1" type="text" value="article title" /></p>' +
159
+ 'after!</form>'
160
+ assert_equal expected, build_form
161
+ end
162
+
163
+ # fieldset
164
+
165
+ test "generates a fieldset with legend" do
166
+ expected = '<fieldset class="bar" id="foo"><legend>legend</legend>baz</fieldset>'
167
+ assert_equal expected, @builder.field_set(:id => 'foo', :legend => 'legend', :class => 'bar') { 'baz' }
168
+ end
169
+
170
+ test "fieldset generation works within formbuilder block (labels and hints enabled)" do
171
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
172
+ concat f.text_field(:title)
173
+ f.field_set(:id => 'foo') { concat f.text_field(:title, :hint => 'hint for title') }
174
+ end
175
+ expected = '<form action="url" method="post">' +
176
+ '<p><label for="article_title">Title</label>' +
177
+ '<input id="article_title" name="article[title]" size="30" tabindex="1" type="text" value="article title" /></p>' +
178
+ '<fieldset id="foo">' +
179
+ '<p><label for="article_title">Title</label>' +
180
+ '<input id="article_title" name="article[title]" size="30" tabindex="2" type="text" value="article title" />' +
181
+ '<span class="hint" for="article_title">hint for title</span></p>' +
182
+ '</fieldset></form>'
183
+ assert_equal expected, output_buffer
184
+ end
185
+
186
+ test "extracts the id from generated tag (sigh)" do
187
+ assert_equal 'article_title', @builder.send(:extract_id, build_form)
188
+ end
189
+
190
+ # tabindexes
191
+
192
+ test "adds a tabindex" do
193
+ assert build_form =~ /tabindex="1"/
194
+ end
195
+
196
+ test "adds user specified tabindex" do
197
+ assert build_form(:body, :tabindex => 666) =~ /tabindex="666"/
198
+ end
199
+
200
+ test "increments tabindexes for multiple form fields" do
201
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
202
+ concat f.text_field(:title)
203
+ concat f.text_area(:body)
204
+ end
205
+ expected = '<form action="url" method="post">' +
206
+ '<p><label for="article_title">Title</label>' +
207
+ '<input id="article_title" name="article[title]" size="30" tabindex="1" type="text" value="article title" />' +
208
+ '</p><p><label for="article_body">Body</label>' +
209
+ '<textarea cols="40" id="article_body" name="article[body]" rows="20" tabindex="2"></textarea>' +
210
+ '</p></form>'
211
+ assert_equal expected, output_buffer
212
+ end
213
+
214
+ test "uses field id to remember the tab indexes of form fields" do
215
+ @builder.text_field(:title, :tabindex => 43)
216
+ @builder.text_area(:body, :tabindex => 433)
217
+ assert @builder.send(:tabindexes) == { :_title => 43, :_body => 433 }
218
+ end
219
+
220
+ test "does not remember tab index if field id is empty" do
221
+ @builder.text_field(:title, :id => "", :tabindex => 43)
222
+ @builder.text_area(:body, :id => "", :tabindex => 433)
223
+ assert @builder.send(:tabindexes) == { }
224
+ end
225
+
226
+ test "uses the same tabindex as the form field with the id of given symbol" do
227
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
228
+ concat f.text_field(:title, :tabindex => 4)
229
+ concat f.text_area(:body, :tabindex => :article_title)
230
+ end
231
+ expected = '<form action="url" method="post">' +
232
+ '<p><label for="article_title">Title</label>' +
233
+ '<input id="article_title" name="article[title]" size="30" tabindex="4" type="text" value="article title" />' +
234
+ '</p><p><label for="article_body">Body</label>' +
235
+ '<textarea cols="40" id="article_body" name="article[body]" rows="20" tabindex="4"></textarea>' +
236
+ '</p></form>'
237
+ assert_equal expected, output_buffer
238
+ end
239
+
240
+ test "decrements the tabindex by one if defined by { :before => :article_title }" do
241
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
242
+ concat f.text_field(:title, :tabindex => 4)
243
+ concat f.text_area(:body, :tabindex => { :before => :article_title })
244
+ end
245
+ expected = '<form action="url" method="post">' +
246
+ '<p><label for="article_title">Title</label>' +
247
+ '<input id="article_title" name="article[title]" size="30" tabindex="4" type="text" value="article title" />' +
248
+ '</p><p><label for="article_body">Body</label>' +
249
+ '<textarea cols="40" id="article_body" name="article[body]" rows="20" tabindex="3"></textarea>' +
250
+ '</p></form>'
251
+ assert_equal expected, output_buffer
252
+ end
253
+
254
+ test "increments the tabindex by one if defined by { :after => :article_title }" do
255
+ form_for(:article, @article, :builder => TestFormBuilder) do |f|
256
+ concat f.text_field(:title, :tabindex => 4)
257
+ concat f.text_area(:body, :tabindex => { :after => :article_title })
258
+ end
259
+ expected = '<form action="url" method="post">' +
260
+ '<p><label for="article_title">Title</label>' +
261
+ '<input id="article_title" name="article[title]" size="30" tabindex="4" type="text" value="article title" />' +
262
+ '</p><p><label for="article_body">Body</label>' +
263
+ '<textarea cols="40" id="article_body" name="article[body]" rows="20" tabindex="5"></textarea>' +
264
+ '</p></form>'
265
+ assert_equal expected, output_buffer
266
+ end
267
+
268
+ protected
269
+
270
+ def protect_against_forgery?
271
+ false
272
+ end
273
+
274
+ def reset_form_callbacks
275
+ TestFormBuilder.callbacks = { :before => {}, :after => {} }
276
+ end
277
+ end
278
+
279
+ class RenderTest < ActionController::TestCase
280
+ tests Admin::InstallController
281
+
282
+ describe "ExtensibleFormsBuilder" do
283
+ action { get :index }
284
+ before { register_form_callbacks }
285
+ after { reset_form_callbacks }
286
+
287
+ with :no_site, :no_user do
288
+ it "inserts the callbacks results to the form" do
289
+ @response.body.should =~ /before site name!/
290
+ @response.body.should =~ /after section title!/
291
+ end
292
+ end
293
+ end
294
+
295
+ def register_form_callbacks
296
+ ExtensibleFormBuilder.before(:site, :name) do |f|
297
+ 'before site name!'
298
+ end
299
+ ExtensibleFormBuilder.after(:section, :title) do |f|
300
+ 'after section title!'
301
+ end
302
+ end
303
+
304
+ def reset_form_callbacks
305
+ ExtensibleFormBuilder.callbacks = { :before => {}, :after => {} }
306
+ end
307
+ end
308
+
309
+ class TabRenderTest < ActionView::TestCase
310
+ include UrlHelper
311
+
312
+ attr_accessor :controller
313
+
314
+ def setup
315
+ Rails.backtrace_cleaner.remove_silencers!
316
+ ExtensibleFormBuilder.tabs = []
317
+ ExtensibleFormBuilder.tab(:foo) do |f|
318
+ 'that foo tabby!'
319
+ end
320
+ ExtensibleFormBuilder.tab(:bar) do |f|
321
+ 'that bar tabby!'
322
+ end
323
+ @controller = ActionController::Base.new
324
+ @form = ExtensibleFormBuilder.new(nil, nil, self, {}, nil)
325
+ super
326
+ end
327
+
328
+ def assigns
329
+ {}
330
+ end
331
+
332
+ def concat(string)
333
+ string
334
+ end
335
+
336
+ test "calls the registered block for the tab" do
337
+ tabs = @form.tabs
338
+ assert_match %r(that foo tabby!), tabs
339
+ assert_match %r(that bar tabby!), tabs
340
+ end
341
+
342
+ test "wraps the tab into a div with appropriate class and id" do
343
+ tabs = @form.tabs
344
+ assert_html tabs, 'div[class=tabs]' do
345
+ assert_select 'ul' do
346
+ assert_select 'li a[href=#foo]'
347
+ assert_select 'li a[href=#bar]'
348
+ end
349
+ assert_select 'div[class=tab active][id=tab_foo]'
350
+ assert_select 'div[class=tab][id=tab_bar]'
351
+ end
352
+ end
353
+
354
+ # test "calls before and after callbacks for each tab" do
355
+ # mock(@form).run_callbacks(:before, :'tab_foo').returns ''
356
+ # mock(@form).run_callbacks(:before, :'tab_bar').returns ''
357
+ # mock(@form).run_callbacks(:after, :'tab_foo').returns ''
358
+ # mock(@form).run_callbacks(:after, :'tab_bar').returns ''
359
+ # @form.tabs
360
+ # end
361
+ end
362
+ end