typus 3.0.12 → 3.1.0.rc1

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 (339) hide show
  1. data/Gemfile +10 -16
  2. data/README.md +7 -10
  3. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/blank.gif +0 -0
  4. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_close.png +0 -0
  5. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_loading.png +0 -0
  6. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_nav_left.png +0 -0
  7. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_nav_right.png +0 -0
  8. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_e.png +0 -0
  9. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_n.png +0 -0
  10. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_ne.png +0 -0
  11. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_nw.png +0 -0
  12. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_s.png +0 -0
  13. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_se.png +0 -0
  14. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_sw.png +0 -0
  15. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_shadow_w.png +0 -0
  16. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_title_left.png +0 -0
  17. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_title_main.png +0 -0
  18. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_title_over.png +0 -0
  19. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancy_title_right.png +0 -0
  20. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancybox-x.png +0 -0
  21. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancybox-y.png +0 -0
  22. data/app/assets/{vendor/typus/vendor/jquery.fancybox-1.3.4/fancybox → images/typus}/fancybox.png +0 -0
  23. data/app/assets/javascripts/typus/application.js +7 -0
  24. data/app/assets/{vendor/typus/javascripts/application.js → javascripts/typus/custom.js} +0 -0
  25. data/app/assets/{vendor/typus/javascripts → javascripts/typus}/jquery.application.js +6 -8
  26. data/app/assets/{vendor/typus/javascripts → javascripts/typus}/jquery.rails.autocomplete.js +0 -0
  27. data/app/assets/{vendor/typus/javascripts → javascripts/typus}/jquery.searchField.js +0 -0
  28. data/app/assets/stylesheets/typus/application.css +7 -0
  29. data/app/assets/{vendor/typus/stylesheets/application.css → stylesheets/typus/custom.css} +0 -0
  30. data/app/assets/stylesheets/typus/pagination.css +17 -0
  31. data/app/assets/{vendor/typus/stylesheets → stylesheets/typus}/reset.css +0 -0
  32. data/app/assets/{vendor/typus/stylesheets → stylesheets/typus}/screen.css +2 -27
  33. data/app/assets/vendor/{typus/vendor/jquery-tokeninput → jquery-tokeninput}/css/token-input-facebook.css +0 -0
  34. data/app/assets/vendor/{typus/vendor/jquery-tokeninput → jquery-tokeninput}/css/token-input-mac.css +0 -0
  35. data/app/assets/vendor/{typus/vendor/jquery-tokeninput → jquery-tokeninput}/css/token-input.css +0 -0
  36. data/app/assets/vendor/{typus/vendor/jquery-tokeninput → jquery-tokeninput}/js/jquery.tokeninput.js +0 -0
  37. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  38. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  39. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  40. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  41. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  42. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  43. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  44. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  45. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  46. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  47. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  48. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  49. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  50. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  51. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/css/ui-lightness/jquery-ui-1.8.12.custom.css +0 -0
  52. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/index.html +0 -0
  53. data/app/assets/vendor/{typus/vendor/jquery-ui-1.8.12.custom → jquery-ui-1.8.12.custom}/js/jquery-ui-1.8.12.custom.min.js +0 -0
  54. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/blank.gif +0 -0
  55. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_close.png +0 -0
  56. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_loading.png +0 -0
  57. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_nav_left.png +0 -0
  58. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_nav_right.png +0 -0
  59. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_e.png +0 -0
  60. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_n.png +0 -0
  61. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_ne.png +0 -0
  62. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_nw.png +0 -0
  63. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_s.png +0 -0
  64. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_se.png +0 -0
  65. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_sw.png +0 -0
  66. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_shadow_w.png +0 -0
  67. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_title_left.png +0 -0
  68. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_title_main.png +0 -0
  69. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_title_over.png +0 -0
  70. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancy_title_right.png +0 -0
  71. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancybox-x.png +0 -0
  72. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancybox-y.png +0 -0
  73. data/app/assets/vendor/jquery.fancybox-1.3.4/fancybox/fancybox.png +0 -0
  74. data/app/assets/vendor/{typus/vendor/jquery.fancybox-1.3.4 → jquery.fancybox-1.3.4}/fancybox/jquery.easing-1.3.pack.js +0 -0
  75. data/app/assets/vendor/{typus/vendor/jquery.fancybox-1.3.4 → jquery.fancybox-1.3.4}/fancybox/jquery.fancybox-1.3.4.css +0 -0
  76. data/app/assets/vendor/{typus/vendor/jquery.fancybox-1.3.4 → jquery.fancybox-1.3.4}/fancybox/jquery.fancybox-1.3.4.js +0 -0
  77. data/app/assets/vendor/{typus/vendor/jquery.fancybox-1.3.4 → jquery.fancybox-1.3.4}/fancybox/jquery.fancybox-1.3.4.pack.js +0 -0
  78. data/app/assets/vendor/{typus/vendor/jquery.fancybox-1.3.4 → jquery.fancybox-1.3.4}/fancybox/jquery.mousewheel-3.0.4.pack.js +0 -0
  79. data/app/controllers/admin/base_controller.rb +5 -3
  80. data/app/controllers/admin/resources_controller.rb +3 -7
  81. data/app/controllers/admin/session_controller.rb +2 -5
  82. data/app/helpers/admin/base_helper.rb +1 -1
  83. data/app/helpers/admin/display_helper.rb +0 -2
  84. data/app/helpers/admin/file_preview_helper.rb +10 -10
  85. data/app/helpers/admin/filters_helper.rb +1 -1
  86. data/app/helpers/admin/relationships_helper.rb +20 -21
  87. data/app/helpers/admin/sidebar_helper.rb +1 -8
  88. data/app/helpers/admin/table_helper.rb +8 -8
  89. data/app/views/admin/dashboard/_applications.html.erb +1 -1
  90. data/app/views/admin/helpers/base/_apps.html.erb +2 -7
  91. data/app/views/admin/helpers/base/_header.html.erb +1 -1
  92. data/app/views/admin/helpers/resources/_errors.html.erb +1 -1
  93. data/app/views/admin/helpers/sidebar/_sidebar.html.erb +1 -1
  94. data/app/views/admin/resources/index.html.erb +4 -4
  95. data/app/views/admin/shared/_head.html.erb +2 -17
  96. data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +1 -1
  97. data/app/views/admin/templates/_has_n.html.erb +3 -3
  98. data/app/views/admin/templates/_has_one.html.erb +2 -2
  99. data/app/views/admin/templates/_selector.html.erb +7 -2
  100. data/config/locales/typus.ca.yml +1 -1
  101. data/config/locales/typus.de.models.yml +5 -6
  102. data/config/locales/typus.de.yml +36 -39
  103. data/config/locales/typus.el.yml +1 -1
  104. data/config/locales/typus.es.yml +1 -1
  105. data/config/locales/typus.fr.yml +1 -2
  106. data/config/locales/typus.hu.yml +1 -1
  107. data/config/locales/typus.locale.yml.template +1 -1
  108. data/config/locales/typus.pt-BR.yml +1 -1
  109. data/config/locales/typus.ru.yml +1 -1
  110. data/config/locales/typus.zh-CN.yml +1 -1
  111. data/config/routes.rb +2 -2
  112. data/lib/generators/templates/config/initializers/typus.rb +1 -3
  113. data/lib/generators/templates/config/typus/README +0 -1
  114. data/lib/generators/typus/migration_generator.rb +0 -3
  115. data/lib/support/active_record.rb +7 -9
  116. data/lib/typus.rb +7 -8
  117. data/lib/typus/authentication/session.rb +3 -2
  118. data/lib/typus/controller/associations.rb +2 -2
  119. data/lib/typus/controller/format.rb +3 -3
  120. data/lib/typus/engine.rb +2 -6
  121. data/lib/typus/i18n.rb +4 -0
  122. data/lib/typus/orm/active_record/admin_user_v1.rb +13 -12
  123. data/lib/typus/orm/active_record/admin_user_v2.rb +31 -1
  124. data/lib/typus/orm/active_record/class_methods.rb +1 -0
  125. data/lib/typus/orm/base.rb +0 -4
  126. data/lib/typus/regex.rb +2 -0
  127. data/lib/typus/version.rb +1 -1
  128. data/test/app/controllers/admin/account_controller_test.rb +94 -0
  129. data/test/app/controllers/admin/assets_controller_test.rb +156 -0
  130. data/test/app/controllers/admin/base_controller_test.rb +25 -0
  131. data/test/app/controllers/admin/birds_controller_test.rb +33 -0
  132. data/test/app/controllers/admin/cases_controller_test.rb +20 -0
  133. data/test/app/controllers/admin/categories_controller_test.rb +134 -0
  134. data/test/app/controllers/admin/comments_controller_test.rb +71 -0
  135. data/test/app/controllers/admin/dashboard_controller_test.rb +150 -0
  136. data/test/app/controllers/admin/image_holders_controller_test.rb +74 -0
  137. data/test/app/controllers/admin/invoices_controller_test.rb +77 -0
  138. data/test/app/controllers/admin/orders_controller_test.rb +17 -0
  139. data/test/app/controllers/admin/pages_controller_test.rb +33 -0
  140. data/test/app/controllers/admin/posts_controller_test.rb +764 -0
  141. data/test/app/controllers/admin/projects_controller_test.rb +48 -0
  142. data/test/app/controllers/admin/session_controller_test.rb +91 -0
  143. data/test/app/controllers/admin/status_controller_test.rb +33 -0
  144. data/test/app/controllers/admin/typus_users_controller_test.rb +154 -0
  145. data/test/app/controllers/admin/users_controller_test.rb +101 -0
  146. data/test/app/controllers/admin/views_controller_test.rb +36 -0
  147. data/test/app/helpers/admin/base_helper_test.rb +75 -0
  148. data/test/app/helpers/admin/dashboard_helper_test.rb +28 -0
  149. data/test/app/helpers/admin/file_preview_helper_test.rb +90 -0
  150. data/test/app/helpers/admin/filters_helper_test.rb +166 -0
  151. data/test/app/helpers/admin/form_helper_test.rb +126 -0
  152. data/test/app/helpers/admin/list_helper_test.rb +76 -0
  153. data/test/app/helpers/admin/relationships_helper_test.rb +19 -0
  154. data/test/app/helpers/admin/resources_helper_test.rb +46 -0
  155. data/test/app/helpers/admin/search_helper_test.rb +56 -0
  156. data/test/app/helpers/admin/sidebar_helper_test.rb +20 -0
  157. data/test/app/helpers/admin/table_helper_test.rb +245 -0
  158. data/test/app/mailers/admin/mailer_test.rb +20 -0
  159. data/test/app/models/admin_user_test.rb +22 -0
  160. data/test/app/models/typus_user_roles_test.rb +125 -0
  161. data/test/app/models/typus_user_test.rb +145 -0
  162. data/test/app/models/user_test.rb +38 -0
  163. data/test/config/routes_test.rb +30 -0
  164. data/test/factories.rb +134 -0
  165. data/test/fixtures/config/broken/application.yml +68 -0
  166. data/test/fixtures/config/broken/application_roles.yml +20 -0
  167. data/test/fixtures/config/broken/empty.yml +0 -0
  168. data/test/fixtures/config/broken/empty_roles.yml +0 -0
  169. data/test/fixtures/config/broken/undefined.yml +3 -0
  170. data/test/fixtures/config/broken/undefined_roles.yml +6 -0
  171. data/test/fixtures/config/default/typus.yml +13 -0
  172. data/test/fixtures/config/default/typus_roles.yml +2 -0
  173. data/test/fixtures/config/empty/empty_01.yml +0 -0
  174. data/test/fixtures/config/empty/empty_01_roles.yml +0 -0
  175. data/test/fixtures/config/empty/empty_02.yml +0 -0
  176. data/test/fixtures/config/empty/empty_02_roles.yml +0 -0
  177. data/test/fixtures/config/locales/es.yml +10 -0
  178. data/test/fixtures/config/namespaced/application.yml +5 -0
  179. data/test/fixtures/config/namespaced/application_roles.yml +2 -0
  180. data/test/fixtures/config/ordered/001_roles.yml +2 -0
  181. data/test/fixtures/config/ordered/002_roles.yml +2 -0
  182. data/test/fixtures/config/unordered/app_one_roles.yml +2 -0
  183. data/test/fixtures/config/unordered/app_two_roles.yml +2 -0
  184. data/test/fixtures/rails_app/.gitignore +4 -0
  185. data/test/fixtures/rails_app/Capfile +7 -0
  186. data/test/fixtures/rails_app/README +256 -0
  187. data/test/fixtures/rails_app/Rakefile +7 -0
  188. data/test/fixtures/rails_app/app/controllers/admin/admin_users_controller.rb +2 -0
  189. data/test/fixtures/rails_app/app/controllers/admin/animals_controller.rb +2 -0
  190. data/test/fixtures/rails_app/app/controllers/admin/article/entries_controller.rb +2 -0
  191. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +51 -0
  192. data/test/fixtures/rails_app/app/controllers/admin/birds_controller.rb +2 -0
  193. data/test/fixtures/rails_app/app/controllers/admin/cases_controller.rb +2 -0
  194. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +2 -0
  195. data/test/fixtures/rails_app/app/controllers/admin/comments_controller.rb +2 -0
  196. data/test/fixtures/rails_app/app/controllers/admin/dogs_controller.rb +2 -0
  197. data/test/fixtures/rails_app/app/controllers/admin/entries_controller.rb +2 -0
  198. data/test/fixtures/rails_app/app/controllers/admin/hits_controller.rb +37 -0
  199. data/test/fixtures/rails_app/app/controllers/admin/image_holders_controller.rb +2 -0
  200. data/test/fixtures/rails_app/app/controllers/admin/invoices_controller.rb +2 -0
  201. data/test/fixtures/rails_app/app/controllers/admin/orders_controller.rb +2 -0
  202. data/test/fixtures/rails_app/app/controllers/admin/pages_controller.rb +7 -0
  203. data/test/fixtures/rails_app/app/controllers/admin/posts_controller.rb +2 -0
  204. data/test/fixtures/rails_app/app/controllers/admin/project_collaborators_controller.rb +2 -0
  205. data/test/fixtures/rails_app/app/controllers/admin/projects_controller.rb +2 -0
  206. data/test/fixtures/rails_app/app/controllers/admin/status_controller.rb +2 -0
  207. data/test/fixtures/rails_app/app/controllers/admin/typus_users_controller.rb +2 -0
  208. data/test/fixtures/rails_app/app/controllers/admin/users_controller.rb +2 -0
  209. data/test/fixtures/rails_app/app/controllers/admin/views_controller.rb +8 -0
  210. data/test/fixtures/rails_app/app/controllers/admin/watch_dog_controller.rb +2 -0
  211. data/test/fixtures/rails_app/app/controllers/application_controller.rb +3 -0
  212. data/test/fixtures/rails_app/app/helpers/application_helper.rb +2 -0
  213. data/test/fixtures/rails_app/app/helpers/form_helper.rb +3 -0
  214. data/test/fixtures/rails_app/app/models/admin_user.rb +7 -0
  215. data/test/fixtures/rails_app/app/models/animal.rb +21 -0
  216. data/test/fixtures/rails_app/app/models/article.rb +10 -0
  217. data/test/fixtures/rails_app/app/models/article/entry.rb +2 -0
  218. data/test/fixtures/rails_app/app/models/asset.rb +45 -0
  219. data/test/fixtures/rails_app/app/models/bird.rb +2 -0
  220. data/test/fixtures/rails_app/app/models/case.rb +2 -0
  221. data/test/fixtures/rails_app/app/models/category.rb +31 -0
  222. data/test/fixtures/rails_app/app/models/comment.rb +17 -0
  223. data/test/fixtures/rails_app/app/models/delayed/task.rb +5 -0
  224. data/test/fixtures/rails_app/app/models/dog.rb +2 -0
  225. data/test/fixtures/rails_app/app/models/entry.rb +23 -0
  226. data/test/fixtures/rails_app/app/models/hit.rb +27 -0
  227. data/test/fixtures/rails_app/app/models/image_holder.rb +21 -0
  228. data/test/fixtures/rails_app/app/models/invoice.rb +10 -0
  229. data/test/fixtures/rails_app/app/models/order.rb +9 -0
  230. data/test/fixtures/rails_app/app/models/page.rb +24 -0
  231. data/test/fixtures/rails_app/app/models/post.rb +32 -0
  232. data/test/fixtures/rails_app/app/models/project.rb +17 -0
  233. data/test/fixtures/rails_app/app/models/project_collaborator.rb +16 -0
  234. data/test/fixtures/rails_app/app/models/site.rb +16 -0
  235. data/test/fixtures/rails_app/app/models/typus_user.rb +15 -0
  236. data/test/fixtures/rails_app/app/models/user.rb +16 -0
  237. data/test/fixtures/rails_app/app/models/view.rb +19 -0
  238. data/test/fixtures/rails_app/app/views/admin/assets/_index.html.erb +3 -0
  239. data/test/fixtures/rails_app/app/views/admin/cases/_index.html.erb +3 -0
  240. data/test/fixtures/rails_app/app/views/admin/categories/_index.html.erb +3 -0
  241. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +11 -0
  242. data/test/fixtures/rails_app/app/views/admin/entries/_index.html.erb +3 -0
  243. data/test/fixtures/rails_app/app/views/admin/hits/_edit.html.erb +7 -0
  244. data/test/fixtures/rails_app/app/views/admin/hits/_index.html.erb +3 -0
  245. data/test/fixtures/rails_app/app/views/admin/hits/index.html.erb +28 -0
  246. data/test/fixtures/rails_app/app/views/admin/pages/_index.html.erb +3 -0
  247. data/test/fixtures/rails_app/app/views/admin/posts/_edit.html.erb +1 -0
  248. data/test/fixtures/rails_app/app/views/admin/posts/_index.html.erb +5 -0
  249. data/test/fixtures/rails_app/app/views/admin/posts/_new.html.erb +1 -0
  250. data/test/fixtures/rails_app/app/views/admin/posts/_show.html.erb +1 -0
  251. data/test/fixtures/rails_app/app/views/admin/resources/_sidebar.html.erb +1 -0
  252. data/test/fixtures/rails_app/app/views/admin/status/index.html.erb +9 -0
  253. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +1 -0
  254. data/test/fixtures/rails_app/app/views/admin/watch_dog/index.html.erb +9 -0
  255. data/test/fixtures/rails_app/config.ru +4 -0
  256. data/test/fixtures/rails_app/config/application.rb +55 -0
  257. data/test/fixtures/rails_app/config/boot.rb +6 -0
  258. data/test/fixtures/rails_app/config/database.yml +42 -0
  259. data/test/fixtures/rails_app/config/deploy.rb +36 -0
  260. data/test/fixtures/rails_app/config/environment.rb +5 -0
  261. data/test/fixtures/rails_app/config/environments/development.rb +38 -0
  262. data/test/fixtures/rails_app/config/environments/production.rb +57 -0
  263. data/test/fixtures/rails_app/config/environments/test.rb +44 -0
  264. data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  265. data/test/fixtures/rails_app/config/initializers/dragonfly.rb +1 -0
  266. data/test/fixtures/rails_app/config/initializers/inflections.rb +11 -0
  267. data/test/fixtures/rails_app/config/initializers/mime_types.rb +5 -0
  268. data/test/fixtures/rails_app/config/initializers/secret_token.rb +7 -0
  269. data/test/fixtures/rails_app/config/initializers/session_store.rb +8 -0
  270. data/test/fixtures/rails_app/config/initializers/wrap_parameters.rb +12 -0
  271. data/test/fixtures/rails_app/config/locales/en.yml +5 -0
  272. data/test/fixtures/rails_app/config/mongoid.yml +20 -0
  273. data/test/fixtures/rails_app/config/routes.rb +61 -0
  274. data/test/fixtures/rails_app/config/typus/README +68 -0
  275. data/test/fixtures/rails_app/config/typus/admin.yml +16 -0
  276. data/test/fixtures/rails_app/config/typus/admin_roles.yml +3 -0
  277. data/test/fixtures/rails_app/config/typus/crud_basic.yml +10 -0
  278. data/test/fixtures/rails_app/config/typus/crud_basic_roles.yml +2 -0
  279. data/test/fixtures/rails_app/config/typus/crud_extended.yml +66 -0
  280. data/test/fixtures/rails_app/config/typus/crud_extended_roles.yml +18 -0
  281. data/test/fixtures/rails_app/config/typus/crud_namespaced.yml +10 -0
  282. data/test/fixtures/rails_app/config/typus/crud_namespaced_roles.yml +2 -0
  283. data/test/fixtures/rails_app/config/typus/has_many.yml +0 -0
  284. data/test/fixtures/rails_app/config/typus/has_many_roles.yml +0 -0
  285. data/test/fixtures/rails_app/config/typus/has_many_through.yml +23 -0
  286. data/test/fixtures/rails_app/config/typus/has_many_through_roles.yml +4 -0
  287. data/test/fixtures/rails_app/config/typus/has_one.yml +12 -0
  288. data/test/fixtures/rails_app/config/typus/has_one_roles.yml +3 -0
  289. data/test/fixtures/rails_app/config/typus/mongo_db.yml +4 -0
  290. data/test/fixtures/rails_app/config/typus/mongo_db_roles.yml +2 -0
  291. data/test/fixtures/rails_app/config/typus/polymorphic.yml +17 -0
  292. data/test/fixtures/rails_app/config/typus/polymorphic_roles.yml +5 -0
  293. data/test/fixtures/rails_app/config/typus/resource_roles.yml +7 -0
  294. data/test/fixtures/rails_app/config/typus/sti.yml +5 -0
  295. data/test/fixtures/rails_app/config/typus/sti_roles.yml +2 -0
  296. data/test/fixtures/rails_app/config/typus/unknown.yml +3 -0
  297. data/test/fixtures/rails_app/config/typus/unknown_roles.yml +5 -0
  298. data/test/fixtures/rails_app/db/.gitkeep +0 -0
  299. data/test/fixtures/rails_app/db/schema.rb +209 -0
  300. data/test/fixtures/rails_app/db/seeds.rb +58 -0
  301. data/test/fixtures/rails_app/db/seeds/assets/000.jpg +0 -0
  302. data/test/fixtures/rails_app/db/seeds/assets/001.jpg +0 -0
  303. data/test/fixtures/rails_app/db/seeds/assets/002.jpg +0 -0
  304. data/test/fixtures/rails_app/db/seeds/assets/003.jpg +0 -0
  305. data/test/fixtures/rails_app/db/seeds/assets/004.jpg +0 -0
  306. data/test/fixtures/rails_app/public/404.html +26 -0
  307. data/test/fixtures/rails_app/public/422.html +26 -0
  308. data/test/fixtures/rails_app/public/500.html +26 -0
  309. data/test/fixtures/rails_app/public/favicon.ico +0 -0
  310. data/test/fixtures/rails_app/public/images/rails.png +0 -0
  311. data/test/fixtures/rails_app/public/robots.txt +5 -0
  312. data/test/fixtures/rails_app/public/stylesheets/.gitkeep +0 -0
  313. data/test/fixtures/rails_app/script/rails +6 -0
  314. data/test/lib/support/active_record_test.rb +139 -0
  315. data/test/lib/support/fake_user_test.rb +63 -0
  316. data/test/lib/support/hash_test.rb +25 -0
  317. data/test/lib/support/object_test.rb +10 -0
  318. data/test/lib/support/string_test.rb +80 -0
  319. data/test/lib/typus/configuration_test.rb +48 -0
  320. data/test/lib/typus/controller/actions_test.rb +141 -0
  321. data/test/lib/typus/controller/associations_test.rb +7 -0
  322. data/test/lib/typus/controller/autocomplete_test.rb +7 -0
  323. data/test/lib/typus/controller/filters_test.rb +73 -0
  324. data/test/lib/typus/controller/format_test.rb +7 -0
  325. data/test/lib/typus/i18n_test.rb +13 -0
  326. data/test/lib/typus/orm/active_record/class_methods_test.rb +381 -0
  327. data/test/lib/typus/orm/active_record/search_test.rb +328 -0
  328. data/test/lib/typus/regex_test.rb +62 -0
  329. data/test/lib/typus/resources_test.rb +41 -0
  330. data/test/lib/typus_test.rb +132 -0
  331. data/test/test_helper.rb +41 -0
  332. data/typus.gemspec +3 -10
  333. metadata +525 -137
  334. data/.gitmodules +0 -3
  335. data/app/assets/vendor/typus/javascripts/jquery.rails.js +0 -158
  336. data/app/assets/vendor/typus/vendor/jquery-ui-1.8.12.custom/js/jquery-1.5.1.min.js +0 -16
  337. data/app/views/admin/templates/_text_with_ckeditor.html.erb +0 -13
  338. data/config/locales/typus.pt-PT.models.yml +0 -17
  339. data/config/locales/typus.pt-PT.yml +0 -83
@@ -0,0 +1,141 @@
1
+ require "test_helper"
2
+
3
+ class ActionsTest < ActiveSupport::TestCase
4
+
5
+ include Typus::Controller::Actions
6
+
7
+ context "add_resource_action" do
8
+
9
+ should "work" do
10
+ output = add_resource_action("something")
11
+ assert_equal [["something"]], @resource_actions
12
+ end
13
+
14
+ should "work when no params are set" do
15
+ add_resource_action()
16
+ assert @resource_actions.empty?
17
+ end
18
+
19
+ end
20
+
21
+ context "prepend_resource_action" do
22
+
23
+ should "work without args" do
24
+ prepend_resource_action()
25
+ assert @resource_actions.empty?
26
+ end
27
+
28
+ should "work with args" do
29
+ prepend_resource_action("something")
30
+ assert_equal [["something"]], @resource_actions
31
+ end
32
+
33
+ should "work prepending an action without args" do
34
+ add_resource_action("something")
35
+ prepend_resource_action()
36
+ assert_equal [["something"]], @resource_actions
37
+ end
38
+
39
+ should "work prepending an action with args" do
40
+ add_resource_action("something")
41
+ prepend_resource_action("something_else")
42
+ assert_equal [["something_else"], ["something"]], @resource_actions
43
+ end
44
+
45
+ end
46
+
47
+ context "append_resource_action" do
48
+
49
+ should "work without args" do
50
+ append_resource_action()
51
+ assert @resource_actions.empty?
52
+ end
53
+
54
+ should "work with args" do
55
+ append_resource_action("something")
56
+ assert_equal [["something"]], @resource_actions
57
+ end
58
+
59
+ should "work appending an action without args" do
60
+ add_resource_action("something")
61
+ append_resource_action()
62
+ assert_equal [["something"]], @resource_actions
63
+ end
64
+
65
+ should "work appending an action with args" do
66
+ add_resource_action("something")
67
+ append_resource_action("something_else")
68
+ assert_equal [["something"], ["something_else"]], @resource_actions
69
+ end
70
+
71
+ end
72
+
73
+ # FIXME: Cleanup all test after this line.
74
+
75
+ context "add_resources_action" do
76
+
77
+ should "work" do
78
+ add_resources_action("something")
79
+ assert_equal [["something"]], @resources_actions
80
+ end
81
+
82
+ should "work when no params are set" do
83
+ add_resources_action()
84
+ assert @resources_actions.empty?
85
+ end
86
+
87
+ end
88
+
89
+ context "prepend_resources_action" do
90
+
91
+ should "work without args" do
92
+ prepend_resources_action()
93
+ assert @resources_actions.empty?
94
+ end
95
+
96
+ should "work with args" do
97
+ prepend_resources_action("something")
98
+ assert_equal [["something"]], @resources_actions
99
+ end
100
+
101
+ should "work prepending an action without args" do
102
+ add_resources_action("something")
103
+ prepend_resources_action()
104
+ assert_equal [["something"]], @resources_actions
105
+ end
106
+
107
+ should "work prepending an action with args" do
108
+ add_resources_action("something")
109
+ prepend_resources_action("something_else")
110
+ assert_equal [["something_else"], ["something"]], @resources_actions
111
+ end
112
+
113
+ end
114
+
115
+ context "append_resources_action" do
116
+
117
+ should "work without args" do
118
+ append_resources_action()
119
+ assert @resources_actions.empty?
120
+ end
121
+
122
+ should "work with args" do
123
+ append_resources_action("something")
124
+ assert_equal [["something"]], @resources_actions
125
+ end
126
+
127
+ should "work appending an action without args" do
128
+ add_resources_action("something")
129
+ append_resources_action()
130
+ assert_equal [["something"]], @resources_actions
131
+ end
132
+
133
+ should "work appending an action with args" do
134
+ add_resources_action("something")
135
+ append_resources_action("something_else")
136
+ assert_equal [["something"], ["something_else"]], @resources_actions
137
+ end
138
+
139
+ end
140
+
141
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class AssociationsTest < ActiveSupport::TestCase
4
+
5
+ include Typus::Controller::Associations
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class AutocompleteTest < ActiveSupport::TestCase
4
+
5
+ include Typus::Controller::Autocomplete
6
+
7
+ end
@@ -0,0 +1,73 @@
1
+ require "test_helper"
2
+
3
+ class FiltersTest < ActiveSupport::TestCase
4
+
5
+ include Typus::Controller::Filters
6
+
7
+ context "add_predefined_filter" do
8
+
9
+ should "work without args" do
10
+ add_predefined_filter()
11
+ assert @predefined_filters.empty?
12
+ end
13
+
14
+ should "work with args" do
15
+ add_predefined_filter("something")
16
+ assert_equal [["something"]], @predefined_filters
17
+ end
18
+
19
+ end
20
+
21
+ context "prepend_predefined_filter" do
22
+
23
+ should "work without args" do
24
+ prepend_predefined_filter()
25
+ assert @predefined_filters.empty?
26
+ end
27
+
28
+ should "work with args" do
29
+ prepend_predefined_filter("something")
30
+ assert_equal [["something"]], @predefined_filters
31
+ end
32
+
33
+ should "work prepending an action without args" do
34
+ add_predefined_filter("something")
35
+ prepend_predefined_filter()
36
+ assert_equal [["something"]], @predefined_filters
37
+ end
38
+
39
+ should "work prepending an action with args" do
40
+ add_predefined_filter("something")
41
+ prepend_predefined_filter("something_else")
42
+ assert_equal [["something_else"], ["something"]], @predefined_filters
43
+ end
44
+
45
+ end
46
+
47
+ context "append_predefined_filter" do
48
+
49
+ should "work without args" do
50
+ append_predefined_filter()
51
+ assert @predefined_filters.empty?
52
+ end
53
+
54
+ should "work with args" do
55
+ append_predefined_filter("something")
56
+ assert_equal [["something"]], @predefined_filters
57
+ end
58
+
59
+ should "work appending an action without args" do
60
+ add_predefined_filter("something")
61
+ append_predefined_filter()
62
+ assert_equal [["something"]], @predefined_filters
63
+ end
64
+
65
+ should "work appending an action with args" do
66
+ add_predefined_filter("something")
67
+ append_predefined_filter("something_else")
68
+ assert_equal [["something"], ["something_else"]], @predefined_filters
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,7 @@
1
+ require "test_helper"
2
+
3
+ class FormatTest < ActiveSupport::TestCase
4
+
5
+ include Typus::Controller::Format
6
+
7
+ end
@@ -0,0 +1,13 @@
1
+ require "test_helper"
2
+
3
+ class I18nTest < ActiveSupport::TestCase
4
+
5
+ test "t" do
6
+ assert_equal "Missing Translation", Typus::I18n.t("Missing Translation")
7
+ end
8
+
9
+ test "default_locale" do
10
+ assert Typus::I18n.default_locale(:en)
11
+ end
12
+
13
+ end
@@ -0,0 +1,381 @@
1
+ require "test_helper"
2
+
3
+ class ClassMethodsTest < ActiveSupport::TestCase
4
+
5
+ context "model_fields" do
6
+
7
+ should "be an ActiveSupport::OrderedHash" do
8
+ assert TypusUser.model_fields.instance_of?(ActiveSupport::OrderedHash)
9
+ end
10
+
11
+ should "verify TypusUser model_fields" do
12
+ expected = [[:id, :integer],
13
+ [:first_name, :string],
14
+ [:last_name, :string],
15
+ [:role, :string],
16
+ [:email, :string],
17
+ [:status, :boolean],
18
+ [:token, :string],
19
+ [:salt, :string],
20
+ [:crypted_password, :string],
21
+ [:preferences, :string],
22
+ [:created_at, :datetime],
23
+ [:updated_at, :datetime]]
24
+
25
+ assert_equal expected.map { |i| i.first }, TypusUser.model_fields.keys
26
+ assert_equal expected.map { |i| i.last }, TypusUser.model_fields.values
27
+ end
28
+
29
+ should "verify Post model_fields" do
30
+ expected = [[:id, :integer],
31
+ [:title, :string],
32
+ [:body, :text],
33
+ [:status, :string],
34
+ [:favorite_comment_id, :integer],
35
+ [:published_at, :datetime],
36
+ [:typus_user_id, :integer],
37
+ [:published, :boolean],
38
+ [:created_at, :datetime],
39
+ [:updated_at, :datetime]]
40
+
41
+ assert_equal expected.map { |i| i.first }, Post.model_fields.keys
42
+ assert_equal expected.map { |i| i.last }, Post.model_fields.values
43
+ end
44
+
45
+ end
46
+
47
+ context "model_relationships" do
48
+
49
+ should "be an ActiveSupport::OrderedHash" do
50
+ assert TypusUser.model_relationships.instance_of?(ActiveSupport::OrderedHash)
51
+ end
52
+
53
+ should "verify Post model_relationships" do
54
+ expected = [[:comments, :has_many],
55
+ [:categories, :has_and_belongs_to_many],
56
+ [:user, nil]]
57
+ expected.each do |key, value|
58
+ assert_equal value, Post.model_relationships[key]
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ context "typus_description" do
65
+
66
+ should "return the description of a model" do
67
+ assert_equal "System Users Administration", TypusUser.typus_description
68
+ end
69
+
70
+ end
71
+
72
+ context "typus_fields_for" do
73
+
74
+ should "accept strings" do
75
+ assert_equal %w(email role status), TypusUser.typus_fields_for("list").keys
76
+ end
77
+
78
+ should "accept symbols" do
79
+ assert_equal %w(email role status), TypusUser.typus_fields_for(:list).keys
80
+ end
81
+
82
+ should "return list fields for TypusUser" do
83
+ expected = [["email", :string],
84
+ ["role", :selector],
85
+ ["status", :boolean]]
86
+
87
+ assert_equal expected.map { |i| i.first }, TypusUser.typus_fields_for(:list).keys
88
+ assert_equal expected.map { |i| i.last }, TypusUser.typus_fields_for(:list).values
89
+ end
90
+
91
+ should "return form fields for TypusUser" do
92
+ expected = [["first_name", :string],
93
+ ["last_name", :string],
94
+ ["role", :selector],
95
+ ["email", :string],
96
+ ["password", :password],
97
+ ["password_confirmation", :password],
98
+ ["locale", :selector]]
99
+
100
+ assert_equal expected.map { |i| i.first }, TypusUser.typus_fields_for(:new).keys
101
+ assert_equal expected.map { |i| i.last }, TypusUser.typus_fields_for(:form).values
102
+ end
103
+
104
+ should "return form fields for Asset" do
105
+ expected = [["caption", :string],
106
+ ["dragonfly", :file],
107
+ ["dragonfly_required", :file]]
108
+
109
+ assert_equal expected.map { |i| i.first }, Asset.typus_fields_for(:special).keys
110
+ assert_equal expected.map { |i| i.last }, Asset.typus_fields_for(:special).values
111
+ end
112
+
113
+ should "raise a RuntimeError when model does not have configuration" do
114
+ assert_raises RuntimeError do
115
+ Class.new(ActiveRecord::Base).typus_fields_for(:form)
116
+ end
117
+ end
118
+
119
+ should "return relationship fields for TypusUser" do
120
+ expected = %w(first_name last_name role email locale)
121
+ assert_equal expected, TypusUser.typus_fields_for(:relationship).keys
122
+ end
123
+
124
+ should "return undefined fields for TypusUser" do
125
+ expected = %w(first_name last_name role email locale)
126
+ assert_equal expected, TypusUser.typus_fields_for(:undefined).keys
127
+ end
128
+
129
+ should "return fields for new Asset" do
130
+ expected = %w(dragonfly dragonfly_required paperclip paperclip_required)
131
+ assert_equal expected, Asset.typus_fields_for(:new).keys
132
+ end
133
+
134
+ should "return fields for edit Asset" do
135
+ expected = %w(caption dragonfly dragonfly_required paperclip paperclip_required)
136
+ assert_equal expected, Asset.typus_fields_for(:edit).keys
137
+ end
138
+
139
+ should "work for transversal fields" do
140
+ expected = [["email", :string],
141
+ ["post", :belongs_to],
142
+ ["post_id", :integer],
143
+ ["spam", :boolean],
144
+ ["post.title", :transversal]]
145
+
146
+ assert_equal expected.map { |i| i.first }, Comment.typus_fields_for(:list).keys
147
+ assert_equal expected.map { |i| i.last }, Comment.typus_fields_for(:list).values
148
+ end
149
+
150
+ end
151
+
152
+ context "typus_filters" do
153
+
154
+ should "return filters for TypusUser" do
155
+ expected = [["status", :boolean],
156
+ ["role", :string]]
157
+
158
+ assert_equal expected.map { |i| i.first }.join(", "), Typus::Configuration.config["TypusUser"]["filters"]
159
+ assert_equal expected.map { |i| i.first }, TypusUser.typus_filters.keys
160
+ assert_equal expected.map { |i| i.last }, TypusUser.typus_filters.values
161
+ end
162
+
163
+ should "return filters for Post" do
164
+ expected = [["published", :boolean],
165
+ ["status", :string],
166
+ ["created_at", :datetime]]
167
+
168
+ assert_equal expected.map { |i| i.first }.join(", "), Typus::Configuration.config["Post"]["filters"]
169
+ assert_equal expected.map { |i| i.first }, Post.typus_filters.keys
170
+ assert_equal expected.map { |i| i.last }, Post.typus_filters.values
171
+ end
172
+
173
+ end
174
+
175
+ context "typus_actions_on" do
176
+
177
+ should "accept strings" do
178
+ assert_equal %w(cleanup), Post.typus_actions_on("index")
179
+ end
180
+
181
+ should "accept symbols" do
182
+ assert_equal %w(cleanup), Post.typus_actions_on(:index)
183
+ end
184
+
185
+ should "return actions on list for TypusUser" do
186
+ assert TypusUser.typus_actions_on(:list).empty?
187
+ end
188
+
189
+ should "return actions on edit for Post" do
190
+ assert_equal %w(send_as_newsletter preview), Post.typus_actions_on(:edit)
191
+ end
192
+
193
+ end
194
+
195
+ context "typus_options_for" do
196
+
197
+ should "accept strings" do
198
+ assert Post.typus_options_for("form_rows").eql?(15)
199
+ end
200
+
201
+ should "accept symbols" do
202
+ assert Post.typus_options_for(:form_rows).eql?(15)
203
+ end
204
+
205
+ should "return nil when options do not exist" do
206
+ assert_nil TypusUser.typus_options_for(:unexisting)
207
+ end
208
+
209
+ should "return options for Post" do
210
+ assert Post.typus_options_for(:form_rows).eql?(15)
211
+ end
212
+
213
+ should "return options for Page" do
214
+ assert Page.typus_options_for(:form_rows).eql?(25)
215
+ end
216
+
217
+ should "return sortable options as a boolean" do
218
+ assert Post.typus_options_for(:sortable)
219
+ assert !Page.typus_options_for(:sortable)
220
+ end
221
+
222
+ end
223
+
224
+ context "typus_application" do
225
+
226
+ should "return application for Post" do
227
+ assert_equal "CRUD Extended", Post.typus_application
228
+ end
229
+
230
+ should "return application for View" do
231
+ assert_equal "Unknown", View.typus_application
232
+ end
233
+
234
+ end
235
+
236
+ context "typus_field_options_for" do
237
+
238
+ should "verify on models" do
239
+ assert_equal [:status], Post.typus_field_options_for(:selectors)
240
+ assert_equal [:permalink], Post.typus_field_options_for(:read_only)
241
+ assert_equal [:created_at], Post.typus_field_options_for(:auto_generated)
242
+ end
243
+
244
+ should "return empty array for unexisting option" do
245
+ assert Post.typus_field_options_for(:unexisting).empty?
246
+ end
247
+
248
+ end
249
+
250
+ context "typus_boolean" do
251
+
252
+ should "accept strings" do
253
+ expected = [["Active", "true"], ["Inactive", "false"]]
254
+ assert_equal expected, TypusUser.typus_boolean("status")
255
+ end
256
+
257
+ should "accept symbols" do
258
+ expected = [["Active", "true"], ["Inactive", "false"]]
259
+ assert_equal expected, TypusUser.typus_boolean(:status)
260
+ end
261
+
262
+ should "return booleans for Post" do
263
+ expected = [["True", "true"], ["False", "false"]]
264
+ assert_equal expected, Post.typus_boolean(:status)
265
+ end
266
+
267
+ should "return booleans for Comment" do
268
+ expected = [["Yes, it's spam", "true"], ["No, it's not spam", "false"]]
269
+ assert_equal expected, Comment.typus_boolean(:spam)
270
+ end
271
+
272
+ end
273
+
274
+ context "typus_date_format" do
275
+
276
+ should "accept strings" do
277
+ assert_equal :default, Post.typus_date_format("unknown")
278
+ end
279
+
280
+ should "accept symbols" do
281
+ assert_equal :default, Post.typus_date_format(:unknown)
282
+ end
283
+
284
+ should "return date_format for Post" do
285
+ assert_equal :default, Post.typus_date_format
286
+ assert_equal :short, Post.typus_date_format(:created_at)
287
+ end
288
+
289
+ end
290
+
291
+ context "typus_template" do
292
+
293
+ should "accept strings" do
294
+ assert_equal "datepicker", Post.typus_template("published_at")
295
+ end
296
+
297
+ should "accept symbols" do
298
+ assert_equal "datepicker", Post.typus_template(:published_at)
299
+ end
300
+
301
+ should "return nil if template does not exist" do
302
+ assert_nil Post.typus_template(:created_at)
303
+ end
304
+
305
+ end
306
+
307
+ context "typus_defaults_for" do
308
+
309
+ should "accept strings" do
310
+ assert_equal %w(title), Post.typus_defaults_for("search")
311
+ end
312
+
313
+ should "accepts symbols" do
314
+ assert_equal %w(title), Post.typus_defaults_for(:search)
315
+ end
316
+
317
+ should "return default_for relationships on Post" do
318
+ assert_equal %w(categories comments views), Post.typus_defaults_for(:relationships)
319
+ end
320
+
321
+ end
322
+
323
+ context "typus_search_fields" do
324
+
325
+ should "return a hash with the search modifiers" do
326
+ search = ["=id", "^title", "body"]
327
+ Post.stubs(:typus_defaults_for).with(:search).returns(search)
328
+ expected = {"body"=>"@", "title"=>"^", "id"=>"="}
329
+ assert_equal expected, Post.typus_search_fields
330
+ end
331
+
332
+ should "return and empty hash" do
333
+ search = []
334
+ Post.stubs(:typus_defaults_for).with(:search).returns(search)
335
+ expected = {}
336
+ assert_equal expected, Post.typus_search_fields
337
+ end
338
+
339
+ end
340
+
341
+ context "typus_order_by" do
342
+
343
+ should "return defaults_for order_by on Post" do
344
+ assert_equal "posts.title ASC, posts.created_at DESC", Post.typus_order_by
345
+ assert_equal %w(title -created_at), Post.typus_defaults_for(:order_by)
346
+ end
347
+
348
+ end
349
+
350
+ context "typus_user_id?" do
351
+
352
+ should "exist on Post" do
353
+ assert Post.typus_user_id?
354
+ end
355
+
356
+ should "not exist on TypusUser" do
357
+ assert !TypusUser.typus_user_id?
358
+ end
359
+
360
+ end
361
+
362
+ context "read_model_config" do
363
+
364
+ should "return data for existing model" do
365
+ expected = {"application"=>"CRUD Extended",
366
+ "fields"=>{"default"=>"caption, dragonfly, dragonfly_required",
367
+ "special"=>"caption, dragonfly, dragonfly_required",
368
+ "form"=>"caption, dragonfly, dragonfly_required, paperclip, paperclip_required",
369
+ "new"=>"dragonfly, dragonfly_required, paperclip, paperclip_required"}}
370
+ assert_equal expected, Asset.read_model_config
371
+ end
372
+
373
+ should "raise error when model does not exist on configuration" do
374
+ assert_raises RuntimeError do
375
+ Article.read_model_config
376
+ end
377
+ end
378
+
379
+ end
380
+
381
+ end