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,330 @@
1
+ require "test_helper"
2
+
3
+ class ActiveRecordTest < ActiveSupport::TestCase
4
+
5
+ context "build_search_conditions" do
6
+
7
+ should "work for Post (title)" do
8
+ output = Post.build_search_conditions("search", "bacon")
9
+
10
+ expected = case ENV["DB"]
11
+ when "postgresql"
12
+ "LOWER(TEXT(posts.title)) LIKE '%bacon%'"
13
+ else
14
+ "posts.title LIKE '%bacon%'"
15
+ end
16
+
17
+ assert_equal expected, output
18
+ end
19
+
20
+ should "work for Comment (email, body)" do
21
+ output = Comment.build_search_conditions("search", "bacon")
22
+
23
+ expected = case ENV["DB"]
24
+ when "postgresql"
25
+ ["LOWER(TEXT(comments.body)) LIKE '%bacon%'",
26
+ "LOWER(TEXT(comments.email)) LIKE '%bacon%'"]
27
+ else
28
+ ["comments.body LIKE '%bacon%'",
29
+ "comments.email LIKE '%bacon%'"]
30
+ end
31
+
32
+ expected.each { |e| assert_match e, output }
33
+ assert_match /OR/, output
34
+ end
35
+
36
+ should "generate conditions for id" do
37
+ Post.stubs(:typus_defaults_for).with(:search).returns(["id"])
38
+
39
+ expected = case ENV["DB"]
40
+ when "postgresql"
41
+ "LOWER(TEXT(posts.id)) LIKE '%1%'"
42
+ else
43
+ "posts.id LIKE '%1%'"
44
+ end
45
+ output = Post.build_search_conditions("search", "1")
46
+
47
+ assert_equal expected, output
48
+ end
49
+
50
+ should "generate conditions for fields starting with equal" do
51
+ Post.expects(:typus_defaults_for).with(:search).returns(["=id"])
52
+
53
+ expected = case ENV["DB"]
54
+ when "postgresql"
55
+ "LOWER(TEXT(posts.id)) LIKE '1'"
56
+ else
57
+ "posts.id LIKE '1'"
58
+ end
59
+ output = Post.build_search_conditions("search", "1")
60
+
61
+ assert_equal expected, output
62
+ end
63
+
64
+ should "generate conditions for fields starting with ^" do
65
+ Post.expects(:typus_defaults_for).with(:search).returns(["^id"])
66
+
67
+ expected = case ENV["DB"]
68
+ when "postgresql"
69
+ "LOWER(TEXT(posts.id)) LIKE '1%'"
70
+ else
71
+ "posts.id LIKE '1%'"
72
+ end
73
+ output = Post.build_search_conditions("search", "1")
74
+
75
+ assert_equal expected, output
76
+ end
77
+
78
+ end
79
+
80
+ context "build_boolean_conditions" do
81
+
82
+ should "return true" do
83
+ expected = {'status'=>true}
84
+ output = Page.build_boolean_conditions('status', 'true')
85
+ assert_equal expected, output
86
+ end
87
+
88
+ should "return false" do
89
+ expected = {'status'=>false}
90
+ output = Page.build_boolean_conditions('status', 'false')
91
+ assert_equal expected, output
92
+ end
93
+
94
+ end
95
+
96
+ context "build_datetime_conditions" do
97
+
98
+ setup do
99
+ @tomorrow = Time.zone.now.beginning_of_day.tomorrow.to_s(:db)
100
+ end
101
+
102
+ [["today", 0.days.ago.beginning_of_day.to_s(:db)],
103
+ ["last_few_days", 3.days.ago.beginning_of_day.to_s(:db)],
104
+ ["last_7_days", 6.days.ago.beginning_of_day.to_s(:db)],
105
+ ["last_30_days", 30.days.ago.beginning_of_day.to_s(:db)]].each do |interval|
106
+
107
+ should "generate the condition for #{interval.first}" do
108
+ output = Article.build_datetime_conditions('created_at', interval.first).first
109
+ assert_equal "articles.created_at BETWEEN ? AND ?", output
110
+ end
111
+
112
+ should "work for #{interval.first}" do
113
+ expected = [interval.last, @tomorrow]
114
+ output = Article.build_datetime_conditions('created_at', interval.first)[1..-1]
115
+ assert_equal expected, output
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+
122
+ context "build_date_conditions" do
123
+
124
+ setup do
125
+ @tomorrow = Date.tomorrow.to_s(:db)
126
+ end
127
+
128
+ should "generate the condition for today (which is an special case)" do
129
+ output = Article.build_date_conditions('created_at', "today").first
130
+ assert_equal "articles.created_at BETWEEN ? AND ?", output
131
+ end
132
+
133
+ should "work for today (which is an special case)" do
134
+ expected = [0.days.ago.to_date.to_s(:db), 0.days.ago.tomorrow.to_date.to_s(:db)]
135
+ output = Article.build_date_conditions('created_at', "today")[1..-1]
136
+ assert_equal expected, output
137
+ end
138
+
139
+ [["last_few_days", 3.days.ago.to_date.to_s(:db)],
140
+ ["last_7_days", 6.days.ago.to_date.to_s(:db)],
141
+ ["last_30_days", 30.days.ago.to_date.to_s(:db)]].each do |interval|
142
+
143
+ should "generate the condition for #{interval.first}" do
144
+ output = Article.build_date_conditions('created_at', interval.first).first
145
+ assert_equal "articles.created_at BETWEEN ? AND ?", output
146
+ end
147
+
148
+ should "work for #{interval.first}" do
149
+ expected = [interval.last, @tomorrow]
150
+ output = Article.build_date_conditions('created_at', interval.first)[1..-1]
151
+ assert_equal expected, output
152
+ end
153
+
154
+ end
155
+
156
+ end
157
+
158
+ context "build_string_conditions" do
159
+
160
+ should "work" do
161
+ expected = {'test'=>'true'}
162
+ output = Page.build_string_conditions('test', 'true')
163
+ assert_equal expected, output
164
+ end
165
+
166
+ end
167
+
168
+ context "build_has_many_conditions" do
169
+
170
+ should "work" do
171
+ expected = ["projects.id = ?", "1"]
172
+ output = User.build_has_many_conditions('projects', '1')
173
+ assert_equal expected, output
174
+ end
175
+
176
+ should_eventually "work for non standard primary keys"
177
+
178
+ end
179
+
180
+ context "build_conditions" do
181
+
182
+ should "return an array" do
183
+ params = { :search => '1' }
184
+ assert Post.build_conditions(params).is_a?(Array)
185
+ end
186
+
187
+ should "return_sql_conditions_on_search_for_typus_user" do
188
+ expected = case ENV["DB"]
189
+ when "postgresql"
190
+ ["LOWER(TEXT(typus_users.first_name)) LIKE '%francesc%'",
191
+ "LOWER(TEXT(typus_users.last_name)) LIKE '%francesc%'",
192
+ "LOWER(TEXT(typus_users.email)) LIKE '%francesc%'",
193
+ "LOWER(TEXT(typus_users.role)) LIKE '%francesc%'"]
194
+ else
195
+ ["typus_users.first_name LIKE '%francesc%'",
196
+ "typus_users.last_name LIKE '%francesc%'",
197
+ "typus_users.email LIKE '%francesc%'",
198
+ "typus_users.role LIKE '%francesc%'"]
199
+ end
200
+
201
+ [{:search =>"francesc"}, {:search => "Francesc"}].each do |params|
202
+ expected.each do |expect|
203
+ assert_match expect, TypusUser.build_conditions(params).first
204
+ end
205
+ assert_no_match /AND/, TypusUser.build_conditions(params).first
206
+ end
207
+ end
208
+
209
+ should "return_sql_conditions_on_search_and_filter_for_typus_user" do
210
+ expected = case ENV["DB"]
211
+ when "postgresql"
212
+ ["LOWER(TEXT(typus_users.role)) LIKE '%francesc%'",
213
+ "LOWER(TEXT(typus_users.last_name)) LIKE '%francesc%'",
214
+ "LOWER(TEXT(typus_users.email)) LIKE '%francesc%'",
215
+ "LOWER(TEXT(typus_users.first_name)) LIKE '%francesc%'"]
216
+ else
217
+ ["typus_users.first_name LIKE '%francesc%'",
218
+ "typus_users.last_name LIKE '%francesc%'",
219
+ "typus_users.email LIKE '%francesc%'",
220
+ "typus_users.role LIKE '%francesc%'"]
221
+ end
222
+
223
+ params = { :search => "francesc", :status => "true" }
224
+
225
+ Factory(:typus_user, :email => "francesc.one@example.com")
226
+ Factory(:typus_user, :email => "francesc.dos@example.com", :status => false)
227
+
228
+ resource = TypusUser
229
+ resource.build_conditions(params).each do |condition|
230
+ resource = resource.where(condition)
231
+ end
232
+
233
+ assert_equal 1, resource.count
234
+ assert_equal ["francesc.one@example.com"], resource.map(&:email)
235
+ end
236
+
237
+ should "return_sql_conditions_on_filtering_typus_users_by_status true" do
238
+ params = { :status => "true" }
239
+ expected = { :status => true }
240
+ assert_equal expected, TypusUser.build_conditions(params).first
241
+ end
242
+
243
+ should "return_sql_conditions_on_filtering_typus_users_by_status false" do
244
+ params = { :status => "false" }
245
+ expected = { :status => false }
246
+ assert_equal expected, TypusUser.build_conditions(params).first
247
+ end
248
+
249
+ should "return_sql_conditions_on_filtering_typus_users_by_created_at today" do
250
+ expected = ["typus_users.created_at BETWEEN ? AND ?",
251
+ Time.zone.now.beginning_of_day.to_s(:db),
252
+ Time.zone.now.beginning_of_day.tomorrow.to_s(:db)]
253
+ params = { :created_at => "today" }
254
+
255
+ assert_equal expected, TypusUser.build_conditions(params).first
256
+ end
257
+
258
+ should "return_sql_conditions_on_filtering_typus_users_by_created_at last_few_days" do
259
+ expected = ["typus_users.created_at BETWEEN ? AND ?",
260
+ 3.days.ago.beginning_of_day.to_s(:db),
261
+ Time.zone.now.beginning_of_day.tomorrow.to_s(:db)]
262
+ params = { :created_at => "last_few_days" }
263
+
264
+ assert_equal expected, TypusUser.build_conditions(params).first
265
+ end
266
+
267
+ should "return_sql_conditions_on_filtering_typus_users_by_created_at last_7_days" do
268
+ expected = ["typus_users.created_at BETWEEN ? AND ?",
269
+ 6.days.ago.beginning_of_day.to_s(:db),
270
+ Time.zone.now.beginning_of_day.tomorrow.to_s(:db)]
271
+ params = { :created_at => "last_7_days" }
272
+
273
+ assert_equal expected, TypusUser.build_conditions(params).first
274
+ end
275
+
276
+ should "return_sql_conditions_on_filtering_typus_users_by_created_at last_30_days" do
277
+ expected = ["typus_users.created_at BETWEEN ? AND ?",
278
+ 30.days.ago.beginning_of_day.to_s(:db),
279
+ Time.zone.now.beginning_of_day.tomorrow.to_s(:db)]
280
+ params = { :created_at => "last_30_days" }
281
+
282
+ assert_equal expected, TypusUser.build_conditions(params).first
283
+ end
284
+
285
+ should "return_sql_conditions_on_filtering_posts_by_published_at today" do
286
+ expected = ["posts.published_at BETWEEN ? AND ?",
287
+ Time.zone.now.beginning_of_day.to_s(:db),
288
+ Time.zone.now.beginning_of_day.tomorrow.to_s(:db)]
289
+ params = { :published_at => "today" }
290
+
291
+ assert_equal expected, Post.build_conditions(params).first
292
+ end
293
+
294
+ should "return_sql_conditions_on_filtering_posts_by_string" do
295
+ params = { :role => "admin" }
296
+ assert_equal params, TypusUser.build_conditions(params).first
297
+ end
298
+
299
+ end
300
+
301
+ context "build_joins" do
302
+
303
+ setup do
304
+ @project = Factory(:project)
305
+ 2.times { Factory(:project) }
306
+ end
307
+
308
+ should "return the expected joins" do
309
+ params = { :projects => @project.id }
310
+ assert_equal [:projects], User.build_joins(params)
311
+ end
312
+
313
+ ##
314
+ # Get all user which are on project 1
315
+ #
316
+
317
+ should "work when users are filtered by projects" do
318
+ params = { :projects => @project.id }
319
+
320
+ @resource = User
321
+ @resource.build_conditions(params).each { |c| @resource = @resource.where(c) }
322
+ @resource.build_joins(params).each { |j| @resource = @resource.joins(j) }
323
+
324
+ assert_equal 1, @resource.count
325
+ assert_equal [@project.user.id], @resource.map(&:id)
326
+ end
327
+
328
+ end
329
+
330
+ end
@@ -0,0 +1,53 @@
1
+ require "test_helper"
2
+
3
+ class RegexTest < ActiveSupport::TestCase
4
+
5
+ context "email_regex" do
6
+
7
+ should "match valid emails" do
8
+ ["john@example.com",
9
+ "john+locke@example.com",
10
+ "john.locke@example.com",
11
+ "john.locke@example.us"].each do |value|
12
+ assert_match Typus::Regex::Email, value
13
+ end
14
+ end
15
+
16
+ should "not match invalid emails" do
17
+ [%Q(this_is_chelm@example.com\n<script>location.href="http://spammersite.com"</script>),
18
+ "admin",
19
+ "TEST@EXAMPLE.COM",
20
+ "test@example",
21
+ "test@example.c",
22
+ "testexample.com"].each do |value|
23
+ assert_no_match Typus::Regex::Email, value
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ context "uri_regex" do
30
+
31
+ should "match valid urls" do
32
+ ["http://example.com",
33
+ "http://www.example.com",
34
+ "http://www.example.es",
35
+ "http://www.example.co.uk",
36
+ "http://four.sentenc.es",
37
+ "http://www.ex-ample.com"].each do |value|
38
+ assert_match Typus::Regex::Url, value
39
+ end
40
+ end
41
+
42
+ should "not match invalid urls" do
43
+ [%Q(this_is_chelm@example.com\n<script>location.href="http://spammersite.com"</script>),
44
+ "example.com",
45
+ "http://examplecom",
46
+ "http://ex+ample.com"].each do |value|
47
+ assert_no_match Typus::Regex::Url, value
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,41 @@
1
+ require "test_helper"
2
+
3
+ class ResourcesTest < ActiveSupport::TestCase
4
+
5
+ should "return action_after_save" do
6
+ assert_equal "edit", Typus::Resources.action_after_save
7
+ end
8
+
9
+ should "return default_action_on_item" do
10
+ assert_equal "edit", Typus::Resources.default_action_on_item
11
+ end
12
+
13
+ should "return end_year" do
14
+ assert_nil Typus::Resources.end_year
15
+ end
16
+
17
+ should "return form_rows" do
18
+ assert_equal 15, Typus::Resources.form_rows
19
+ end
20
+
21
+ should "return minute_step" do
22
+ assert_equal 5, Typus::Resources.minute_step
23
+ end
24
+
25
+ should "return only_user_items" do
26
+ assert !Typus::Resources.only_user_items
27
+ end
28
+
29
+ should "return per_page" do
30
+ assert_equal 15, Typus::Resources.per_page
31
+ end
32
+
33
+ should "return sortable" do
34
+ assert Typus::Resources.sortable
35
+ end
36
+
37
+ should "return start_year" do
38
+ assert_nil Typus::Resources.start_year
39
+ end
40
+
41
+ end
@@ -0,0 +1,141 @@
1
+ require "test_helper"
2
+
3
+ class TypusTest < ActiveSupport::TestCase
4
+
5
+ should "verify default_config for autocomplete" do
6
+ assert_equal 100, Typus.autocomplete
7
+ end
8
+
9
+ should "verify default_config for admin_title" do
10
+ assert_equal "Typus", Typus.admin_title
11
+ end
12
+
13
+ should "verify default_config for admin_sub_title" do
14
+ assert Typus.admin_sub_title.is_a?(String)
15
+ end
16
+
17
+ should "verify default_config for authentication" do
18
+ assert_equal :session, Typus.authentication
19
+ end
20
+
21
+ should "verify default_config for mailer_sender" do
22
+ assert_nil Typus.mailer_sender
23
+ end
24
+
25
+ should "verify default_config for username" do
26
+ assert_equal "admin", Typus.username
27
+ end
28
+
29
+ should "verify default_config for password" do
30
+ assert_equal "columbia", Typus.password
31
+ end
32
+
33
+ context "file management" do
34
+
35
+ context "paperclip" do
36
+
37
+ should "verify default_config for file_preview" do
38
+ assert_equal :medium, Typus.file_preview
39
+ end
40
+
41
+ should "verify default_config for file_thumbnail" do
42
+ assert_equal :thumb, Typus.file_thumbnail
43
+ end
44
+
45
+ end
46
+
47
+ context "dragonfly" do
48
+
49
+ should "verify default_config for image_preview_size" do
50
+ assert_equal "x450", Typus.image_preview_size
51
+ end
52
+
53
+ should "verify default_config for image_thumb_size" do
54
+ assert_equal "150x150#", Typus.image_thumb_size
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ should "verify default_config for relationship" do
62
+ assert_equal "typus_users", Typus.relationship
63
+ end
64
+
65
+ should "verify default_config for master_role" do
66
+ assert_equal "admin", Typus.master_role
67
+ end
68
+
69
+ should "verify config_folder is a Pathname" do
70
+ assert Typus.config_folder.is_a?(Pathname)
71
+ end
72
+
73
+ should "return applications sorted" do
74
+ expected = ["Admin", "CRUD", "CRUD Extended", "HasManyThrough", "HasOne", "Polymorphic", "STI"]
75
+ assert_equal expected, Typus.applications
76
+ end
77
+
78
+ should "return modules of the CRUD Extended application" do
79
+ expected = ["Asset", "Category", "Comment", "Page", "Post"]
80
+ assert_equal expected, Typus.application("CRUD Extended")
81
+ end
82
+
83
+ should "return models and should be sorted" do
84
+ expected = ["Animal",
85
+ "Asset",
86
+ "Bird",
87
+ "Case",
88
+ "Category",
89
+ "Comment",
90
+ "Dog",
91
+ "Entry",
92
+ "ImageHolder",
93
+ "Invoice",
94
+ "Order",
95
+ "Page",
96
+ "Post",
97
+ "Project",
98
+ "ProjectCollaborator",
99
+ "TypusUser",
100
+ "User",
101
+ "View"]
102
+ assert_equal expected, Typus.models
103
+ end
104
+
105
+ should "verify resources class_method" do
106
+ assert_equal %w(Git Status WatchDog), Typus.resources
107
+ end
108
+
109
+ context "user_class" do
110
+
111
+ should "return default value" do
112
+ assert_equal TypusUser, Typus.user_class
113
+ end
114
+
115
+ end
116
+
117
+ context "user_class_name" do
118
+
119
+ should "return default value" do
120
+ assert_equal "TypusUser", Typus.user_class_name
121
+ end
122
+
123
+ should "be overrided on demand" do
124
+ assert Typus.respond_to?("user_class_name=")
125
+ end
126
+
127
+ end
128
+
129
+ context "user_fk" do
130
+
131
+ should "return default value" do
132
+ assert_equal "typus_user_id", Typus.user_fk
133
+ end
134
+
135
+ should "be overrided on demand" do
136
+ assert Typus.respond_to?("user_fk=")
137
+ end
138
+
139
+ end
140
+
141
+ end