typus 3.0.6 → 3.0.7

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 (295) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +9 -5
  4. data/Rakefile +34 -21
  5. data/app/controllers/admin/base_controller.rb +0 -4
  6. data/app/controllers/admin/resources_controller.rb +77 -213
  7. data/app/controllers/admin/session_controller.rb +1 -1
  8. data/app/helpers/admin/base_helper.rb +4 -4
  9. data/app/helpers/admin/dashboard_helper.rb +1 -3
  10. data/app/helpers/admin/display_helper.rb +49 -0
  11. data/app/helpers/admin/file_preview_helper.rb +10 -12
  12. data/app/helpers/admin/filters_helper.rb +1 -1
  13. data/app/helpers/admin/form_helper.rb +2 -13
  14. data/app/helpers/admin/list_helper.rb +14 -3
  15. data/app/helpers/admin/relationships_helper.rb +79 -62
  16. data/app/helpers/admin/resources_helper.rb +17 -16
  17. data/app/helpers/admin/search_helper.rb +1 -1
  18. data/app/helpers/admin/sidebar_helper.rb +1 -2
  19. data/app/helpers/admin/table_helper.rb +9 -4
  20. data/app/views/admin/helpers/_file_preview.html.erb +1 -1
  21. data/app/views/admin/helpers/base/_apps.html.erb +23 -0
  22. data/app/views/admin/helpers/{_flash_message.html.erb → base/_flash_message.html.erb} +0 -0
  23. data/app/views/admin/helpers/{_header.html.erb → base/_header.html.erb} +0 -0
  24. data/app/views/admin/helpers/{_login_info.html.erb → base/_login_info.html.erb} +0 -0
  25. data/app/views/admin/helpers/resources/_display_link_to_previous.html.erb +1 -1
  26. data/app/views/admin/resources/show.html.erb +4 -27
  27. data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +11 -0
  28. data/app/views/admin/templates/_has_n.html.erb +1 -1
  29. data/app/views/admin/templates/_has_one.html.erb +3 -3
  30. data/app/views/admin/templates/_relate_form.html.erb +1 -1
  31. data/app/views/admin/templates/_relate_form_with_autocomplete.html.erb +24 -0
  32. data/app/views/layouts/admin/base.html.erb +15 -9
  33. data/app/views/layouts/admin/headless.html.erb +44 -0
  34. data/app/views/layouts/admin/session.html.erb +3 -2
  35. data/doc/hudson_setup.md +19 -0
  36. data/lib/generators/typus/assets_generator.rb +0 -4
  37. data/lib/generators/typus/config_generator.rb +107 -0
  38. data/lib/generators/typus/controller_generator.rb +0 -4
  39. data/lib/generators/typus/initializers_generator.rb +22 -0
  40. data/lib/generators/typus/migration_generator.rb +0 -4
  41. data/lib/generators/typus/typus_generator.rb +8 -101
  42. data/lib/generators/typus/views_generator.rb +0 -4
  43. data/lib/support/active_record.rb +8 -2
  44. data/lib/support/fake_user.rb +2 -0
  45. data/lib/support/hash.rb +1 -1
  46. data/lib/support/string.rb +3 -3
  47. data/lib/tasks/typus.rake +1 -1
  48. data/lib/typus.rb +15 -6
  49. data/lib/typus/controller/actions.rb +69 -0
  50. data/lib/typus/controller/associations.rb +82 -0
  51. data/lib/typus/controller/autocomplete.rb +16 -0
  52. data/lib/typus/controller/filters.rb +24 -0
  53. data/lib/typus/controller/format.rb +70 -0
  54. data/lib/typus/orm/active_record.rb +9 -240
  55. data/lib/typus/orm/active_record/class_methods.rb +227 -0
  56. data/lib/typus/orm/active_record/instance_methods.rb +13 -0
  57. data/lib/typus/orm/active_record/search.rb +17 -5
  58. data/lib/typus/orm/active_record/user.rb +157 -0
  59. data/lib/typus/regex.rb +11 -0
  60. data/lib/typus/version.rb +1 -1
  61. data/test/app/controllers/admin/account_controller_test.rb +104 -0
  62. data/test/app/controllers/admin/assets_controller_test.rb +153 -0
  63. data/test/app/controllers/admin/base_controller_test.rb +41 -0
  64. data/test/app/controllers/admin/birds_controller_test.rb +42 -0
  65. data/test/app/controllers/admin/cases_controller_test.rb +21 -0
  66. data/test/app/controllers/admin/categories_controller_test.rb +141 -0
  67. data/test/app/controllers/admin/comments_controller_test.rb +79 -0
  68. data/test/app/controllers/admin/dashboard_controller_test.rb +162 -0
  69. data/test/app/controllers/admin/image_holders_controller_test.rb +75 -0
  70. data/test/app/controllers/admin/invoices_controller_test.rb +78 -0
  71. data/test/app/controllers/admin/orders_controller_test.rb +18 -0
  72. data/test/app/controllers/admin/pages_controller_test.rb +37 -0
  73. data/test/app/controllers/admin/posts_controller_test.rb +745 -0
  74. data/test/app/controllers/admin/projects_controller_test.rb +52 -0
  75. data/test/app/controllers/admin/session_controller_test.rb +92 -0
  76. data/test/app/controllers/admin/status_controller_test.rb +54 -0
  77. data/test/app/controllers/admin/typus_users_controller_test.rb +160 -0
  78. data/test/app/controllers/admin/users_controller_test.rb +106 -0
  79. data/test/app/helpers/admin/base_helper_test.rb +83 -0
  80. data/test/app/helpers/admin/dashboard_helper_test.rb +32 -0
  81. data/test/app/helpers/admin/file_preview_helper_test.rb +82 -0
  82. data/test/app/helpers/admin/filters_helper_test.rb +161 -0
  83. data/test/app/helpers/admin/form_helper_test.rb +126 -0
  84. data/test/app/helpers/admin/list_helper_test.rb +59 -0
  85. data/test/app/helpers/admin/relationships_helper_test.rb +19 -0
  86. data/test/app/helpers/admin/resources_helper_test.rb +46 -0
  87. data/test/app/helpers/admin/search_helper_test.rb +60 -0
  88. data/test/app/helpers/admin/sidebar_helper_test.rb +34 -0
  89. data/test/app/helpers/admin/table_helper_test.rb +215 -0
  90. data/test/app/mailers/admin/mailer_test.rb +32 -0
  91. data/test/app/models/typus_user_roles_test.rb +124 -0
  92. data/test/app/models/typus_user_test.rb +194 -0
  93. data/test/config/routes_test.rb +29 -0
  94. data/test/factories.rb +111 -0
  95. data/test/fixtures/config/broken/application.yml +68 -0
  96. data/test/fixtures/config/broken/application_roles.yml +20 -0
  97. data/test/fixtures/config/broken/empty.yml +0 -0
  98. data/test/fixtures/config/broken/empty_roles.yml +0 -0
  99. data/test/fixtures/config/broken/undefined.yml +3 -0
  100. data/test/fixtures/config/broken/undefined_roles.yml +6 -0
  101. data/test/fixtures/config/default/typus.yml +13 -0
  102. data/test/fixtures/config/default/typus_roles.yml +2 -0
  103. data/test/fixtures/config/empty/empty_01.yml +0 -0
  104. data/test/fixtures/config/empty/empty_01_roles.yml +0 -0
  105. data/test/fixtures/config/empty/empty_02.yml +0 -0
  106. data/test/fixtures/config/empty/empty_02_roles.yml +0 -0
  107. data/test/fixtures/config/locales/es.yml +10 -0
  108. data/test/fixtures/config/namespaced/application.yml +5 -0
  109. data/test/fixtures/config/namespaced/application_roles.yml +2 -0
  110. data/test/fixtures/config/ordered/001_roles.yml +2 -0
  111. data/test/fixtures/config/ordered/002_roles.yml +2 -0
  112. data/test/fixtures/config/unordered/app_one_roles.yml +2 -0
  113. data/test/fixtures/config/unordered/app_two_roles.yml +2 -0
  114. data/test/fixtures/rails_app/.gitignore +4 -0
  115. data/test/fixtures/rails_app/Capfile +6 -0
  116. data/test/fixtures/rails_app/README +256 -0
  117. data/test/fixtures/rails_app/Rakefile +7 -0
  118. data/test/fixtures/rails_app/app/controllers/admin/animals_controller.rb +2 -0
  119. data/test/fixtures/rails_app/app/controllers/admin/articles_controller.rb +2 -0
  120. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +51 -0
  121. data/test/fixtures/rails_app/app/controllers/admin/birds_controller.rb +2 -0
  122. data/test/fixtures/rails_app/app/controllers/admin/cases_controller.rb +2 -0
  123. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +2 -0
  124. data/test/fixtures/rails_app/app/controllers/admin/comments_controller.rb +2 -0
  125. data/test/fixtures/rails_app/app/controllers/admin/dogs_controller.rb +2 -0
  126. data/test/fixtures/rails_app/app/controllers/admin/entries_controller.rb +2 -0
  127. data/test/fixtures/rails_app/app/controllers/admin/image_holders_controller.rb +2 -0
  128. data/test/fixtures/rails_app/app/controllers/admin/invoices_controller.rb +2 -0
  129. data/test/fixtures/rails_app/app/controllers/admin/orders_controller.rb +2 -0
  130. data/test/fixtures/rails_app/app/controllers/admin/pages_controller.rb +7 -0
  131. data/test/fixtures/rails_app/app/controllers/admin/posts_controller.rb +2 -0
  132. data/test/fixtures/rails_app/app/controllers/admin/project_collaborators_controller.rb +2 -0
  133. data/test/fixtures/rails_app/app/controllers/admin/projects_controller.rb +2 -0
  134. data/test/fixtures/rails_app/app/controllers/admin/status_controller.rb +2 -0
  135. data/test/fixtures/rails_app/app/controllers/admin/typus_users_controller.rb +2 -0
  136. data/test/fixtures/rails_app/app/controllers/admin/users_controller.rb +2 -0
  137. data/test/fixtures/rails_app/app/controllers/admin/views_controller.rb +2 -0
  138. data/test/fixtures/rails_app/app/controllers/admin/watch_dog_controller.rb +2 -0
  139. data/test/fixtures/rails_app/app/controllers/application_controller.rb +3 -0
  140. data/test/fixtures/rails_app/app/helpers/application_helper.rb +2 -0
  141. data/test/fixtures/rails_app/app/helpers/form_helper.rb +3 -0
  142. data/test/fixtures/rails_app/app/models/animal.rb +21 -0
  143. data/test/fixtures/rails_app/app/models/article.rb +10 -0
  144. data/test/fixtures/rails_app/app/models/asset.rb +39 -0
  145. data/test/fixtures/rails_app/app/models/bird.rb +2 -0
  146. data/test/fixtures/rails_app/app/models/case.rb +2 -0
  147. data/test/fixtures/rails_app/app/models/category.rb +31 -0
  148. data/test/fixtures/rails_app/app/models/comment.rb +17 -0
  149. data/test/fixtures/rails_app/app/models/delayed/task.rb +5 -0
  150. data/test/fixtures/rails_app/app/models/dog.rb +2 -0
  151. data/test/fixtures/rails_app/app/models/entry.rb +23 -0
  152. data/test/fixtures/rails_app/app/models/image_holder.rb +21 -0
  153. data/test/fixtures/rails_app/app/models/invoice.rb +10 -0
  154. data/test/fixtures/rails_app/app/models/order.rb +9 -0
  155. data/test/fixtures/rails_app/app/models/page.rb +24 -0
  156. data/test/fixtures/rails_app/app/models/post.rb +32 -0
  157. data/test/fixtures/rails_app/app/models/project.rb +17 -0
  158. data/test/fixtures/rails_app/app/models/project_collaborator.rb +16 -0
  159. data/test/fixtures/rails_app/app/models/typus_user.rb +22 -0
  160. data/test/fixtures/rails_app/app/models/user.rb +10 -0
  161. data/test/fixtures/rails_app/app/models/view.rb +17 -0
  162. data/test/fixtures/rails_app/app/views/admin/assets/_index.html.erb +3 -0
  163. data/test/fixtures/rails_app/app/views/admin/cases/_index.html.erb +3 -0
  164. data/test/fixtures/rails_app/app/views/admin/categories/_index.html.erb +3 -0
  165. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +11 -0
  166. data/test/fixtures/rails_app/app/views/admin/entries/_index.html.erb +3 -0
  167. data/test/fixtures/rails_app/app/views/admin/pages/_index.html.erb +3 -0
  168. data/test/fixtures/rails_app/app/views/admin/posts/_edit.html.erb +1 -0
  169. data/test/fixtures/rails_app/app/views/admin/posts/_index.html.erb +5 -0
  170. data/test/fixtures/rails_app/app/views/admin/posts/_new.html.erb +1 -0
  171. data/test/fixtures/rails_app/app/views/admin/posts/_show.html.erb +1 -0
  172. data/test/fixtures/rails_app/app/views/admin/resources/_sidebar.html.erb +1 -0
  173. data/test/fixtures/rails_app/app/views/admin/status/index.html.erb +9 -0
  174. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +1 -0
  175. data/test/fixtures/rails_app/app/views/admin/watch_dog/index.html.erb +9 -0
  176. data/test/fixtures/rails_app/app/views/layouts/admin/headless.html.erb +38 -0
  177. data/test/fixtures/rails_app/config.ru +4 -0
  178. data/test/fixtures/rails_app/config/application.rb +44 -0
  179. data/test/fixtures/rails_app/config/boot.rb +13 -0
  180. data/test/fixtures/rails_app/config/database.yml +34 -0
  181. data/test/fixtures/rails_app/config/deploy.rb +32 -0
  182. data/test/fixtures/rails_app/config/environment.rb +5 -0
  183. data/test/fixtures/rails_app/config/environments/development.rb +32 -0
  184. data/test/fixtures/rails_app/config/environments/production.rb +54 -0
  185. data/test/fixtures/rails_app/config/environments/test.rb +40 -0
  186. data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  187. data/test/fixtures/rails_app/config/initializers/dragonfly.rb +1 -0
  188. data/test/fixtures/rails_app/config/initializers/inflections.rb +12 -0
  189. data/test/fixtures/rails_app/config/initializers/mime_types.rb +5 -0
  190. data/test/fixtures/rails_app/config/initializers/secret_token.rb +7 -0
  191. data/test/fixtures/rails_app/config/initializers/session_store.rb +8 -0
  192. data/test/fixtures/rails_app/config/initializers/typus.rb +5 -0
  193. data/test/fixtures/rails_app/config/initializers/typus_resources.rb +27 -0
  194. data/test/fixtures/rails_app/config/locales/en.yml +5 -0
  195. data/test/fixtures/rails_app/config/routes.rb +61 -0
  196. data/test/fixtures/rails_app/config/typus/README +68 -0
  197. data/test/fixtures/rails_app/config/typus/crud_basic.yml +10 -0
  198. data/test/fixtures/rails_app/config/typus/crud_basic_roles.yml +2 -0
  199. data/test/fixtures/rails_app/config/typus/crud_extended.yml +64 -0
  200. data/test/fixtures/rails_app/config/typus/crud_extended_roles.yml +18 -0
  201. data/test/fixtures/rails_app/config/typus/has_many.yml +0 -0
  202. data/test/fixtures/rails_app/config/typus/has_many_roles.yml +0 -0
  203. data/test/fixtures/rails_app/config/typus/has_many_through.yml +23 -0
  204. data/test/fixtures/rails_app/config/typus/has_many_through_roles.yml +4 -0
  205. data/test/fixtures/rails_app/config/typus/has_one.yml +12 -0
  206. data/test/fixtures/rails_app/config/typus/has_one_roles.yml +3 -0
  207. data/test/fixtures/rails_app/config/typus/polymorphic.yml +17 -0
  208. data/test/fixtures/rails_app/config/typus/polymorphic_roles.yml +5 -0
  209. data/test/fixtures/rails_app/config/typus/resource_roles.yml +7 -0
  210. data/test/fixtures/rails_app/config/typus/sti.yml +5 -0
  211. data/test/fixtures/rails_app/config/typus/sti_roles.yml +2 -0
  212. data/test/fixtures/rails_app/config/typus/typus.yml +13 -0
  213. data/test/fixtures/rails_app/config/typus/typus_roles.yml +2 -0
  214. data/test/fixtures/rails_app/config/typus/unknown.yml +3 -0
  215. data/test/fixtures/rails_app/config/typus/unknown_roles.yml +5 -0
  216. data/test/fixtures/rails_app/db/.gitkeep +0 -0
  217. data/test/fixtures/rails_app/db/schema.rb +174 -0
  218. data/test/fixtures/rails_app/db/seeds.rb +54 -0
  219. data/test/fixtures/rails_app/db/seeds/assets/000.jpg +0 -0
  220. data/test/fixtures/rails_app/db/seeds/assets/001.jpg +0 -0
  221. data/test/fixtures/rails_app/db/seeds/assets/002.jpg +0 -0
  222. data/test/fixtures/rails_app/db/seeds/assets/003.jpg +0 -0
  223. data/test/fixtures/rails_app/db/seeds/assets/004.jpg +0 -0
  224. data/test/fixtures/rails_app/public/404.html +26 -0
  225. data/test/fixtures/rails_app/public/422.html +26 -0
  226. data/test/fixtures/rails_app/public/500.html +26 -0
  227. data/test/fixtures/rails_app/public/favicon.ico +0 -0
  228. data/test/fixtures/rails_app/public/images/rails.png +0 -0
  229. data/test/fixtures/rails_app/public/javascripts/application.js +2 -0
  230. data/test/fixtures/rails_app/public/javascripts/controls.js +965 -0
  231. data/test/fixtures/rails_app/public/javascripts/dragdrop.js +974 -0
  232. data/test/fixtures/rails_app/public/javascripts/effects.js +1123 -0
  233. data/test/fixtures/rails_app/public/javascripts/prototype.js +6001 -0
  234. data/test/fixtures/rails_app/public/javascripts/rails.js +175 -0
  235. data/test/fixtures/rails_app/public/robots.txt +5 -0
  236. data/test/fixtures/rails_app/public/stylesheets/.gitkeep +0 -0
  237. data/test/fixtures/rails_app/script/rails +6 -0
  238. data/test/lib/support/active_record_test.rb +150 -0
  239. data/test/lib/support/fake_user_test.rb +59 -0
  240. data/test/lib/support/hash_test.rb +29 -0
  241. data/test/lib/support/object_test.rb +17 -0
  242. data/test/lib/support/string_test.rb +116 -0
  243. data/test/lib/typus/configuration_test.rb +46 -0
  244. data/test/lib/typus/controller/actions_test.rb +141 -0
  245. data/test/lib/typus/controller/associations_test.rb +7 -0
  246. data/test/lib/typus/controller/autocomplete_test.rb +7 -0
  247. data/test/lib/typus/controller/filters_test.rb +73 -0
  248. data/test/lib/typus/controller/format_test.rb +7 -0
  249. data/test/lib/typus/i18n_test.rb +9 -0
  250. data/test/lib/typus/orm/active_record/class_methods_test.rb +378 -0
  251. data/test/lib/typus/orm/active_record/search_test.rb +330 -0
  252. data/test/lib/typus/regex_test.rb +53 -0
  253. data/test/lib/typus/resources_test.rb +41 -0
  254. data/test/lib/typus_test.rb +141 -0
  255. data/test/test_helper.rb +15 -0
  256. data/typus.gemspec +25 -0
  257. metadata +586 -64
  258. data/Gemfile.lock +0 -149
  259. data/app/views/admin/helpers/_apps.html.erb +0 -9
  260. data/lib/generators/templates/public/admin/javascripts/application.js +0 -2
  261. data/lib/generators/templates/public/admin/javascripts/jquery-1.4.4.min.js +0 -167
  262. data/lib/generators/templates/public/admin/javascripts/jquery.application.js +0 -16
  263. data/lib/generators/templates/public/admin/javascripts/jquery.rails.js +0 -160
  264. data/lib/generators/templates/public/admin/javascripts/jquery.searchField.js +0 -91
  265. data/lib/generators/templates/public/admin/stylesheets/application.css +0 -11
  266. data/lib/generators/templates/public/admin/stylesheets/screen.css +0 -367
  267. data/lib/generators/templates/public/admin/vendor/fancybox/blank.gif +0 -0
  268. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_close.png +0 -0
  269. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_loading.png +0 -0
  270. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_left.png +0 -0
  271. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_right.png +0 -0
  272. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_e.png +0 -0
  273. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_n.png +0 -0
  274. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_ne.png +0 -0
  275. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_nw.png +0 -0
  276. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_s.png +0 -0
  277. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_se.png +0 -0
  278. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_sw.png +0 -0
  279. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_w.png +0 -0
  280. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_left.png +0 -0
  281. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_main.png +0 -0
  282. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_over.png +0 -0
  283. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_right.png +0 -0
  284. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-x.png +0 -0
  285. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-y.png +0 -0
  286. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox.png +0 -0
  287. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.easing-1.3.pack.js +0 -72
  288. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.css +0 -359
  289. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.js +0 -1156
  290. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.pack.js +0 -46
  291. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.mousewheel-3.0.4.pack.js +0 -14
  292. data/lib/typus/actions.rb +0 -41
  293. data/lib/typus/filters.rb +0 -12
  294. data/lib/typus/format.rb +0 -70
  295. data/lib/typus/user.rb +0 -157
@@ -0,0 +1,41 @@
1
+ require "test_helper"
2
+
3
+ =begin
4
+
5
+ What's being tested here?
6
+
7
+ - Access to user_guide.
8
+ - ...
9
+
10
+ =end
11
+
12
+ class Admin::BaseControllerTest < ActionController::TestCase
13
+
14
+ context "non-authenticated" do
15
+
16
+ should "not be able to get the user_guide" do
17
+ get :user_guide
18
+ assert_response :redirect
19
+ assert_redirected_to new_admin_session_path(:back_to => '/admin/user_guide')
20
+ end
21
+
22
+ end
23
+
24
+ context "authenticated" do
25
+
26
+ setup do
27
+ @request.session[:typus_user_id] = Factory(:typus_user).id
28
+ end
29
+
30
+ teardown do
31
+ @request.session[:typus_user_id] = nil
32
+ end
33
+
34
+ should "be able to get the user_guide" do
35
+ get :user_guide
36
+ assert_response :success
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,42 @@
1
+ require "test_helper"
2
+
3
+ =begin
4
+
5
+ What's being tested here?
6
+
7
+ - Polymorphic associations.
8
+
9
+ =end
10
+
11
+ class Admin::BirdsControllerTest < ActionController::TestCase
12
+
13
+ setup do
14
+ @typus_user = Factory(:typus_user)
15
+ @request.session[:typus_user_id] = @typus_user.id
16
+ end
17
+
18
+ context "relate" do
19
+
20
+ setup do
21
+ @bird = Factory(:bird)
22
+ @image_holder = Factory(:image_holder)
23
+
24
+ @request.env['HTTP_REFERER'] = "/admin/birds/edit/#{@bird.id}"
25
+ end
26
+
27
+ should "work" do
28
+ assert_difference('@bird.image_holders.count') do
29
+ post :relate, { :id => @bird.id,
30
+ :related => { :model => 'ImageHolder',
31
+ :id => @image_holder.id,
32
+ :association_name => 'image_holders' } }
33
+ end
34
+
35
+ assert_response :redirect
36
+ assert_redirected_to @request.env['HTTP_REFERER']
37
+ assert_equal "Bird successfully updated.", flash[:notice]
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+
3
+ =begin
4
+
5
+ What's being tested here?
6
+
7
+ - Single Table Inheritance Stuff
8
+ - Relate objects.
9
+ - Unrelate objects.
10
+ - Create (and relate objects).
11
+
12
+ =end
13
+
14
+ class Admin::CasesControllerTest < ActionController::TestCase
15
+
16
+ setup do
17
+ @typus_user = Factory(:typus_user)
18
+ @request.session[:typus_user_id] = @typus_user.id
19
+ end
20
+
21
+ end
@@ -0,0 +1,141 @@
1
+ require "test_helper"
2
+
3
+ =begin
4
+
5
+ What's being tested here?
6
+
7
+ - ActsAsList.
8
+ - Template Override (TODO: Centralize this!!!)
9
+ - Unrelate (Post#categories) (has_and_belongs_to_many)
10
+
11
+ =end
12
+
13
+ class Admin::CategoriesControllerTest < ActionController::TestCase
14
+
15
+ setup do
16
+ @request.session[:typus_user_id] = Factory(:typus_user).id
17
+ @request.env['HTTP_REFERER'] = '/admin/categories'
18
+ end
19
+
20
+ context "Categories Views" do
21
+
22
+ should_eventually "verify form partial can overrided by model" do
23
+ get :new
24
+ assert_match "categories#_form.html.erb", @response.body
25
+ end
26
+
27
+ end
28
+
29
+ context "Categories List" do
30
+
31
+ setup do
32
+ @first_category = Factory(:category, :position => 1)
33
+ @second_category = Factory(:category, :position => 2)
34
+
35
+ @second_category.name = nil
36
+ @second_category.save(:validate => false)
37
+ end
38
+
39
+ should "verify referer" do
40
+ get :position, { :id => @first_category.id, :go => 'move_lower' }
41
+ assert_response :redirect
42
+ assert_redirected_to @request.env['HTTP_REFERER']
43
+ end
44
+
45
+ should "position item one step down" do
46
+ get :position, { :id => @first_category.id, :go => 'move_lower' }
47
+
48
+ assert_equal "Category successfully updated.", flash[:notice]
49
+ assert_equal 2, @first_category.reload.position
50
+ assert_equal 1, @second_category.reload.position
51
+ end
52
+
53
+ should "position item one step up" do
54
+ get :position, { :id => @second_category.id, :go => 'move_higher' }
55
+
56
+ assert_equal "Category successfully updated.", flash[:notice]
57
+ assert_equal 2, @first_category.reload.position
58
+ assert_equal 1, @second_category.reload.position
59
+ end
60
+
61
+ should "position top item to bottom" do
62
+ get :position, { :id => @first_category.id, :go => 'move_to_bottom' }
63
+ assert_equal "Category successfully updated.", flash[:notice]
64
+ assert_equal 2, @first_category.reload.position
65
+ end
66
+
67
+ should "position bottom item to top" do
68
+ get :position, { :id => @second_category.id, :go => 'move_to_top' }
69
+ assert_equal "Category successfully updated.", flash[:notice]
70
+ assert_equal 1, @second_category.reload.position
71
+ end
72
+
73
+ end
74
+
75
+ context "Unrelate (has_and_belongs_to_many)" do
76
+
77
+ ##
78
+ # We are in:
79
+ #
80
+ # /admin/posts/edit/1
81
+ #
82
+ # And we see a list of comments under it:
83
+ #
84
+ # /admin/categories/unrelate/1?resource=Post&resource_id=1
85
+ # /admin/categories/unrelate/2?resource=Post&resource_id=1
86
+ ##
87
+
88
+ setup do
89
+ @category = Factory(:category)
90
+ @category.posts << Factory(:post)
91
+ @request.env['HTTP_REFERER'] = "/admin/dashboard"
92
+ end
93
+
94
+ should "unrelate category from post" do
95
+ assert_difference('@category.posts.count', -1) do
96
+ post :unrelate, { :id => @category.id, :resource => 'Post', :resource_id => @category.posts.first }
97
+ end
98
+
99
+ assert_response :redirect
100
+ assert_redirected_to @request.env['HTTP_REFERER']
101
+ assert_equal "Post successfully updated.", flash[:notice]
102
+ end
103
+
104
+ end
105
+
106
+ ##
107
+ # Basically we verify Admin::ResourcesController#create_with_back_to works
108
+ # as expected for STI models.
109
+ #
110
+ # We are editing a Case (which is an STI model). And we click on "Add New"
111
+ # to add a new category. Once create, we will be redirected and the new
112
+ # category will be assigned to the current case. Easy right?
113
+ #
114
+ # /admin/categories/new?back_to=%2Fadmin%2Fcases%2Fedit%1F2&resource=Case&resource_id=2
115
+ #
116
+ context "Relate using Add New on STI models" do
117
+
118
+ setup do
119
+ @category = { :name => "Category Name" }
120
+ end
121
+
122
+ context "when editing an item" do
123
+
124
+ setup do
125
+ @case = Factory(:case)
126
+ end
127
+
128
+ should "create new category and redirect to case" do
129
+ assert_difference('@case.categories.count') do
130
+ post :create, { :category => @category,
131
+ :resource => "Case", :resource_id => @case.id }
132
+ end
133
+ assert_response :redirect
134
+ assert_redirected_to "/admin/cases/edit/#{@case.id}"
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+
141
+ end
@@ -0,0 +1,79 @@
1
+ require "test_helper"
2
+
3
+ =begin
4
+
5
+ What's being tested here?
6
+
7
+ - Unrelate "Comment" from "Post" (Post#comments)
8
+ - Search by "Posts.title" (Post#comments)
9
+
10
+ =end
11
+
12
+ class Admin::CommentsControllerTest < ActionController::TestCase
13
+
14
+ setup do
15
+ @request.session[:typus_user_id] = Factory(:typus_user).id
16
+ @request.env['HTTP_REFERER'] = '/admin/categories'
17
+ end
18
+
19
+ context "Unrelate" do
20
+
21
+ ##
22
+ # We are in:
23
+ #
24
+ # /admin/posts/edit/1
25
+ #
26
+ # And we see a list of comments under it:
27
+ #
28
+ # /admin/comments/unrelate/1?resource=Post&resource_id=1
29
+ # /admin/comments/unrelate/2?resource=Post&resource_id=1
30
+ #
31
+ # Notice that unrelating an item doesn't remove it from database unless
32
+ # defined on the model.
33
+ #
34
+ ##
35
+
36
+ should "unrelate comment from post" do
37
+ comment = Factory(:comment)
38
+ @post = comment.post
39
+
40
+ assert_difference('@post.comments.count', -1) do
41
+ post :unrelate, { :id => comment.id, :resource => 'Post', :resource_id => @post.id }
42
+ end
43
+
44
+ assert comment.reload.post.nil?
45
+
46
+ assert_response :redirect
47
+ assert_redirected_to @request.env['HTTP_REFERER']
48
+ assert_equal "Post successfully updated.", flash[:notice]
49
+ end
50
+
51
+ end
52
+
53
+ context "Search" do
54
+
55
+ ##
56
+ # We are in:
57
+ #
58
+ # /admin/posts
59
+ #
60
+ # And we can search by "posts.title" because "Comment" is belongs_to :post
61
+ #
62
+ #
63
+ ##
64
+
65
+ should "search in Posts.title from Comments list" do
66
+ post_1 = Factory(:post, :title => "A title with_keyword")
67
+ comment_1 = Factory(:comment, :post => post_1)
68
+
69
+ post_2 = Factory(:post, :title => "A title without_keyword")
70
+ comment_2 = Factory(:comment, :post => post_2)
71
+
72
+ post :index, {:search => "with_keyword" }
73
+ assert_equal [comment_1], assigns(:items)
74
+ assert_not_equal [comment_2], assigns(:items)
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,162 @@
1
+ require "test_helper"
2
+
3
+ class Admin::DashboardControllerTest < ActionController::TestCase
4
+
5
+ context "When authentication is http_basic" do
6
+
7
+ setup do
8
+ Admin::DashboardController.send :include, Typus::Authentication::HttpBasic
9
+ end
10
+
11
+ should "return a 401 message when no credentials sent" do
12
+ get :show
13
+ assert_response :unauthorized
14
+ end
15
+
16
+ should "authenticate user with valid password" do
17
+ @request.env['HTTP_AUTHORIZATION'] = 'Basic ' + Base64::encode64("admin:columbia")
18
+ get :show
19
+ assert_response :success
20
+ end
21
+
22
+ should "not authenticate user with invalid password" do
23
+ @request.env['HTTP_AUTHORIZATION'] = 'Basic ' + Base64::encode64("admin:admin")
24
+ get :show
25
+ assert_response :unauthorized
26
+ end
27
+
28
+ end
29
+
30
+ context "When authentication is none" do
31
+
32
+ setup do
33
+ Admin::DashboardController.send :include, Typus::Authentication::None
34
+ end
35
+
36
+ should "render dashboard" do
37
+ get :show
38
+ assert_response :success
39
+ end
40
+
41
+ end
42
+
43
+ context "Not logged" do
44
+
45
+ setup do
46
+ @request.session[:typus_user_id] = nil
47
+ end
48
+
49
+ should "redirect to sign in when not signed in" do
50
+ get :show
51
+ assert_response :redirect
52
+ assert_redirected_to new_admin_session_path
53
+ end
54
+
55
+ end
56
+
57
+ should "verify_a_removed_role_cannot_sign_in" do
58
+ typus_user = Factory(:typus_user, :role => "removed")
59
+ @request.session[:typus_user_id] = typus_user.id
60
+
61
+ get :show
62
+
63
+ assert_response :redirect
64
+ assert_redirected_to new_admin_session_path
65
+ assert_nil @request.session[:typus_user_id]
66
+ end
67
+
68
+ context "Admin is logged and gets dashboard" do
69
+
70
+ setup do
71
+ @typus_user = Factory(:typus_user)
72
+ @request.session[:typus_user_id] = @typus_user.id
73
+ get :show
74
+ end
75
+
76
+ teardown do
77
+ TypusUser.delete_all
78
+ end
79
+
80
+ should "render dashboard" do
81
+ assert_response :success
82
+ assert_template "show"
83
+ end
84
+
85
+ should "render admin layout" do
86
+ assert_template "layouts/admin/base"
87
+ end
88
+
89
+ should "verify title" do
90
+ assert_select "title", "Typus &mdash; Dashboard"
91
+ end
92
+
93
+ should "verify link to session sign out" do
94
+ link = %(href="/admin/session")
95
+ assert_match link, @response.body
96
+ end
97
+
98
+ should "verify link to edit user" do
99
+ link = %(href="/admin/typus_users/edit/#{@request.session[:typus_user_id]})
100
+ assert_match link, @response.body
101
+ end
102
+
103
+ should "verify we can set our own partials" do
104
+ partials = %w( _sidebar.html.erb )
105
+ partials.each { |p| assert_match p, @response.body }
106
+ end
107
+
108
+ end
109
+
110
+ context "Security" do
111
+
112
+ setup do
113
+ @typus_user = Factory(:typus_user)
114
+ @request.session[:typus_user_id] = @typus_user.id
115
+ end
116
+
117
+ teardown do
118
+ TypusUser.delete_all
119
+ end
120
+
121
+ should "block users_on_the_fly" do
122
+ @typus_user.status = false
123
+ @typus_user.save
124
+
125
+ get :show
126
+
127
+ assert_response :redirect
128
+ assert_redirected_to new_admin_session_path
129
+ assert_nil @request.session[:typus_user_id]
130
+ end
131
+
132
+ should "sign out user when role does not longer exist" do
133
+ @typus_user.role = 'unexisting'
134
+ @typus_user.save
135
+
136
+ get :show
137
+
138
+ assert_response :redirect
139
+ assert_redirected_to new_admin_session_path
140
+ assert_nil @request.session[:typus_user_id]
141
+ end
142
+
143
+ end
144
+
145
+ context "When designer is logged in" do
146
+
147
+ setup do
148
+ @request.session[:typus_user_id] = Factory(:typus_user, :role => "designer").id
149
+ get :show
150
+ end
151
+
152
+ should "not have links to new posts" do
153
+ assert_no_match /\/admin\/posts\/new/, @response.body
154
+ end
155
+
156
+ should "not have links to new typus_users" do
157
+ assert_no_match /\/admin\/typus_users\/new/, @response.body
158
+ end
159
+
160
+ end
161
+
162
+ end