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,49 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper' )
2
+
3
+ if ActionController::Base.respond_to?(:tracks_url_history)
4
+ module IntegrationTests
5
+ module UrlHistoryTests
6
+ class SectionTest < ActionController::IntegrationTest
7
+ def setup
8
+ super
9
+ @section = Page.find_by_title 'a page'
10
+ @another_section = Page.find_by_title 'another page'
11
+ @site = @section.site
12
+ use_site! @site
13
+ end
14
+
15
+ unless ApplicationController.tracks_url_history?
16
+ test "without url_history: Admin views page, edits the permalink and gets 404" do
17
+ visit '/another-page'
18
+ login_as_admin
19
+ revise_the_page_permalink
20
+ visit '/another-page'
21
+ assert_status 404
22
+ end
23
+ end
24
+
25
+ if ApplicationController.tracks_url_history?
26
+ test "with url_history: Admin views page, edits the permalink and gets redirected" do
27
+ visit '/another-page'
28
+ assert_status 200
29
+ request.url.should =~ %r(/another-page)
30
+ UrlHistory::Entry.recent_by_url(request.url).should_not be_nil
31
+
32
+ login_as_admin
33
+ revise_the_page_permalink
34
+ visit '/another-page'
35
+ assert_status 200
36
+ request.url.should =~ %r(/another-page-updated-permalink)
37
+ end
38
+ end
39
+
40
+ def revise_the_page_permalink
41
+ visit "/admin/sites/#{@site.id}/sections/#{@another_section.id}/edit"
42
+ fill_in 'section[permalink]', :with => 'another-page-updated-permalink'
43
+ click_button 'Save'
44
+ request.url.should =~ %r(/admin/sites/\d+/sections)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,75 @@
1
+ defined?(TEST_HELPER_LOADED) ? raise("can not load #{__FILE__} twice") : TEST_HELPER_LOADED = true
2
+
3
+ def rails_root
4
+ dir = File.expand_path(File.dirname(__FILE__) + "/../..")
5
+ while dir = File.dirname(dir) and dir != '/' do
6
+ return dir if File.exists?("#{dir}/config/environment.rb")
7
+ end
8
+ end
9
+
10
+ ENV["RAILS_ENV"] = "test"
11
+ dir = File.dirname(__FILE__)
12
+ require "#{rails_root}/config/environment.rb"
13
+
14
+ require 'matchy'
15
+ require 'test_help'
16
+ require 'action_view/test_case'
17
+ require 'with'
18
+ require 'with-sugar'
19
+
20
+ require 'globalize/i18n/missing_translations_raise_handler'
21
+ I18n.exception_handler = :missing_translations_raise_handler
22
+
23
+ class ActiveSupport::TestCase
24
+ include RR::Adapters::TestUnit
25
+
26
+ setup :start_db_transaction!
27
+ setup :setup_page_caching!
28
+ setup :set_locale!
29
+ setup :ensure_single_site_mode!
30
+
31
+ teardown :rollback_db_transaction!
32
+ teardown :clear_cache_dir!
33
+ teardown :rollback_multi_site_mode!
34
+
35
+ setup do
36
+ @default_permissions = Rbac::Context.default_permissions.dup
37
+ end
38
+
39
+ teardown do
40
+ Rbac::Context.default_permissions = @default_permissions
41
+ end
42
+
43
+
44
+ def set_locale!
45
+ I18n.locale = nil
46
+ I18n.default_locale = :en
47
+ end
48
+
49
+ def stub_paperclip_post_processing!
50
+ stub.proxy(Paperclip::Attachment).new { |attachment| stub(attachment).post_process }
51
+ end
52
+ end
53
+
54
+ # include this line to test adva-cms with url_history installed
55
+ # require dir + '/plugins/url_history/init_url_history'
56
+
57
+ # reset locales in case client apps set them in the environment
58
+ I18n.default_locale = :en
59
+ I18n.locale = nil
60
+
61
+ require_all dir + "/contexts.rb",
62
+ dir + "/test_helper/**/*.rb"
63
+ require_all dir + "/../../*/test/contexts.rb",
64
+ dir + "/../../*/test/test_helper/**/*.rb"
65
+
66
+ if DO_PREPARE_DATABASE
67
+ puts 'Preparing the database ...'
68
+ # load "#{Rails.root}/db/schema.rb"
69
+ require_all dir + "/fixtures.rb"
70
+ require_all dir + "/../../*/test/fixtures.rb"
71
+
72
+ ActiveSupport::TestCase.setup :clear_tmp_dir!
73
+ end
74
+
75
+ require "#{Rails.root}/test/test_helper.rb" if File.exists?("#{Rails.root}/test/test_helper.rb")
@@ -0,0 +1,16 @@
1
+ class Test::Unit::TestCase
2
+ def setup_page_caching!
3
+ ActionController::Base.page_cache_directory = Rails.root + '/tmp/cache'
4
+ ActionController::Base.perform_caching = true
5
+ end
6
+
7
+ def clear_cache_dir!
8
+ cache_dir = ActionController::Base.page_cache_directory
9
+ FileUtils.rm_r(cache_dir) if File.exists?(cache_dir)
10
+ end
11
+
12
+ def clear_tmp_dir!
13
+ tmp_dir = Rails.root + '/tmp/sites'
14
+ FileUtils.rm_r(tmp_dir) if File.exists?(tmp_dir)
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ class Test::Unit::TestCase
2
+ def ensure_single_site_mode!
3
+ @old_multi_sites_enabled = Site.multi_sites_enabled
4
+ Site.multi_sites_enabled = false
5
+ end
6
+
7
+ def rollback_multi_site_mode!
8
+ Site.multi_sites_enabled = @old_multi_sites_enabled
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ # http://github.com/pivotal/cacheable-flash
2
+
3
+ # modified the original helper to unescape stuff
4
+ module CacheableFlash
5
+ module TestHelpers
6
+ def flash_cookie
7
+ return {} unless cookies['flash']
8
+ flash = CGI::unescape cookies['flash']
9
+ flash = flash ? JSON.parse(flash) : {}
10
+ HashWithIndifferentAccess.new flash
11
+ end
12
+ end
13
+ end
14
+ ActionController::TestResponse.send :include, CacheableFlash::TestHelpers
@@ -0,0 +1,11 @@
1
+ # Removes all cronjobs created by test
2
+ #
3
+ # after do
4
+ # remove_all_test_cronjobs
5
+ # end
6
+ #
7
+ def remove_all_test_cronjobs
8
+ CronEdit::Crontab.List.keys.each do |key|
9
+ CronEdit::Crontab.Remove(key) if key =~ /test-/
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ # class Event
2
+ # module TestLog
3
+ # Event.observers << self
4
+ # @@events = []
5
+ #
6
+ # class << self
7
+ # def clear!
8
+ # @@events = []
9
+ # end
10
+ #
11
+ # def was_triggered?(type)
12
+ # @@events.include? type
13
+ # end
14
+ #
15
+ # def handle_event!(event)
16
+ # @@events ||= []
17
+ # @@events << event.type
18
+ # end
19
+ # end
20
+ # end
21
+ # end
@@ -0,0 +1,78 @@
1
+ module ActionController
2
+ class IntegrationTest
3
+ def default_theme?
4
+ controller.site.themes.active.empty?
5
+ end
6
+
7
+ def displays_article(article)
8
+ has_tag '.entry', :text => /#{article.title}/
9
+ end
10
+
11
+ def does_not_display_article(article)
12
+ has_tag '.entry', :text => /#{article.title}/, :count => 0
13
+ end
14
+
15
+ def displays_comments(comments)
16
+ comments.each do |comment|
17
+ has_tag ".comment", :text => /#{comment.body}/
18
+ end
19
+ end
20
+
21
+ def renders_template(template)
22
+ assert_template template
23
+ assert_response :success
24
+ end
25
+
26
+ # Testing cookie based flash message.
27
+ #
28
+ # Example usage:
29
+ # renders_flash 'It was successfully updated!'
30
+ #
31
+ def renders_flash(message)
32
+ regexp = Regexp.new(message.gsub(' ', '\\\+'))
33
+ assert cookies['flash'] =~ regexp,
34
+ "Flash message does NOT MATCH: #{message}\n" +
35
+ " We got flash cookie: #{cookies['flash']}\n what doesn't match to our test regexp: #{regexp}"
36
+ cookies.delete :flash
37
+ end
38
+ alias :assert_flash :renders_flash
39
+
40
+ def use_site!(site)
41
+ site = Site.find_by_name(site) unless site.is_a?(Site)
42
+ site.tap do |site|
43
+ @integration_session ||= open_session
44
+ @integration_session.host! site.host
45
+ end
46
+ end
47
+
48
+ def login_as_user
49
+ raise "need to set the current site before loggin in" unless @integration_session
50
+ post "/session", :user => {:email => 'a-user@example.com', :password => 'a password'}
51
+ assert controller.authenticated?
52
+ controller.current_user
53
+ end
54
+
55
+ def login_as_admin
56
+ raise "need to set the current site before loggin in" unless @integration_session
57
+ post "/session", :user => {:email => 'an-admin@example.com', :password => 'a password'}
58
+ assert controller.authenticated?
59
+ assert controller.current_user.has_role?(:admin, controller.site)
60
+ end
61
+
62
+ def login_as_designer
63
+ raise "need to set the current site before loggin in" unless @integration_session
64
+ post "/session", :user => {:email => 'a-designer@example.com', :password => 'a password'}
65
+ assert controller.authenticated?
66
+ puts controller.current_user.roles.inspect
67
+ assert controller.current_user.has_role?(:designer, controller.site)
68
+ end
69
+
70
+ def login_as_superuser
71
+ raise "need to set the current site before loggin in" unless @integration_session
72
+ post "/session", :user => {:email => 'a-superuser@example.com', :password => 'a password'}
73
+ assert controller.authenticated?
74
+ assert controller.current_user.has_role?(:superuser)
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,365 @@
1
+ module Matchy
2
+ module Expectations
3
+ class Base
4
+ # overwritten to take options, too
5
+ def initialize(expected, test_case, options = {})
6
+ @expected = expected
7
+ @test_case = test_case
8
+ @options = options
9
+ end
10
+ end
11
+
12
+ module TestCaseExtensions
13
+ def be_nil
14
+ Matchy::Expectations::Be.new(nil, self)
15
+ end
16
+
17
+ def be_true
18
+ Matchy::Expectations::Be.new(true, self)
19
+ end
20
+
21
+ def be_false
22
+ Matchy::Expectations::Be.new(false, self)
23
+ end
24
+
25
+ def be_instance_of(expected)
26
+ Matchy::Expectations::BeInstanceOf.new(expected, self)
27
+ end
28
+
29
+ # def be_kind_of(expected)
30
+ # Matchy::Expectations::BeKindOf.new(expected, self)
31
+ # end
32
+
33
+ def be_empty
34
+ Matchy::Expectations::BeEmpty.new(nil, self)
35
+ end
36
+
37
+ def be_blank
38
+ Matchy::Expectations::BeBlank.new(nil, self)
39
+ end
40
+
41
+ def be_valid
42
+ Matchy::Expectations::BeValid.new(nil, self)
43
+ end
44
+
45
+ def be_file
46
+ Matchy::Expectations::BeFile.new(nil, self)
47
+ end
48
+
49
+ def be_directory
50
+ Matchy::Expectations::BeDirectory.new(nil, self)
51
+ end
52
+
53
+ def have_tracking_enabled
54
+ Matchy::Expectations::HaveTrackingEnabled.new(nil, self)
55
+ end
56
+
57
+ # def respond_to(expected)
58
+ # Matchy::Expectations::RespondTo.new(expected, self)
59
+ # end
60
+
61
+ def validate_presence_of(attribute, options = {})
62
+ Matchy::Expectations::ValidatePresenceOf.new(attribute, self, options)
63
+ end
64
+
65
+ def validate_uniqueness_of(attribute, options = {})
66
+ Matchy::Expectations::ValidateUniquenessOf.new(attribute, self, options)
67
+ end
68
+
69
+ def validate_length_of(attribute, options = {})
70
+ Matchy::Expectations::ValidateLengthOf.new(attribute, self, options)
71
+ end
72
+
73
+ def belong_to(expected, options = {})
74
+ Matchy::Expectations::Association.new(self, :belongs_to, expected, options)
75
+ end
76
+
77
+ def have_one(expected, options = {})
78
+ Matchy::Expectations::Association.new(self, :has_one, expected, options)
79
+ end
80
+
81
+ def have_many(expected, options = {})
82
+ Matchy::Expectations::Association.new(self, :has_many, expected, options)
83
+ end
84
+
85
+ def have_tag(*args, &block)
86
+ Matchy::Expectations::AssertSelect.new(:assert_select, self, *args, &block)
87
+ end
88
+
89
+ def be_child_of(parent)
90
+ Matchy::Expectations::BeChildOf.new(parent, self)
91
+ end
92
+
93
+ def be_a(klass)
94
+ Matchy::Expectations::BeA.new(klass, self)
95
+ end
96
+ alias be_an be_a
97
+
98
+ def be_frozen
99
+ Matchy::Expectations::BeFrozen.new(nil, self)
100
+ end
101
+
102
+ def be_new_record
103
+ Matchy::Expectations::BeNewRecord.new(nil, self)
104
+ end
105
+ end
106
+
107
+ class << self
108
+ def matcher(name, failure_message, negative_failure_message, &block)
109
+ matcher = Class.new(Base) do
110
+ define_method :matches?, &block
111
+
112
+ define_method :failure_message do
113
+ failure_message % [@receiver.inspect, @expected.inspect, @options.inspect]
114
+ end
115
+
116
+ define_method :negative_failure_message do
117
+ negative_failure_message % [@receiver.inspect, @expected.inspect, @options.inspect]
118
+ end
119
+ end
120
+ const_set(name, matcher)
121
+ end
122
+ end
123
+
124
+ matcher "Be",
125
+ "Expected %s to be %s.",
126
+ "Expected %s not to be %s." do |receiver|
127
+ @receiver = receiver
128
+ @expected.class === receiver
129
+ end
130
+
131
+ matcher "BeInstanceOf",
132
+ "Expected %s to be an instance of %s.",
133
+ "Expected %s not to be an instance of %s." do |receiver|
134
+ @receiver = receiver
135
+ receiver.instance_of? @expected
136
+ end
137
+
138
+ # matcher "BeKindOf",
139
+ # "Expected %s to be a kind of %s.",
140
+ # "Expected %s not to be a kind of %s." do |receiver|
141
+ # @receiver = receiver
142
+ # receiver.kind_of? @expected
143
+ # end
144
+
145
+ matcher "BeEmpty",
146
+ "Expected %s to be empty.",
147
+ "Expected %s not to be empty." do |receiver|
148
+ @receiver = receiver
149
+ receiver.empty?
150
+ end
151
+
152
+ matcher "BeBlank",
153
+ "Expected %s to be blank.",
154
+ "Expected %s not to be blank." do |receiver|
155
+ @receiver = receiver
156
+ receiver.blank?
157
+ end
158
+
159
+ matcher "BeValid",
160
+ "Expected %s to be valid.",
161
+ "Expected %s not to be valid." do |receiver|
162
+ @receiver = receiver
163
+ receiver.valid?
164
+ end
165
+
166
+ matcher "BeFile",
167
+ "Expected the file %s to exist.",
168
+ "Expected the file %s not to exist." do |receiver|
169
+ @receiver = receiver
170
+ File.file?(receiver)
171
+ end
172
+
173
+ matcher "BeDirectory",
174
+ "Expected the directory %s to exist.",
175
+ "Expected the directory %s not to exist." do |receiver|
176
+ @receiver = receiver
177
+ File.directory?(receiver)
178
+ end
179
+
180
+ matcher "HaveTrackingEnabled",
181
+ "Expected %s to have tracking enabled.",
182
+ "Expected %s to not have tracking enabled." do |receiver|
183
+ @receiver = receiver
184
+ receiver.tracking_enabled?
185
+ end
186
+
187
+ # matcher "RespondTo",
188
+ # "Expected %s to respond to %s.",
189
+ # "Expected %s not to respond to %s." do |receiver|
190
+ # @receiver = receiver
191
+ # receiver.respond_to? @expected
192
+ # end
193
+
194
+ matcher "ValidatePresenceOf",
195
+ "Expected %s to validate the presence of %s.",
196
+ "Expected %s not to validate the presence of %s." do |receiver|
197
+ receiver = receiver.new if receiver.is_a?(Class)
198
+ @receiver = receiver
199
+
200
+ # stubs the method given as @options[:if] on the receiver
201
+ RR.stub(receiver).__creator__.create(@options[:if]).returns(true) if @options[:if]
202
+
203
+ receiver.send("#{@expected}=", nil)
204
+ !receiver.valid? && receiver.errors.invalid?(@expected)
205
+ end
206
+
207
+ matcher "ValidateLengthOf",
208
+ "Expected %s to validate the length of %s (with %s).",
209
+ "Expected %s not to validate the length of %s (with %s)." do |receiver|
210
+ receiver = receiver.new if receiver.is_a?(Class)
211
+ @receiver = receiver
212
+
213
+ max = @options[:within] || @options[:is]
214
+ max = max.last if max.respond_to?(:last)
215
+
216
+ value = receiver.send(@expected).to_s
217
+ value = 'x' if value.blank?
218
+ value = (value * (max + 1))[0, max + 1]
219
+
220
+ receiver.send("#{@expected}=", value)
221
+ !receiver.valid? && receiver.errors.invalid?(@expected)
222
+ end
223
+
224
+
225
+ matcher "BeChildOf",
226
+ "Expected %s to be a child of %s.",
227
+ "Expected %s not to be a child of %s." do |receiver|
228
+ @receiver = receiver
229
+ @receiver.parent == @expected
230
+ end
231
+
232
+ matcher "BeA",
233
+ "Expected %s to be a(n) %s.",
234
+ "Expected %s not to be a(n) %s." do |receiver|
235
+ @receiver = receiver
236
+ @receiver.is_a?(@expected)
237
+ end
238
+
239
+ matcher "BeFrozen",
240
+ "Expected %s to be frozen.",
241
+ "Expected %s not to be frozen." do |receiver|
242
+ @receiver = receiver
243
+ @receiver.frozen?
244
+ end
245
+
246
+ matcher "BeNewRecord",
247
+ "Expected %s to be a new record.",
248
+ "Expected %s not to be a new record." do |receiver|
249
+ @receiver = receiver
250
+ @receiver.new_record?
251
+ end
252
+
253
+ class ValidateUniquenessOf < Base
254
+ def matches?(model)
255
+ RR.reset
256
+ @receiver = model
257
+ scopes = Array(@options[:scope])
258
+ args = !scopes.empty? ? RR.satisfy { |args| scopes.each { |scope| args.first =~ /.#{scope} (=|IS) \?/ } } : RR.anything
259
+
260
+ class_hierarchy = [model.class]
261
+ while class_hierarchy.first != ActiveRecord::Base
262
+ class_hierarchy.unshift(class_hierarchy.first.superclass)
263
+ end
264
+ finder_class = class_hierarchy.detect { |klass| !klass.abstract_class? }
265
+
266
+ RR.mock(finder_class).exists?.with(args).returns true
267
+ !model.valid? && model.errors.invalid?(@expected)
268
+ RR.verify
269
+ true
270
+ rescue RR::Errors::RRError => e
271
+ false
272
+ end
273
+
274
+ def failure_message
275
+ "Expected #{@receiver.class.name} to validate the uniqueness of #{@expected.inspect}" +
276
+ (@options[:scope] ? " with scope #{@options[:scope].inspect}." : '.')
277
+ end
278
+
279
+ def negative_failure_message
280
+ "Expected #{@receiver.class.name} not to validate the uniqueness of #{@expected.inspect}" +
281
+ (@options[:scope] ? " with scope #{@options[:scope].inspect}." : '.')
282
+ end
283
+ end
284
+
285
+ class Association < Base
286
+ def initialize(test_case, type, expected, options = {})
287
+ @type = type
288
+ @options = options
289
+ super expected, test_case
290
+ end
291
+
292
+ def matches?(model)
293
+ @receiver = model
294
+ model = model.class if model.is_a? ActiveRecord::Base
295
+ !!model.reflect_on_all_associations(@type).find do |a|
296
+ a.name == @expected and options_match?(a.options)
297
+ end
298
+ end
299
+
300
+ def options_match?(options)
301
+ @options.each do |key, value|
302
+ return false if !options.has_key?(key) || options[key] != value
303
+ end
304
+ true
305
+ end
306
+
307
+ def failure_message
308
+ "Expected #{@receiver.class.name} to #{@type} #{@expected.inspect}."
309
+ end
310
+
311
+ def negative_failure_message
312
+ "Expected #{@receiver.class.name} not to #{@type} #{@expected.inspect}."
313
+ end
314
+ end
315
+
316
+ class AssertSelect < Base
317
+ def initialize(assertion, test_case, *args, &block)
318
+ super nil, test_case
319
+ @assertion = assertion
320
+ @args = args
321
+ @block = block
322
+ end
323
+
324
+ def matches?(response_or_text, &block)
325
+ if ActionController::TestResponse === response_or_text and
326
+ response_or_text.headers.key?('Content-Type') and
327
+ !response_or_text.headers['Content-Type'].blank? and
328
+ response_or_text.headers['Content-Type'].to_sym == :xml
329
+ @args.unshift(HTML::Document.new(response_or_text.body, false, true).root)
330
+ elsif String === response_or_text
331
+ @args.unshift(HTML::Document.new(response_or_text).root)
332
+ end
333
+ @block = block if block
334
+ begin
335
+ @test_case.send(@assertion, *@args, &@block)
336
+ rescue ::Test::Unit::AssertionFailedError => @error
337
+ end
338
+
339
+ @error.nil?
340
+ end
341
+
342
+ def failure_message; @error.message; end
343
+ def negative_failure_message; "should not #{description}, but did"; end
344
+
345
+ def description
346
+ case @assertion
347
+ when :assert_select then "have tag#{format_args(*@args)}"
348
+ when :assert_select_email then "send email#{format_args(*@args)}"
349
+ end
350
+ end
351
+
352
+ protected
353
+ def format_args(*args)
354
+ return "" if args.empty?
355
+ return "(#{arg_list(*args)})"
356
+ end
357
+
358
+ def arg_list(*args)
359
+ args.collect do |arg|
360
+ arg.respond_to?(:description) ? arg.description : arg.inspect
361
+ end.join(", ")
362
+ end
363
+ end
364
+ end
365
+ end