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,119 @@
1
+ # # require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+ #
3
+ # require 'rubygems'
4
+ # require 'action_controller'
5
+ # require 'action_view'
6
+ # require 'active_support'
7
+ # require 'action_view/test_case'
8
+ #
9
+ # $:.unshift File.expand_path(File.dirname(__FILE__) + '/../../../lib')
10
+ # require 'menu'
11
+ #
12
+ # class MenuTest < ActionView::TestCase
13
+ # def setup
14
+ # super
15
+ # @old_instances = Menu.instances
16
+ # Menu.instances.clear
17
+ # @view = ActionView::Base.new(File.expand_path(File.dirname(__FILE__) + '/../../fixtures/templates/menu'))
18
+ # @view.request = ActionController::TestRequest.new
19
+ #
20
+ # @menu = Menu.instance('foo')
21
+ # @item = Menu::Item.new(:foo)
22
+ # @collection = [Menu::Item.new(:bar), Menu::Item.new(:baz)]
23
+ # end
24
+ #
25
+ # def teardown
26
+ # super
27
+ # Menu.instances = @old_instances
28
+ # end
29
+ #
30
+ # test "Menu.instance creates a new instance and adds the given definition block" do
31
+ # Menu.instance('foo') { }
32
+ # assert_equal 1, Menu.instances.size
33
+ # assert_equal 1, Menu.instances['foo'].definitions.size
34
+ # end
35
+ #
36
+ # test "apply_definitions evaluates registered definition blocks" do
37
+ # menu = Menu.instance('foo') do
38
+ # item 'bar', :foo => :bar
39
+ # menu 'baz'
40
+ # end
41
+ #
42
+ # menu.send :apply_definitions, @view
43
+ # assert menu.items.first.is_a?(Menu::Item)
44
+ # assert menu.items.second.is_a?(Menu::Base)
45
+ # end
46
+ #
47
+ # test "definition blocks can call methods on the passed view" do
48
+ # menu = Menu.instance('foo') do
49
+ # item 'bar', :url => url_for('that urly')
50
+ # end
51
+ # menu.send :apply_definitions, @view
52
+ #
53
+ # assert_equal 'that urly', menu.items.first.options[:url]
54
+ # end
55
+ #
56
+ # test "renders expected results" do
57
+ # menu = Menu.instance('foo') do
58
+ # item 'bar', :url => '#'
59
+ # baz = menu 'baz', :caption => 'baz'
60
+ # baz.item 'buz', :url => '#'
61
+ # end
62
+ # expected = '<ul class="menu">' +
63
+ # '<li><a href="#">bar</a></li>' +
64
+ # %(<li>\n\t\t\tbaz\n\t\t\t<ul class="menu"><li><a href="#">buz</a></li></ul></li>) +
65
+ # '</ul>'
66
+ # assert_equal expected, menu.render(@view).gsub(/>\s+</, '><')
67
+ # end
68
+ #
69
+ # # insert_at_position
70
+ #
71
+ # test "insert_at_position with :before => :first prepends the object to the array" do
72
+ # @menu.send(:insert_at_position, @item, @collection, :_first, nil)
73
+ # assert_equal [:foo, :bar, :baz], @collection.map(&:id)
74
+ # end
75
+ #
76
+ # test "insert_at_position with :after => :last appends the object to the array" do
77
+ # @menu.send(:insert_at_position, @item, @collection, nil, :_last)
78
+ # assert_equal [:bar, :baz, :foo], @collection.map(&:id)
79
+ # end
80
+ #
81
+ # test "insert_at_position with :before => :baz inserts the object before the item :baz (if found)" do
82
+ # @menu.send(:insert_at_position, @item, @collection, :baz, nil)
83
+ # assert_equal [:bar, :foo, :baz], @collection.map(&:id)
84
+ # end
85
+ #
86
+ # test "insert_at_position with :after => :bar inserts the object after the item :bar (if found)" do
87
+ # @menu.send(:insert_at_position, @item, @collection, nil, :bar)
88
+ # assert_equal [:bar, :foo, :baz], @collection.map(&:id)
89
+ # end
90
+ #
91
+ # test "insert_at_position with :before => :buh appends the object if :buh can not be found" do
92
+ # @menu.send(:insert_at_position, @item, @collection, :buh, nil)
93
+ # assert_equal [:bar, :baz, :foo], @collection.map(&:id)
94
+ # end
95
+ #
96
+ # # populate
97
+ #
98
+ # test "populates menu from given populator" do
99
+ # menu = Menu.instance('foo') do
100
+ # menu 'bar', :populate => lambda { [item(:baz), item(:buz)] }
101
+ # end
102
+ # menu.send :apply_definitions, @view
103
+ # assert menu.items.first.is_a?(Menu::Base)
104
+ # assert_equal [Menu::Item], menu.items.first.items.map { |item| item.class }.uniq
105
+ # end
106
+ #
107
+ # # highlight
108
+ #
109
+ # test "highlights something" do
110
+ # menu = Menu.instance('foo') do
111
+ # baz = menu 'bar', :url => '/bar'
112
+ # baz.item 'baz', :url => '/a/bar/baz'
113
+ # end
114
+ # @view.request.path = '/a/bar/baz'
115
+ # assert_match %r(<li class="active"><a href="/a/bar/baz">baz</a>), menu.render(@view).gsub(/[\t\n]+/, '')
116
+ # end
117
+ #
118
+ #
119
+ # end
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ class ContentForTestController < ActionController::Base
4
+ content_for(:sidebar, :foo, :except => { :action => :show }) { 'foo' }
5
+
6
+ def index
7
+ render :inline => "<%= yield :sidebar %>"
8
+ end
9
+ end
10
+
11
+ ActionController::Routing::Routes.draw do |map|
12
+ map.connect 'content_for_test/:action/:id', :controller => 'content_for_test'
13
+ end
14
+
15
+ # class ContentForAssignmentsTest < ActionController::TestCase
16
+ # tests ContentForTestController
17
+ #
18
+ # test "it renders to content_for symbol" do
19
+ # @controller.process(@request, @response)
20
+ # @response.body.should == 'foo'
21
+ # end
22
+ # end
23
+
24
+ class ContentForAssignmentsConditionsTest < ActionController::TestCase
25
+ tests ContentForTestController
26
+
27
+ def setup
28
+ super
29
+ @controller.action_name = 'index'
30
+ @view = Object.new
31
+ stub(@view).controller.returns(@controller)
32
+ stub(@view).template_format.returns(:html)
33
+ end
34
+
35
+ # test "registers content_for options" do
36
+ # content = @controller.registered_contents[:foo]
37
+ # content.options[:except][:action].should == :show
38
+ # content.content.should be_kind_of(Proc)
39
+ # end
40
+
41
+ # test "applies when no options were given" do
42
+ # content = RegisteredContent.new :foo, :bar
43
+ # content.applies?(@view).should be_true
44
+ # end
45
+
46
+ test "applies when controller was included and no action excluded" do
47
+ content = RegisteredContent.new :foo, :bar, :only => { :controller => 'content_for_test' }
48
+ content.applies?(@view).should be_true
49
+ end
50
+
51
+ # test "applies when action was included and no controller excluded" do
52
+ # content = RegisteredContent.new :foo, :bar, :only => { :action => 'index' }
53
+ # content.applies?(@view).should be_true
54
+ # end
55
+ #
56
+ # test "does not apply when a different controller was included" do
57
+ # content = RegisteredContent.new :foo, :bar, :only => { :controller => 'something_else' }
58
+ # content.applies?(@view).should be_false
59
+ # end
60
+ #
61
+ # test "does not apply when a different action was included" do
62
+ # content = RegisteredContent.new :foo, :bar, :only => { :action => 'something_else' }
63
+ # content.applies?(@view).should be_false
64
+ # end
65
+ #
66
+ # test "does not apply when controller was excluded" do
67
+ # content = RegisteredContent.new :foo, :bar, :except => { :controller => 'content_for_test' }
68
+ # content.applies?(@view).should be_false
69
+ # end
70
+ #
71
+ # test "does not apply when action was excluded" do
72
+ # content = RegisteredContent.new :foo, :bar, :except => { :action => 'index' }
73
+ # content.applies?(@view).should be_false
74
+ # end
75
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ class PluginConfigurationTest < ActiveSupport::TestCase
4
+ def setup
5
+ super
6
+ @site = Site.first or flunk('could not find Site')
7
+ @plugin = Rails.plugins[:test_plugin].clone
8
+ @plugin.owner = @site
9
+
10
+ Rails::Plugin::Config.delete_all
11
+ end
12
+
13
+ test 'registers the test_plugin' do
14
+ @plugin.should be_instance_of(Rails::Plugin)
15
+ end
16
+
17
+ test 'can not access config when owner has not been set' do
18
+ @plugin.owner = nil
19
+ lambda { @plugin.config }.should raise_error
20
+ end
21
+
22
+ test 'instantiates a new configuration when first accessed' do
23
+ config = @plugin.send(:config)
24
+ config.should be_instance_of(Rails::Plugin::Config)
25
+ config.new_record?.should be_true
26
+ end
27
+
28
+ test 'looks up existing configuration from the database' do
29
+ @plugin.save!
30
+ @plugin.instance_variable_set(:@config, nil)
31
+ config = @plugin.send(:config)
32
+ config.should be_instance_of(Rails::Plugin::Config)
33
+ config.new_record?.should be_false
34
+ end
35
+
36
+ test 'returns default option values by default' do
37
+ @plugin.string.should == 'default string'
38
+ @plugin.text.should == 'default text'
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ class ActiveRecordStickyChangesTest < ActiveSupport::TestCase
4
+ def setup
5
+ super
6
+ @site = Site.first
7
+ end
8
+
9
+ test "does not break dirty tracking" do
10
+ original_title = @site.title
11
+ @site.title = 'changed title'
12
+ @site.title_was.should == original_title
13
+ end
14
+
15
+ test "#state_changes returns [:created] when original state was new record" do
16
+ @site = Site.create! :host => '2.example.com', :title => 'title', :name => 'name'
17
+ @site.state_changes.should == [:created]
18
+ end
19
+
20
+ test "#state_changes returns [:updated] when original state was changed" do
21
+ @site.update_attributes! :title => 'updated title'
22
+ @site.state_changes.should == [:updated]
23
+ end
24
+
25
+ test "#state_changes returns [:deleted] when original state was frozen" do
26
+ @site.destroy
27
+ @site.state_changes.should == [:deleted]
28
+ end
29
+
30
+ test "#state_changes returns an empty array if no state changes are detected" do
31
+ @site.state_changes.should == []
32
+ end
33
+ end
@@ -0,0 +1,91 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+
3
+ $:.unshift File.expand_path(File.dirname(__FILE__) + '/../../../lib')
4
+ require 'registry'
5
+
6
+ class Registry
7
+ @@old_instance = nil
8
+
9
+ class << self
10
+ def backup!
11
+ @@old_instance = defined?(@@instance) ? @@instance.dup : Registry.new
12
+ end
13
+
14
+ def restore!
15
+ @@instance = @@old_instance
16
+ end
17
+ end
18
+ end
19
+
20
+ class RegistryTest < ActiveSupport::TestCase
21
+ def setup
22
+ super
23
+ Registry.backup!
24
+ @registry = Registry.instance
25
+ end
26
+
27
+ def teardown
28
+ super
29
+ Registry.restore!
30
+ end
31
+
32
+ # set
33
+
34
+ test "#set sets stuff" do
35
+ @registry.clear
36
+ @registry.set :foo, :bar
37
+ @registry.should == {:foo => :bar}
38
+ end
39
+
40
+ test "#set sets stuff to nested keys" do
41
+ @registry.clear
42
+ @registry.set :foo, :bar, :baz, :buz
43
+ @registry.should == {:foo => {:bar => {:baz => :buz}}}
44
+ end
45
+
46
+ test "#set recursively turns passed hashes into registries" do
47
+ @registry.clear
48
+ @registry.set :foo, {:bar => {:baz => :buz}}
49
+ @registry.get(:foo).get(:bar).should be_instance_of(Registry)
50
+ end
51
+
52
+ # get
53
+
54
+ test "#get gets stuff from nested keys" do
55
+ @registry.set :foo, :bar, :baz, :buz
56
+ @registry.get(:foo, :bar).should == {:baz => :buz}
57
+ end
58
+
59
+ test "#get returns nil if an intermediary key is missing" do
60
+ @registry.set :foo, :bar, :baz, :buz
61
+ @registry.get(:foo, :missing).should be_nil
62
+ end
63
+
64
+ # alias
65
+
66
+ test "#[] and #[]= should work" do
67
+ @registry[:test] = "test-alias"
68
+ @registry[:test].should == "test-alias"
69
+ end
70
+
71
+ test "#[]= should supports nested keys" do
72
+ @registry[:test1][:test2] = "key"
73
+ @registry[:test1].should == {:test2 => "key"}
74
+ @registry[:test1][:test2].should == "key"
75
+ end
76
+
77
+ # clear
78
+
79
+ test "#clear clears registry" do
80
+ @registry.set :foo, :bar, :baz, :buz
81
+ @registry.get(:foo, :bar).should == {:baz => :buz}
82
+ Registry.clear
83
+ @registry.get(:foo, :bar).should be_nil
84
+ @registry.should be_empty
85
+ end
86
+
87
+ test "#clear returns nil if an intermediary key is missing" do
88
+ @registry.set :foo, :bar, :baz, :buz
89
+ @registry.get(:foo, :missing).should be_nil
90
+ end
91
+ end
@@ -0,0 +1,63 @@
1
+ # require File.dirname(__FILE__) + '/../spec_helper'
2
+ #
3
+ # describe "Routing Filter::Categories" do
4
+ # include SpecRoutingHelper
5
+ # #include SpecMocks
6
+ #
7
+ # describe "#before_recognize_path" do
8
+ # before :each do
9
+ # @category = mock_category
10
+ # @categories_proxy = mock 'categories_proxy', :find_by_path => @category
11
+ # @section = mock_section(:types => ['Page'], :categories => @categories_proxy)
12
+ # Section.stub!(:find).and_return @section
13
+ # Site.stub!(:find_by_host).and_return mock('site', :sections => mock('sections_proxy', :root => @section))
14
+ #
15
+ # end
16
+ #
17
+ # ['', '/de'].each do |locale|
18
+ # describe "given an incoming section and category path with#{locale.blank? ? 'out' : ''} a locale (like #{locale}/sections/:section_id/categories/:category_path)" do
19
+ # controller_name 'base'
20
+ #
21
+ # it "should replace the :category_path with the :category_id" do
22
+ # before_recognize_path(:categories, "#{locale}/sections/1/categories/category").should == "#{locale}/sections/1/categories/1"
23
+ # end
24
+ #
25
+ # it "should replace the :category_path with the :category_id when the path is terminated by a slash" do
26
+ # before_recognize_path(:categories, "#{locale}/sections/1/categories/category/").should == "#{locale}/sections/1/categories/1/"
27
+ # end
28
+ #
29
+ # it "should replace the :category_path with the :category_id when the path has trailing stuff" do
30
+ # before_recognize_path(:categories, "#{locale}/sections/1/categories/category/whatever").should == "#{locale}/sections/1/categories/1/whatever"
31
+ # end
32
+ # end
33
+ #
34
+ # describe "given an incoming category path without a section segment and with#{locale.blank? ? "out" : ""} a locale (like #{locale}/categories/:category_path)" do
35
+ # controller_name "base"
36
+ #
37
+ # it "should replace the :category_path with the :category_id and prepend the section segments" do
38
+ # before_recognize_path(:categories, "#{locale}/categories/category").should == "#{locale}/sections/1/categories/1"
39
+ # end
40
+ #
41
+ # it "should replace the :category_path with the :category_id and prepend the section segments when the path is terminated by a slash" do
42
+ # before_recognize_path(:categories, "#{locale}/categories/category/").should == "#{locale}/sections/1/categories/1/"
43
+ # end
44
+ #
45
+ # it "should replace the :category_path with the :category_id and prepend the section segments when the path has trailing stuff" do
46
+ # before_recognize_path(:categories, "#{locale}/categories/category/whatever").should == "#{locale}/sections/1/categories/1/whatever"
47
+ # end
48
+ # end
49
+ # end
50
+ # end
51
+ #
52
+ # describe "#after_url_helper" do
53
+ # controller_name 'base'
54
+ #
55
+ # before :each do
56
+ # Category.stub!(:find).and_return mock_category
57
+ # end
58
+ #
59
+ # it "should replace a categories/:category_id segment with categories/:category_path" do
60
+ # after_url_helper(:categories, nil, '/categories/1').should == '/categories/category'
61
+ # end
62
+ # end
63
+ # end
@@ -0,0 +1,159 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + '/../../../lib')
3
+ require 'routing_filter/categories'
4
+
5
+ module RoutingFilterTests
6
+ class CategoriesAdminTest < ActiveSupport::TestCase
7
+ def setup
8
+ super
9
+ @filter = RoutingFilter::Sets.new({})
10
+ blog = Blog.first
11
+ site = blog.site
12
+ category = blog.categories.first
13
+ @types = Section.types.map{|type| type.downcase.pluralize }.join('|')
14
+ @category_path = "/admin/sites/#{site.id}/sections/#{blog.id}/categories/#{category.id}/edit"
15
+ @category_locale_path = "/de/admin/sites/#{site.id}/sections/#{blog.id}/categories/#{category.id}/edit"
16
+ end
17
+
18
+ # around_recognize
19
+
20
+ test "#around_recognize does not do any filtering if url starts with /admin" do
21
+ mock(@filter).match_path(@category_path, @types).times(0)
22
+
23
+ @filter.around_recognize(@category_path, 'test') { }
24
+ end
25
+
26
+ test "#around_recognize does not do any filtering if url starts with, for example - /de/admin" do
27
+ mock(@filter).match_path(@category_locale_path, @types).times(0)
28
+
29
+ @filter.around_recognize(@category_locale_path, 'test') { }
30
+ end
31
+
32
+ # around_generate
33
+
34
+ test "#around_generate does not do any filtering if url starts with /admin" do
35
+ assert_equal @filter.around_generate { @category_path.dup }, @category_path
36
+ end
37
+
38
+ test "#around_generate does not do any filtering if url starts with, for example - /de/admin" do
39
+ assert_equal @filter.around_generate { @category_locale_path.dup }, @category_locale_path
40
+ end
41
+ end
42
+
43
+ class CategoriesTest < ActiveSupport::TestCase
44
+ def setup
45
+ super
46
+ @filter = RoutingFilter::Categories.new({})
47
+ @base_route = "/blogs/1/categories/"
48
+ end
49
+
50
+ test "filter is a categories routing filter" do
51
+ assert @filter.is_a?(RoutingFilter::Categories)
52
+ end
53
+
54
+ test "it correctly recognizes the category from url - standard category" do
55
+ standard_category.each do |route|
56
+ has_match_with_route(route)
57
+ assert_equal 'a-category', @filter.match_path(@base_route + route, ['blogs'])[2]
58
+ end
59
+ end
60
+
61
+ test "it correctly recognizes the category from url - child category" do
62
+ child_category.each do |route|
63
+ has_match_with_route(route)
64
+ assert_equal 'a-category/child', @filter.match_path(@base_route + route, ['blogs'])[2]
65
+ end
66
+ end
67
+
68
+ test "it correctly recognizes the category from url - category with digit" do
69
+ category_with_digit.each do |route|
70
+ has_match_with_route(route)
71
+ assert_equal 'category-666', @filter.match_path(@base_route + route, ['blogs'])[2]
72
+ end
73
+ end
74
+
75
+ test "it correctly recognizes the category from url - child category with digit" do
76
+ child_category_with_digit.each do |route|
77
+ has_match_with_route(route)
78
+ assert_equal 'category-666/kid69', @filter.match_path(@base_route + route, ['blogs'])[2]
79
+ end
80
+ end
81
+
82
+ test "it correctly recognizes the category from url - category with digits only" do
83
+ digit_category.each do |route|
84
+ has_match_with_route(route)
85
+ assert_equal '1234', @filter.match_path(@base_route + route, ['blogs'])[2]
86
+ end
87
+ end
88
+
89
+ test "it correctly recognizes the category from url - child category with digits only" do
90
+ digit_child_category.each do |route|
91
+ has_match_with_route(route)
92
+ assert_equal '1234/567', @filter.match_path(@base_route + route, ['blogs'])[2]
93
+ end
94
+ end
95
+
96
+ # test "it correctly recognizes the category from url - category with special characters" do
97
+ # special_character_category.each do |route|
98
+ # has_match_with_route(route)
99
+ # assert_equal '$%&', @filter.match_path(@base_route + route, ['blogs'])[2]
100
+ # end
101
+ # end
102
+ #
103
+ # test "it correctly recognizes the category from url - child category with special characters" do
104
+ # special_character_category.each do |route|
105
+ # has_match_with_route(route)
106
+ # assert_equal '$%&/§"!', @filter.match_path(@base_route + route, ['blogs'])[2]
107
+ # end
108
+ # end
109
+
110
+ test "it fails to recognize four digit child categories" do
111
+ assert_equal '1234', @filter.match_path(@base_route + "1234/5678", ['blogs'])[2]
112
+ end
113
+
114
+ test "it fails to recognize four and two digit parent child combinations under the root category level" do
115
+ assert_equal '1234/56', @filter.match_path(@base_route + "1234/56", ['blogs'])[2]
116
+ assert_equal '1234', @filter.match_path(@base_route + "1234/4567/89", ['blogs'])[2]
117
+ end
118
+
119
+ def has_match_with_route(route)
120
+ assert @filter.match_path(@base_route + route, ['blogs']),
121
+ "#{@base_route + route} does not match with categories routing filter"
122
+ end
123
+
124
+ def standard_category
125
+ %w( a-category a-category/2009 a-category/2009/1 a-category/2009/12 a-category.atom a-category.html a-category.pdf )
126
+ end
127
+
128
+ def child_category
129
+ %w( a-category/child a-category/child/2009 a-category/child/2009/1 a-category/child/2009/12 a-category/child.atom
130
+ a-category/child.html a-category/child.pdf )
131
+ end
132
+
133
+ def category_with_digit
134
+ %w( category-666 category-666/2009 category-666/2009/1 category-666/2009/12 category-666.atom
135
+ category-666.html category-666.pdf )
136
+ end
137
+
138
+ def child_category_with_digit
139
+ %w( category-666/kid69 category-666/kid69/2009 category-666/kid69/2009/1 category-666/kid69/2009/12
140
+ category-666/kid69.atom category-666/kid69.html category-666/kid69.pdf )
141
+ end
142
+
143
+ def digit_category
144
+ %w( 1234 1234/2009 1234/2009/1 1234/2009/12 1234.atom 1234.html 1234.pdf )
145
+ end
146
+
147
+ def digit_child_category
148
+ %w( 1234/567 1234/567/2009 1234/567/2009/1 1234/567/2009/12 1234/567.atom 1234/567.html 1234/567.pdf )
149
+ end
150
+
151
+ def special_character_category
152
+ %w( $%& $%&/2009 $%&/2009/1 $%&/2009/12 $%&.atom $%&.html $%&.pdf )
153
+ end
154
+
155
+ def special_character_children_category
156
+ %w( $%&/§"!" $%&/§"!/2009 $%&/§"!/2009/1 $%&/§"!/2009/12 $%&/§"!.atom $%&/§"!.html $%&/§"!.pdf )
157
+ end
158
+ end
159
+ end