admin_assistant 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (418) hide show
  1. data/Rakefile +2 -2
  2. data/VERSION +1 -1
  3. data/admin_assistant.gemspec +404 -8
  4. data/rails_2_test/README +256 -0
  5. data/rails_2_test/Rakefile +13 -0
  6. data/rails_2_test/app/controllers/admin/appointments2_controller.rb +15 -0
  7. data/rails_2_test/app/controllers/admin/appointments_controller.rb +11 -0
  8. data/rails_2_test/app/controllers/admin/blog_posts2_controller.rb +138 -0
  9. data/rails_2_test/app/controllers/admin/blog_posts3_controller.rb +76 -0
  10. data/rails_2_test/app/controllers/admin/blog_posts4_controller.rb +21 -0
  11. data/rails_2_test/app/controllers/admin/blog_posts5_controller.rb +27 -0
  12. data/rails_2_test/app/controllers/admin/blog_posts6_controller.rb +10 -0
  13. data/rails_2_test/app/controllers/admin/blog_posts_controller.rb +8 -0
  14. data/rails_2_test/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +15 -0
  15. data/rails_2_test/app/controllers/admin/blog_posts_read_only_controller.rb +19 -0
  16. data/rails_2_test/app/controllers/admin/bookmarks_controller.rb +11 -0
  17. data/rails_2_test/app/controllers/admin/comments2_controller.rb +14 -0
  18. data/rails_2_test/app/controllers/admin/comments_controller.rb +12 -0
  19. data/rails_2_test/app/controllers/admin/file_column_images2_controller.rb +10 -0
  20. data/rails_2_test/app/controllers/admin/file_column_images_controller.rb +6 -0
  21. data/rails_2_test/app/controllers/admin/images2_controller.rb +11 -0
  22. data/rails_2_test/app/controllers/admin/images_controller.rb +6 -0
  23. data/rails_2_test/app/controllers/admin/misconfigured1_controller.rb +7 -0
  24. data/rails_2_test/app/controllers/admin/not_migrated_yets_controller.rb +9 -0
  25. data/rails_2_test/app/controllers/admin/product_categories2_controller.rb +7 -0
  26. data/rails_2_test/app/controllers/admin/product_categories_controller.rb +5 -0
  27. data/rails_2_test/app/controllers/admin/products2_controller.rb +15 -0
  28. data/rails_2_test/app/controllers/admin/products_controller.rb +31 -0
  29. data/rails_2_test/app/controllers/admin/television_airings_controller.rb +5 -0
  30. data/rails_2_test/app/controllers/admin/television_time_slots_controller.rb +5 -0
  31. data/rails_2_test/app/controllers/admin/users2_controller.rb +10 -0
  32. data/rails_2_test/app/controllers/admin/users_controller.rb +63 -0
  33. data/rails_2_test/app/controllers/application.rb +16 -0
  34. data/rails_2_test/app/controllers/application_controller.rb +16 -0
  35. data/rails_2_test/app/controllers/blog_posts_controller.rb +5 -0
  36. data/rails_2_test/app/helpers/admin/appointments2_helper.rb +2 -0
  37. data/rails_2_test/app/helpers/admin/appointments_helper.rb +2 -0
  38. data/rails_2_test/app/helpers/admin/blog_posts2_helper.rb +27 -0
  39. data/rails_2_test/app/helpers/admin/blog_posts3_helper.rb +2 -0
  40. data/rails_2_test/app/helpers/admin/blog_posts4_helper.rb +2 -0
  41. data/rails_2_test/app/helpers/admin/blog_posts6_helper.rb +16 -0
  42. data/rails_2_test/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +29 -0
  43. data/rails_2_test/app/helpers/admin/blog_posts_helper.rb +2 -0
  44. data/rails_2_test/app/helpers/admin/blog_posts_read_only_helper.rb +2 -0
  45. data/rails_2_test/app/helpers/admin/bookmarks_helper.rb +2 -0
  46. data/rails_2_test/app/helpers/admin/comments2_helper.rb +2 -0
  47. data/rails_2_test/app/helpers/admin/comments_helper.rb +2 -0
  48. data/rails_2_test/app/helpers/admin/file_column_images2_helper.rb +2 -0
  49. data/rails_2_test/app/helpers/admin/file_column_images_helper.rb +2 -0
  50. data/rails_2_test/app/helpers/admin/images2_helper.rb +8 -0
  51. data/rails_2_test/app/helpers/admin/images_helper.rb +2 -0
  52. data/rails_2_test/app/helpers/admin/misconfigured1_helper.rb +2 -0
  53. data/rails_2_test/app/helpers/admin/not_migrated_yets_helper.rb +2 -0
  54. data/rails_2_test/app/helpers/admin/product_categories2_helper.rb +2 -0
  55. data/rails_2_test/app/helpers/admin/product_categories_helper.rb +2 -0
  56. data/rails_2_test/app/helpers/admin/products2_helper.rb +3 -0
  57. data/rails_2_test/app/helpers/admin/products_helper.rb +6 -0
  58. data/rails_2_test/app/helpers/admin/television_airings_helper.rb +2 -0
  59. data/rails_2_test/app/helpers/admin/television_time_slots_helper.rb +2 -0
  60. data/rails_2_test/app/helpers/admin/users2_helper.rb +2 -0
  61. data/rails_2_test/app/helpers/admin/users_helper.rb +25 -0
  62. data/rails_2_test/app/helpers/application_helper.rb +3 -0
  63. data/rails_2_test/app/helpers/blog_posts_helper.rb +2 -0
  64. data/rails_2_test/app/models/appointment.rb +5 -0
  65. data/rails_2_test/app/models/blog_post.rb +14 -0
  66. data/rails_2_test/app/models/blog_post_tag.rb +6 -0
  67. data/rails_2_test/app/models/bookmark.rb +6 -0
  68. data/rails_2_test/app/models/comment.rb +4 -0
  69. data/rails_2_test/app/models/file_column_image.rb +3 -0
  70. data/rails_2_test/app/models/image.rb +3 -0
  71. data/rails_2_test/app/models/not_migrated_yet.rb +2 -0
  72. data/rails_2_test/app/models/product.rb +7 -0
  73. data/rails_2_test/app/models/product_category.rb +9 -0
  74. data/rails_2_test/app/models/tag.rb +4 -0
  75. data/rails_2_test/app/models/television_airing.rb +3 -0
  76. data/rails_2_test/app/models/television_time_slot.rb +11 -0
  77. data/rails_2_test/app/models/user.rb +14 -0
  78. data/rails_2_test/app/views/admin/appointments/_subject_input.html.erb +2 -0
  79. data/rails_2_test/app/views/admin/appointments2/_time_input.html.erb +31 -0
  80. data/rails_2_test/app/views/admin/blog_posts2/_after_form.html.erb +5 -0
  81. data/rails_2_test/app/views/admin/blog_posts2/_after_index.html.erb +1 -0
  82. data/rails_2_test/app/views/admin/blog_posts2/_after_tags_input.html.erb +16 -0
  83. data/rails_2_test/app/views/admin/blog_posts2/_before_index.html.erb +2 -0
  84. data/rails_2_test/app/views/admin/blog_posts5/_after_index_header.html.erb +8 -0
  85. data/rails_2_test/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +1 -0
  86. data/rails_2_test/app/views/admin/products/_name_input.html.erb +2 -0
  87. data/rails_2_test/app/views/admin/products/_percent_off_input.html.erb +2 -0
  88. data/rails_2_test/app/views/admin/products/_price_input.html.erb +10 -0
  89. data/rails_2_test/app/views/blog_posts/show.html.erb +13 -0
  90. data/rails_2_test/app/views/layouts/admin.html.erb +31 -0
  91. data/rails_2_test/config/boot.rb +109 -0
  92. data/rails_2_test/config/database.yml +28 -0
  93. data/rails_2_test/config/environment.rb +78 -0
  94. data/rails_2_test/config/environments/development.rb +17 -0
  95. data/rails_2_test/config/environments/production.rb +24 -0
  96. data/rails_2_test/config/environments/test.rb +24 -0
  97. data/rails_2_test/config/initializers/inflections.rb +10 -0
  98. data/rails_2_test/config/initializers/mime_types.rb +5 -0
  99. data/rails_2_test/config/initializers/new_rails_defaults.rb +17 -0
  100. data/rails_2_test/config/locales/en.yml +5 -0
  101. data/rails_2_test/config/routes.rb +43 -0
  102. data/rails_2_test/db/migrate/20090213215514_create_blog_posts.rb +12 -0
  103. data/rails_2_test/db/migrate/20090217225542_add_body_to_blog_posts.rb +9 -0
  104. data/rails_2_test/db/migrate/20090221220917_create_tags.rb +13 -0
  105. data/rails_2_test/db/migrate/20090221220947_create_blog_post_tags.rb +14 -0
  106. data/rails_2_test/db/migrate/20090222162204_add_textile_to_blog_posts.rb +9 -0
  107. data/rails_2_test/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +9 -0
  108. data/rails_2_test/db/migrate/20090301191722_create_images.rb +16 -0
  109. data/rails_2_test/db/migrate/20090305165345_create_accounts.rb +14 -0
  110. data/rails_2_test/db/migrate/20090307225027_rename_accounts_to_users.rb +9 -0
  111. data/rails_2_test/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +9 -0
  112. data/rails_2_test/db/migrate/20090309185114_change_blog_posts_textile.rb +9 -0
  113. data/rails_2_test/db/migrate/20090309193635_create_products.rb +14 -0
  114. data/rails_2_test/db/migrate/20090309203056_create_comments.rb +15 -0
  115. data/rails_2_test/db/migrate/20090323005947_create_file_column_images.rb +12 -0
  116. data/rails_2_test/db/migrate/20090326160049_add_birthday_to_users.rb +9 -0
  117. data/rails_2_test/db/migrate/20090326223606_add_state_to_users.rb +9 -0
  118. data/rails_2_test/db/migrate/20090503134004_add_file_column_image_to_products.rb +9 -0
  119. data/rails_2_test/db/migrate/20090617173651_create_bookmarks.rb +15 -0
  120. data/rails_2_test/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +9 -0
  121. data/rails_2_test/db/migrate/20090625144313_add_avatar_fields_to_user.rb +11 -0
  122. data/rails_2_test/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +9 -0
  123. data/rails_2_test/db/migrate/20090701171857_add_force_textile_to_users.rb +9 -0
  124. data/rails_2_test/db/migrate/20090704163647_add_deleted_at_to_products.rb +9 -0
  125. data/rails_2_test/db/migrate/20090704173800_add_sale_fields_to_products.rb +13 -0
  126. data/rails_2_test/db/migrate/20090714024501_create_product_categories.rb +15 -0
  127. data/rails_2_test/db/migrate/20090819162835_add_admin_level_to_users.rb +9 -0
  128. data/rails_2_test/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +11 -0
  129. data/rails_2_test/db/migrate/20091221011256_add_position_to_product_categories.rb +9 -0
  130. data/rails_2_test/db/migrate/20091222160814_create_appointments.rb +14 -0
  131. data/rails_2_test/db/migrate/20091227224547_add_user_id_to_appointments.rb +9 -0
  132. data/rails_2_test/db/migrate/20100214213359_create_television_time_slots.rb +13 -0
  133. data/rails_2_test/db/migrate/20100214213451_create_television_airings.rb +15 -0
  134. data/rails_2_test/doc/README_FOR_APP +5 -0
  135. data/rails_2_test/lib/tasks/rspec.rake +163 -0
  136. data/rails_2_test/public/404.html +30 -0
  137. data/rails_2_test/public/422.html +30 -0
  138. data/rails_2_test/public/500.html +33 -0
  139. data/rails_2_test/public/dispatch.cgi +10 -0
  140. data/rails_2_test/public/dispatch.fcgi +24 -0
  141. data/rails_2_test/public/dispatch.rb +10 -0
  142. data/rails_2_test/public/favicon.ico +0 -0
  143. data/rails_2_test/public/images/rails.png +0 -0
  144. data/rails_2_test/public/index.html +274 -0
  145. data/rails_2_test/public/javascripts/application.js +2 -0
  146. data/rails_2_test/public/javascripts/jquery-1.4.4.min.js +167 -0
  147. data/rails_2_test/public/robots.txt +5 -0
  148. data/rails_2_test/public/stylesheets/admin.css +3 -0
  149. data/rails_2_test/public/stylesheets/scaffold.css +54 -0
  150. data/rails_2_test/script/about +4 -0
  151. data/rails_2_test/script/autospec +5 -0
  152. data/rails_2_test/script/console +3 -0
  153. data/rails_2_test/script/dbconsole +3 -0
  154. data/rails_2_test/script/destroy +3 -0
  155. data/rails_2_test/script/generate +3 -0
  156. data/rails_2_test/script/performance/benchmarker +3 -0
  157. data/rails_2_test/script/performance/profiler +3 -0
  158. data/rails_2_test/script/performance/request +3 -0
  159. data/rails_2_test/script/plugin +3 -0
  160. data/rails_2_test/script/populate_tables.rb +49 -0
  161. data/rails_2_test/script/process/inspector +3 -0
  162. data/rails_2_test/script/process/reaper +3 -0
  163. data/rails_2_test/script/process/spawner +3 -0
  164. data/rails_2_test/script/runner +3 -0
  165. data/rails_2_test/script/server +3 -0
  166. data/rails_2_test/script/spec +5 -0
  167. data/rails_2_test/script/spec_server +125 -0
  168. data/rails_2_test/test/data/ruby_throated.jpg +0 -0
  169. data/rails_2_test/test/data/tweenbot.jpg +0 -0
  170. data/rails_2_test/test/fixtures/file_column_images.yml +7 -0
  171. data/rails_2_test/test/integration/admin/appointments2_integration_test.rb +79 -0
  172. data/rails_2_test/test/integration/admin/appointments_integration_test.rb +367 -0
  173. data/rails_2_test/test/integration/admin/blog_posts2_integration_test.rb +806 -0
  174. data/rails_2_test/test/integration/admin/blog_posts3_integration_test.rb +418 -0
  175. data/rails_2_test/test/integration/admin/blog_posts4_integration_test.rb +189 -0
  176. data/rails_2_test/test/integration/admin/blog_posts5_integration_test.rb +75 -0
  177. data/rails_2_test/test/integration/admin/blog_posts6_integration_test.rb +39 -0
  178. data/rails_2_test/test/integration/admin/blog_posts_custom_new_and_edit_integration_test.rb +89 -0
  179. data/rails_2_test/test/integration/admin/blog_posts_integration_test.rb +788 -0
  180. data/rails_2_test/test/integration/admin/blog_posts_read_only_integration_test.rb +69 -0
  181. data/rails_2_test/test/integration/admin/bookmarks_integration_test.rb +445 -0
  182. data/rails_2_test/test/integration/admin/comments2_integration_test.rb +52 -0
  183. data/rails_2_test/test/integration/admin/comments_integration_test.rb +50 -0
  184. data/rails_2_test/test/integration/admin/file_column_images2_integration_test.rb +19 -0
  185. data/rails_2_test/test/integration/admin/file_column_images_integration_test.rb +69 -0
  186. data/rails_2_test/test/integration/admin/images2_integration_test.rb +33 -0
  187. data/rails_2_test/test/integration/admin/images_integration_test.rb +79 -0
  188. data/rails_2_test/test/integration/admin/misconfigured1_integration_test.rb +17 -0
  189. data/rails_2_test/test/integration/admin/product_categories2_integration_test.rb +179 -0
  190. data/rails_2_test/test/integration/admin/product_categories_integration_test.rb +12 -0
  191. data/rails_2_test/test/integration/admin/products2_integration_test.rb +155 -0
  192. data/rails_2_test/test/integration/admin/products_integration_test.rb +210 -0
  193. data/rails_2_test/test/integration/admin/television_airings_integration_test.rb +25 -0
  194. data/rails_2_test/test/integration/admin/users2_integration_test.rb +48 -0
  195. data/rails_2_test/test/integration/admin/users_integration_test.rb +266 -0
  196. data/rails_2_test/test/integration/blog_posts_integration_test.rb +9 -0
  197. data/rails_2_test/test/test_helper.rb +114 -0
  198. data/rails_2_test/vendor/plugins/file_column/CHANGELOG +69 -0
  199. data/rails_2_test/vendor/plugins/file_column/README +54 -0
  200. data/rails_2_test/vendor/plugins/file_column/Rakefile +36 -0
  201. data/rails_2_test/vendor/plugins/file_column/TODO +6 -0
  202. data/rails_2_test/vendor/plugins/file_column/init.rb +13 -0
  203. data/rails_2_test/vendor/plugins/file_column/lib/file_column.rb +723 -0
  204. data/rails_2_test/vendor/plugins/file_column/lib/file_column_helper.rb +150 -0
  205. data/rails_2_test/vendor/plugins/file_column/lib/file_compat.rb +28 -0
  206. data/rails_2_test/vendor/plugins/file_column/lib/magick_file_column.rb +260 -0
  207. data/rails_2_test/vendor/plugins/file_column/lib/rails_file_column.rb +19 -0
  208. data/rails_2_test/vendor/plugins/file_column/lib/test_case.rb +124 -0
  209. data/rails_2_test/vendor/plugins/file_column/lib/validations.rb +112 -0
  210. data/rails_2_test/vendor/plugins/file_column/test/abstract_unit.rb +63 -0
  211. data/rails_2_test/vendor/plugins/file_column/test/connection.rb +17 -0
  212. data/rails_2_test/vendor/plugins/file_column/test/file_column_helper_test.rb +97 -0
  213. data/rails_2_test/vendor/plugins/file_column/test/file_column_test.rb +650 -0
  214. data/rails_2_test/vendor/plugins/file_column/test/fixtures/entry.rb +32 -0
  215. data/rails_2_test/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +1 -0
  216. data/rails_2_test/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
  217. data/rails_2_test/vendor/plugins/file_column/test/fixtures/mysql.sql +25 -0
  218. data/rails_2_test/vendor/plugins/file_column/test/fixtures/schema.rb +10 -0
  219. data/rails_2_test/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
  220. data/rails_2_test/vendor/plugins/file_column/test/magick_test.rb +380 -0
  221. data/rails_2_test/vendor/plugins/file_column/test/magick_view_only_test.rb +21 -0
  222. data/rails_3_test/.gitignore +4 -0
  223. data/rails_3_test/Gemfile +12 -0
  224. data/rails_3_test/Gemfile.lock +100 -0
  225. data/rails_3_test/README +256 -0
  226. data/rails_3_test/Rakefile +7 -0
  227. data/rails_3_test/app/controllers/admin/appointments2_controller.rb +15 -0
  228. data/rails_3_test/app/controllers/admin/appointments_controller.rb +11 -0
  229. data/rails_3_test/app/controllers/admin/blog_posts2_controller.rb +138 -0
  230. data/rails_3_test/app/controllers/admin/blog_posts3_controller.rb +76 -0
  231. data/rails_3_test/app/controllers/admin/blog_posts4_controller.rb +21 -0
  232. data/rails_3_test/app/controllers/admin/blog_posts5_controller.rb +27 -0
  233. data/rails_3_test/app/controllers/admin/blog_posts6_controller.rb +10 -0
  234. data/rails_3_test/app/controllers/admin/blog_posts_controller.rb +9 -0
  235. data/rails_3_test/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +15 -0
  236. data/rails_3_test/app/controllers/admin/blog_posts_read_only_controller.rb +19 -0
  237. data/rails_3_test/app/controllers/admin/bookmarks_controller.rb +11 -0
  238. data/rails_3_test/app/controllers/admin/comments2_controller.rb +14 -0
  239. data/rails_3_test/app/controllers/admin/comments_controller.rb +12 -0
  240. data/rails_3_test/app/controllers/admin/images2_controller.rb +11 -0
  241. data/rails_3_test/app/controllers/admin/images_controller.rb +6 -0
  242. data/rails_3_test/app/controllers/admin/misconfigured1_controller.rb +7 -0
  243. data/rails_3_test/app/controllers/admin/not_migrated_yets_controller.rb +9 -0
  244. data/rails_3_test/app/controllers/admin/product_categories2_controller.rb +7 -0
  245. data/rails_3_test/app/controllers/admin/product_categories_controller.rb +5 -0
  246. data/rails_3_test/app/controllers/admin/television_airings_controller.rb +5 -0
  247. data/rails_3_test/app/controllers/admin/television_time_slots_controller.rb +5 -0
  248. data/rails_3_test/app/controllers/admin/users2_controller.rb +10 -0
  249. data/rails_3_test/app/controllers/admin/users_controller.rb +48 -0
  250. data/rails_3_test/app/controllers/application_controller.rb +7 -0
  251. data/rails_3_test/app/controllers/blog_posts_controller.rb +5 -0
  252. data/rails_3_test/app/helpers/admin/appointments_helper.rb +2 -0
  253. data/rails_3_test/app/helpers/admin/blog_posts2_helper.rb +27 -0
  254. data/rails_3_test/app/helpers/admin/blog_posts3_helper.rb +2 -0
  255. data/rails_3_test/app/helpers/admin/blog_posts4_helper.rb +2 -0
  256. data/rails_3_test/app/helpers/admin/blog_posts6_helper.rb +13 -0
  257. data/rails_3_test/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +29 -0
  258. data/rails_3_test/app/helpers/admin/blog_posts_helper.rb +2 -0
  259. data/rails_3_test/app/helpers/admin/blog_posts_read_only_helper.rb +2 -0
  260. data/rails_3_test/app/helpers/admin/bookmarks_helper.rb +2 -0
  261. data/rails_3_test/app/helpers/admin/comments2_helper.rb +2 -0
  262. data/rails_3_test/app/helpers/admin/comments_helper.rb +2 -0
  263. data/rails_3_test/app/helpers/admin/images2_helper.rb +8 -0
  264. data/rails_3_test/app/helpers/admin/images_helper.rb +2 -0
  265. data/rails_3_test/app/helpers/admin/misconfigured1_helper.rb +2 -0
  266. data/rails_3_test/app/helpers/admin/not_migrated_yets_helper.rb +2 -0
  267. data/rails_3_test/app/helpers/admin/product_categories2_helper.rb +2 -0
  268. data/rails_3_test/app/helpers/admin/product_categories_helper.rb +2 -0
  269. data/rails_3_test/app/helpers/admin/television_airings_helper.rb +2 -0
  270. data/rails_3_test/app/helpers/admin/television_time_slots_helper.rb +2 -0
  271. data/rails_3_test/app/helpers/admin/users2_helper.rb +2 -0
  272. data/rails_3_test/app/helpers/admin/users_helper.rb +13 -0
  273. data/rails_3_test/app/helpers/application_helper.rb +2 -0
  274. data/rails_3_test/app/models/appointment.rb +5 -0
  275. data/rails_3_test/app/models/blog_post.rb +14 -0
  276. data/rails_3_test/app/models/blog_post_tag.rb +6 -0
  277. data/rails_3_test/app/models/bookmark.rb +6 -0
  278. data/rails_3_test/app/models/comment.rb +4 -0
  279. data/rails_3_test/app/models/image.rb +3 -0
  280. data/rails_3_test/app/models/not_migrated_yet.rb +2 -0
  281. data/rails_3_test/app/models/product.rb +5 -0
  282. data/rails_3_test/app/models/product_category.rb +9 -0
  283. data/rails_3_test/app/models/tag.rb +4 -0
  284. data/rails_3_test/app/models/television_airing.rb +3 -0
  285. data/rails_3_test/app/models/television_time_slot.rb +11 -0
  286. data/rails_3_test/app/models/user.rb +11 -0
  287. data/rails_3_test/app/views/admin/appointments/_subject_input.html.erb +2 -0
  288. data/rails_3_test/app/views/admin/appointments2/_time_input.html.erb +31 -0
  289. data/rails_3_test/app/views/admin/blog_posts2/_after_form.html.erb +5 -0
  290. data/rails_3_test/app/views/admin/blog_posts2/_after_index.html.erb +1 -0
  291. data/rails_3_test/app/views/admin/blog_posts2/_after_tags_input.html.erb +16 -0
  292. data/rails_3_test/app/views/admin/blog_posts2/_before_index.html.erb +2 -0
  293. data/rails_3_test/app/views/admin/blog_posts5/_after_index_header.html.erb +8 -0
  294. data/rails_3_test/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +1 -0
  295. data/rails_3_test/app/views/layouts/admin.html.erb +32 -0
  296. data/rails_3_test/app/views/layouts/application.html.erb +14 -0
  297. data/rails_3_test/config/application.rb +42 -0
  298. data/rails_3_test/config/boot.rb +6 -0
  299. data/rails_3_test/config/database.yml +22 -0
  300. data/rails_3_test/config/environment.rb +5 -0
  301. data/rails_3_test/config/environments/development.rb +26 -0
  302. data/rails_3_test/config/environments/production.rb +49 -0
  303. data/rails_3_test/config/environments/test.rb +35 -0
  304. data/rails_3_test/config/initializers/backtrace_silencers.rb +7 -0
  305. data/rails_3_test/config/initializers/inflections.rb +10 -0
  306. data/rails_3_test/config/initializers/mime_types.rb +5 -0
  307. data/rails_3_test/config/initializers/secret_token.rb +7 -0
  308. data/rails_3_test/config/initializers/session_store.rb +8 -0
  309. data/rails_3_test/config/locales/en.yml +5 -0
  310. data/rails_3_test/config/routes.rb +63 -0
  311. data/rails_3_test/config.ru +4 -0
  312. data/rails_3_test/db/migrate/20090213215514_create_blog_posts.rb +12 -0
  313. data/rails_3_test/db/migrate/20090217225542_add_body_to_blog_posts.rb +9 -0
  314. data/rails_3_test/db/migrate/20090221220917_create_tags.rb +13 -0
  315. data/rails_3_test/db/migrate/20090221220947_create_blog_post_tags.rb +14 -0
  316. data/rails_3_test/db/migrate/20090222162204_add_textile_to_blog_posts.rb +9 -0
  317. data/rails_3_test/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +9 -0
  318. data/rails_3_test/db/migrate/20090301191722_create_images.rb +16 -0
  319. data/rails_3_test/db/migrate/20090305165345_create_accounts.rb +14 -0
  320. data/rails_3_test/db/migrate/20090307225027_rename_accounts_to_users.rb +9 -0
  321. data/rails_3_test/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +9 -0
  322. data/rails_3_test/db/migrate/20090309185114_change_blog_posts_textile.rb +9 -0
  323. data/rails_3_test/db/migrate/20090309193635_create_products.rb +14 -0
  324. data/rails_3_test/db/migrate/20090309203056_create_comments.rb +15 -0
  325. data/rails_3_test/db/migrate/20090323005947_create_file_column_images.rb +12 -0
  326. data/rails_3_test/db/migrate/20090326160049_add_birthday_to_users.rb +9 -0
  327. data/rails_3_test/db/migrate/20090326223606_add_state_to_users.rb +9 -0
  328. data/rails_3_test/db/migrate/20090503134004_add_file_column_image_to_products.rb +9 -0
  329. data/rails_3_test/db/migrate/20090617173651_create_bookmarks.rb +15 -0
  330. data/rails_3_test/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +9 -0
  331. data/rails_3_test/db/migrate/20090625144313_add_avatar_fields_to_user.rb +11 -0
  332. data/rails_3_test/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +9 -0
  333. data/rails_3_test/db/migrate/20090701171857_add_force_textile_to_users.rb +9 -0
  334. data/rails_3_test/db/migrate/20090704163647_add_deleted_at_to_products.rb +9 -0
  335. data/rails_3_test/db/migrate/20090704173800_add_sale_fields_to_products.rb +13 -0
  336. data/rails_3_test/db/migrate/20090714024501_create_product_categories.rb +15 -0
  337. data/rails_3_test/db/migrate/20090819162835_add_admin_level_to_users.rb +9 -0
  338. data/rails_3_test/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +11 -0
  339. data/rails_3_test/db/migrate/20091221011256_add_position_to_product_categories.rb +9 -0
  340. data/rails_3_test/db/migrate/20091222160814_create_appointments.rb +14 -0
  341. data/rails_3_test/db/migrate/20091227224547_add_user_id_to_appointments.rb +9 -0
  342. data/rails_3_test/db/migrate/20100214213359_create_television_time_slots.rb +13 -0
  343. data/rails_3_test/db/migrate/20100214213451_create_television_airings.rb +15 -0
  344. data/rails_3_test/db/migrate/20110426215702_remove_avatar_fields_from_users.rb +11 -0
  345. data/rails_3_test/db/seeds.rb +7 -0
  346. data/rails_3_test/doc/README_FOR_APP +2 -0
  347. data/rails_3_test/lib/tasks/.gitkeep +0 -0
  348. data/rails_3_test/public/404.html +26 -0
  349. data/rails_3_test/public/422.html +26 -0
  350. data/rails_3_test/public/500.html +26 -0
  351. data/rails_3_test/public/favicon.ico +0 -0
  352. data/rails_3_test/public/images/rails.png +0 -0
  353. data/rails_3_test/public/index.html +239 -0
  354. data/rails_3_test/public/javascripts/application.js +2 -0
  355. data/rails_3_test/public/javascripts/jquery-1.4.4.min.js +167 -0
  356. data/rails_3_test/public/javascripts/rails.js +191 -0
  357. data/rails_3_test/public/robots.txt +5 -0
  358. data/rails_3_test/public/stylesheets/.gitkeep +0 -0
  359. data/rails_3_test/public/stylesheets/admin.css +3 -0
  360. data/rails_3_test/public/stylesheets/scaffold.css +54 -0
  361. data/rails_3_test/script/rails +6 -0
  362. data/rails_3_test/test/data/ruby_throated.jpg +0 -0
  363. data/rails_3_test/test/data/tweenbot.jpg +0 -0
  364. data/rails_3_test/test/fixtures/placeholder.txt +0 -0
  365. data/rails_3_test/test/integration/admin/appointments2_integration_test.rb +79 -0
  366. data/rails_3_test/test/integration/admin/appointments_integration_test.rb +367 -0
  367. data/rails_3_test/test/integration/admin/blog_posts2_integration_test.rb +789 -0
  368. data/rails_3_test/test/integration/admin/blog_posts3_integration_test.rb +418 -0
  369. data/rails_3_test/test/integration/admin/blog_posts4_integration_test.rb +189 -0
  370. data/rails_3_test/test/integration/admin/blog_posts5_integration_test.rb +75 -0
  371. data/rails_3_test/test/integration/admin/blog_posts6_integration_test.rb +39 -0
  372. data/rails_3_test/test/integration/admin/blog_posts_custom_new_and_edit_integration_test.rb +89 -0
  373. data/rails_3_test/test/integration/admin/blog_posts_integration_test.rb +784 -0
  374. data/rails_3_test/test/integration/admin/blog_posts_read_only_integration_test.rb +69 -0
  375. data/rails_3_test/test/integration/admin/bookmarks_integration_test.rb +445 -0
  376. data/rails_3_test/test/integration/admin/comments2_integration_test.rb +52 -0
  377. data/rails_3_test/test/integration/admin/comments_integration_test.rb +50 -0
  378. data/rails_3_test/test/integration/admin/images2_integration_test.rb +33 -0
  379. data/rails_3_test/test/integration/admin/images_integration_test.rb +79 -0
  380. data/rails_3_test/test/integration/admin/misconfigured1_integration_test.rb +21 -0
  381. data/rails_3_test/test/integration/admin/product_categories2_integration_test.rb +179 -0
  382. data/rails_3_test/test/integration/admin/product_categories_integration_test.rb +12 -0
  383. data/rails_3_test/test/integration/admin/television_airings_integration_test.rb +25 -0
  384. data/rails_3_test/test/integration/admin/users2_integration_test.rb +48 -0
  385. data/rails_3_test/test/integration/admin/users_integration_test.rb +182 -0
  386. data/rails_3_test/test/integration/blog_posts_integration_test.rb +10 -0
  387. data/rails_3_test/test/performance/browsing_test.rb +9 -0
  388. data/rails_3_test/test/test_helper.rb +98 -0
  389. data/rails_3_test/vendor/plugins/.gitkeep +0 -0
  390. data/website/_layouts/api.html +20 -17
  391. data/website/_layouts/api1.html +42 -0
  392. data/website/_layouts/default.html +42 -18
  393. data/website/api/core.markdown +6 -3
  394. data/website/api/destroy.markdown +4 -2
  395. data/website/api/form.markdown +6 -5
  396. data/website/api/idx.markdown +8 -7
  397. data/website/api/index.markdown +9 -7
  398. data/website/api/search.markdown +5 -3
  399. data/website/api/show.markdown +4 -2
  400. data/website/community.markdown +3 -2
  401. data/website/css/main.css +83 -17
  402. data/website/design_principles.markdown +3 -8
  403. data/website/index.markdown +13 -9
  404. data/website/js/lightbox.js +2 -2
  405. data/website/quick_start.markdown +10 -10
  406. data/website/screenshots.markdown +11 -11
  407. data/website/tutorial.markdown +23 -14
  408. data/website/v1/api/core.markdown +108 -0
  409. data/website/v1/api/destroy.markdown +27 -0
  410. data/website/v1/api/form.markdown +293 -0
  411. data/website/v1/api/idx.markdown +288 -0
  412. data/website/v1/api/index.markdown +149 -0
  413. data/website/v1/api/search.markdown +110 -0
  414. data/website/v1/api/show.markdown +24 -0
  415. data/website/v1/index.markdown +10 -0
  416. data/website/v1/quick_start.markdown +48 -0
  417. data/website/v1/tutorial.markdown +60 -0
  418. metadata +407 -9
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::BlogPostsReadOnlyIntegrationTest <
4
+ ActionController::IntegrationTest
5
+ def setup
6
+ User.destroy_all
7
+ @user = User.create! :username => 'soren'
8
+ end
9
+
10
+ def test_index
11
+ BlogPost.destroy_all
12
+ @blog_post = BlogPost.create!(
13
+ :title => "hi there", :user => @user, :textile => false
14
+ )
15
+ get "/admin/blog_posts_read_only"
16
+
17
+ # should be successful
18
+ assert_response :success
19
+
20
+ # should not have a new link
21
+ assert_no_match(%r|<a[^>]*>New blog post</a>|, response.body)
22
+
23
+ # should not make the textile field an Ajax toggle
24
+ assert_select(
25
+ "div[id=?]", "blog_post_#{@blog_post.id}_textile", false
26
+ )
27
+
28
+ # should have a show link
29
+ assert_select(
30
+ "a[href=/admin/blog_posts_read_only/show/#{@blog_post.id}]", 'Show'
31
+ )
32
+ end
33
+
34
+ def test_show_for_a_published_blog_post
35
+ @blog_post = BlogPost.create!(
36
+ :title => 'published', :user => @user, :published_at => Time.now.utc,
37
+ :body => 'Today I ate a sandwich.'
38
+ )
39
+ get "/admin/blog_posts_read_only/show/#{@blog_post.id}"
40
+
41
+ # should not show textile
42
+ assert_no_match(/Textile/, response.body)
43
+
44
+ # should use the block for the title
45
+ assert_select(
46
+ 'h2', :text => "Published blog post #{@blog_post.id}"
47
+ )
48
+
49
+ # should not show an edit link
50
+ assert_select(
51
+ 'a[href=?]', "/admin/blog_posts_read_only/edit/#{@blog_post.id}", false
52
+ )
53
+
54
+ # should use the custom partial to render the body
55
+ assert_select('strong', :text => 'Today I ate a sandwich.')
56
+ end
57
+
58
+ def test_show_for_an_unpublished_blog_post
59
+ @blog_post = BlogPost.create!(
60
+ :title => 'unpublished', :user_id => @user.id, :published_at => nil
61
+ )
62
+ get "/admin/blog_posts_read_only/show/#{@blog_post.id}"
63
+
64
+ # should use the block for the title
65
+ assert_select(
66
+ 'h2', :text => "Unpublished blog post #{@blog_post.id}"
67
+ )
68
+ end
69
+ end
@@ -0,0 +1,445 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+ require 'json'
3
+
4
+ class Admin::BookmarksIntegrationTest < ActionController::IntegrationTest
5
+ def setup
6
+ @user = User.find_or_create_by_username 'soren'
7
+ @blog_post = (BlogPost.find(:first) or
8
+ BlogPost.create!(:title => random_word, :user => @user))
9
+ end
10
+
11
+ def setup_15_blog_posts_16_comments_16_products_and_16_users
12
+ Bookmark.destroy_all
13
+ @blog_post_bookmark = Bookmark.create!(
14
+ :user => @user, :bookmarkable => @blog_post
15
+ )
16
+ BlogPost.count.downto(14) do
17
+ bp = BlogPost.find :first, :conditions => ['id != ?', @blog_post.id]
18
+ bp.destroy
19
+ end
20
+ Comment.count.upto(16) do
21
+ Comment.create!(
22
+ :user => @user, :blog_post => @blog_post, :comment => random_word
23
+ )
24
+ end
25
+ @comment = Comment.first
26
+ @comment_bookmark = Bookmark.create!(
27
+ :user => @user, :bookmarkable => @comment
28
+ )
29
+ Product.count.upto(16) do
30
+ Product.create! :name => random_word
31
+ end
32
+ @product = Product.first
33
+ @product_bookmark = Bookmark.create!(
34
+ :user => @user, :bookmarkable => @product
35
+ )
36
+ User.count.upto(16) do
37
+ User.create! :username => random_word
38
+ end
39
+ @user_bookmark = Bookmark.create! :user => @user, :bookmarkable => @user
40
+ end
41
+
42
+ def test_autocomplete_blog_post_with_one_match
43
+ get(
44
+ "/admin/bookmarks/autocomplete_blog_post", :q => @blog_post.title
45
+ )
46
+ results = JSON.parse(response.body)
47
+
48
+ assert(
49
+ results.any? { |r|
50
+ r['id'] == @blog_post.id.to_s && r['name'] == @blog_post.title
51
+ }
52
+ )
53
+ end
54
+
55
+ def test_index_while_not_searching
56
+ setup_15_blog_posts_16_comments_16_products_and_16_users
57
+ get "/admin/bookmarks"
58
+
59
+ # should be successful
60
+ assert_response :success
61
+
62
+ # should have base hidden values for the polymorphic fields in the search form
63
+ assert_select('form#search_form') do
64
+ assert_select(
65
+ 'input:not([value])[type=hidden][name=?][id=?]',
66
+ 'search[bookmarkable_id]', 'search_bookmarkable_id'
67
+ )
68
+ assert_select(
69
+ 'input:not([value])[type=hidden][name=?][id=?]',
70
+ 'search[bookmarkable_type]', 'search_bookmarkable_type'
71
+ )
72
+ end
73
+
74
+ # should show autocompleters for products and users in its search form
75
+ assert_select('form#search_form') do
76
+ [Product, User].each do |model_class|
77
+ name = model_class.name.downcase
78
+ assert_select(
79
+ "input:not([data-initial-name])[id=bookmarkable_#{name}_id]" +
80
+ "[data-behavior=autocomplete]"
81
+ )
82
+ end
83
+ end
84
+
85
+ # should show drop-downs for blog posts in its search form
86
+ assert_select('form#search_form') do
87
+ assert_select(
88
+ "input[id=bookmarkable_blog_post_id][data-behavior=autocomplete]",
89
+ false
90
+ )
91
+ assert_select('select[name=?]', 'bookmarkable_blog_post_id') do
92
+ assert_select("option[value='']", :text => '')
93
+ assert_select 'option[value=?]', @blog_post.id
94
+ end
95
+ end
96
+
97
+ # should show ID entry for comments since it has no default_name_method
98
+ assert_select('form#search_form') do
99
+ assert_select('select[name=?]', 'bookmarkable_comment_id', false)
100
+ assert_select 'input[name=?]', 'bookmarkable_comment_id'
101
+ end
102
+
103
+ # should show bookmarkable fields, using the target's default name method if it can find one
104
+ assert_select(
105
+ 'tr[id=?]', "bookmark_#{@blog_post_bookmark.id}"
106
+ ) do
107
+ assert_select(
108
+ 'td', :text => "Blog post '#{@blog_post.title}'"
109
+ )
110
+ end
111
+ assert_select(
112
+ 'tr[id=?]', "bookmark_#{@comment_bookmark.id}"
113
+ ) do
114
+ assert_select 'td', :text => "Comment #{@comment.id}"
115
+ end
116
+ assert_select(
117
+ 'tr[id=?]', "bookmark_#{@product_bookmark.id}"
118
+ ) do
119
+ assert_select 'td', :text => "Product '#{@product.name}'"
120
+ end
121
+ assert_select(
122
+ 'tr[id=?]', "bookmark_#{@user_bookmark.id}"
123
+ ) do
124
+ assert_select 'td', :text => "User '#{@user.username}'"
125
+ end
126
+ end
127
+
128
+ def test_index_while_searching_by_bookmarked_blog_post
129
+ setup_15_blog_posts_16_comments_16_products_and_16_users
130
+ get(
131
+ "/admin/bookmarks",
132
+ :search => {
133
+ :bookmarkable_type => 'BlogPost', :bookmarkable_id => @blog_post.id
134
+ }
135
+ )
136
+
137
+ # should be successful
138
+ assert_response :success
139
+
140
+ # should have base hidden values for the polymorphic fields in the search form
141
+ assert_select('form#search_form') do
142
+ assert_select(
143
+ 'input[type=hidden][name=?][id=?][value=?]',
144
+ 'search[bookmarkable_id]', 'search_bookmarkable_id', @blog_post.id
145
+ )
146
+ assert_select(
147
+ 'input[type=hidden][name=?][id=?][value=?]',
148
+ 'search[bookmarkable_type]', 'search_bookmarkable_type', 'BlogPost'
149
+ )
150
+ end
151
+
152
+ # should show autocompleters for products and users in its search form
153
+ assert_select('form#search_form') do
154
+ [Product, User].each do |model_class|
155
+ name = model_class.name.downcase
156
+ assert_select(
157
+ "input:not([value])[id=bookmarkable_#{name}_id]" +
158
+ "[data-behavior=autocomplete]"
159
+ )
160
+ end
161
+ end
162
+
163
+ # should show drop-downs for blog posts in its search form
164
+ assert_select('form#search_form') do
165
+ assert_select(
166
+ "input[id=bookmarkable_blog_post_id][data-behavior=autocomplete]",
167
+ false
168
+ )
169
+ assert_select('select[name=?]', 'bookmarkable_blog_post_id') do
170
+ assert_select("option[value='']", :text => '')
171
+ assert_select 'option[value=?][selected=selected]', @blog_post.id
172
+ end
173
+ end
174
+
175
+ # should show ID entry for comments since it has no default_name_method
176
+ assert_select('form#search_form') do
177
+ assert_select('select[name=?]', 'bookmarkable_comment_id', false)
178
+ assert_select 'input[name=?]', 'bookmarkable_comment_id'
179
+ end
180
+
181
+ # should only show bookmarks of that blog post
182
+ assert_select(
183
+ 'tr[id=?]', "bookmark_#{@blog_post_bookmark.id}"
184
+ )
185
+ excluded_bookmarks = [
186
+ @comment_bookmark, @product_bookmark, @user_bookmark
187
+ ]
188
+ excluded_bookmarks.each do |bookmark|
189
+ assert_select('tr[id=?]', "bookmark_#{bookmark.id}", false)
190
+ end
191
+ end
192
+
193
+ def test_index_while_searching_by_bookmarked_product
194
+ setup_15_blog_posts_16_comments_16_products_and_16_users
195
+ get(
196
+ "/admin/bookmarks",
197
+ :search => {
198
+ :bookmarkable_type => 'Product',
199
+ :bookmarkable_id => @product_bookmark.bookmarkable_id
200
+ }
201
+ )
202
+
203
+ # should be successful
204
+ assert_response :success
205
+
206
+ # should have base hidden values for the polymorphic fields in the search form
207
+ assert_select('form#search_form') do
208
+ assert_select(
209
+ 'input[type=hidden][name=?][id=?][value=?]',
210
+ 'search[bookmarkable_id]', 'search_bookmarkable_id',
211
+ @product_bookmark.bookmarkable_id
212
+ )
213
+ assert_select(
214
+ 'input[type=hidden][name=?][id=?][value=?]',
215
+ 'search[bookmarkable_type]', 'search_bookmarkable_type', 'Product'
216
+ )
217
+ end
218
+
219
+ # should show autocompleters for products and users in its search form
220
+ assert_select('form#search_form') do
221
+ assert_select(
222
+ "input[id=bookmarkable_product_id][data-initial-name=?]",
223
+ "#{@product_bookmark.bookmarkable.name}"
224
+ )
225
+ assert_select("input:not([data-initial-name])[id=bookmarkable_user_id]")
226
+ end
227
+
228
+ # should show drop-downs for blog posts in its search form
229
+ assert_select('form#search_form') do
230
+ assert_select(
231
+ "input[id=bookmarkable_blog_post_id][data-behavior=autocomplete]",
232
+ false
233
+ )
234
+ assert_select('select[name=?]', 'bookmarkable_blog_post_id') do
235
+ assert_select("option[value='']", :text => '')
236
+ assert_select 'option[value=?]', @blog_post.id
237
+ end
238
+ end
239
+
240
+ # should show only bookmarks of that product
241
+ assert_select(
242
+ 'tr[id=?]', "bookmark_#{@product_bookmark.id}"
243
+ )
244
+ excluded_bookmarks = [
245
+ @blog_post_bookmark, @comment_bookmark, @user_bookmark
246
+ ]
247
+ excluded_bookmarks.each do |bookmark|
248
+ assert_select('tr[id=?]', "bookmark_#{bookmark.id}", false)
249
+ end
250
+
251
+ # should show ID entry for comments since it has no default_name_method
252
+ assert_select('form#search_form') do
253
+ assert_select('select[name=?]', 'bookmarkable_comment_id', false)
254
+ assert_select 'input[name=?]', 'bookmarkable_comment_id'
255
+ end
256
+ end
257
+
258
+ def test_index_while_searching_by_bookmarked_comment
259
+ setup_15_blog_posts_16_comments_16_products_and_16_users
260
+ get(
261
+ "/admin/bookmarks",
262
+ :search => {
263
+ :bookmarkable_type => 'Comment',
264
+ :bookmarkable_id => @comment_bookmark.bookmarkable_id
265
+ }
266
+ )
267
+
268
+ # should be successful
269
+ assert_response :success
270
+
271
+ # should have base hidden values for the polymorphic fields in the search form
272
+ assert_select('form#search_form') do
273
+ assert_select(
274
+ 'input[type=hidden][name=?][id=?][value=?]',
275
+ 'search[bookmarkable_id]', 'search_bookmarkable_id',
276
+ @comment_bookmark.bookmarkable_id
277
+ )
278
+ assert_select(
279
+ 'input[type=hidden][name=?][id=?][value=?]',
280
+ 'search[bookmarkable_type]', 'search_bookmarkable_type', 'Comment'
281
+ )
282
+ end
283
+
284
+ # should show autocompleters for products and users in its search form
285
+ assert_select('form#search_form') do
286
+ [Product, User].each do |model_class|
287
+ name = model_class.name.downcase
288
+ assert_select(
289
+ "input:not([data-initial-name])[id=bookmarkable_#{name}_id]" +
290
+ "[data-behavior=autocomplete]"
291
+ )
292
+ end
293
+ end
294
+
295
+ # should show drop-downs for blog posts in its search form
296
+ assert_select('form#search_form') do
297
+ assert_select(
298
+ "input[id=bookmarkable_blog_post_id][data-behavior=autocomplete]",
299
+ false
300
+ )
301
+ assert_select('select[name=?]', 'bookmarkable_blog_post_id') do
302
+ assert_select("option[value='']", :text => '')
303
+ assert_select 'option[value=?]', @blog_post.id
304
+ end
305
+ end
306
+
307
+ # should show only bookmarks of that comment
308
+ assert_select(
309
+ 'tr[id=?]', "bookmark_#{@comment_bookmark.id}"
310
+ )
311
+ excluded_bookmarks = [
312
+ @blog_post_bookmark, @product_bookmark, @user_bookmark
313
+ ]
314
+ excluded_bookmarks.each do |bookmark|
315
+ assert_select('tr[id=?]', "bookmark_#{bookmark.id}", false)
316
+ end
317
+
318
+ # should show ID entry for comments since it has no default_name_method
319
+ assert_select('form#search_form') do
320
+ assert_select('select[name=?]', 'bookmarkable_comment_id', false)
321
+ assert_select(
322
+ 'input[name=?][value=?]', 'bookmarkable_comment_id',
323
+ @comment_bookmark.bookmarkable_id
324
+ )
325
+ end
326
+ end
327
+
328
+ def test_index_with_bookmarks_of_different_blog_posts_by_different_users
329
+ @user_blog_post_bookmark = Bookmark.create!(
330
+ :user => @user, :bookmarkable => @blog_post
331
+ )
332
+ user2 = User.find_or_create_by_username 'Jean-Paul'
333
+ blog_post2 = BlogPost.create!(:title => random_word, :user => user2)
334
+ @user_blog_post2_bookmark = Bookmark.create!(
335
+ :user => @user, :bookmarkable => blog_post2
336
+ )
337
+ @user2_blog_post_bookmark = Bookmark.create!(
338
+ :user => user2, :bookmarkable => @blog_post
339
+ )
340
+ @user2_blog_post2_bookmark = Bookmark.create!(
341
+ :user => user2, :bookmarkable => blog_post2
342
+ )
343
+ product = Product.find_or_create_by_name 'Chocolate bar'
344
+ @user2_product_bookmark = Bookmark.create!(
345
+ :user => user2, :bookmarkable => product
346
+ )
347
+
348
+ get(
349
+ "/admin/bookmarks",
350
+ :search => {
351
+ '(all_or_any)' => 'any', :bookmarkable_type => 'BlogPost',
352
+ :bookmarkable_id => @blog_post.id, :user_id => @user.id
353
+ }
354
+ )
355
+
356
+ # should include bookmarks of the blog post
357
+ assert_select(
358
+ 'tr[id=?]', "bookmark_#{@user_blog_post_bookmark.id}"
359
+ )
360
+ assert_select(
361
+ 'tr[id=?]', "bookmark_#{@user2_blog_post_bookmark.id}"
362
+ )
363
+
364
+ # should exclude bookmarks of other blog posts by other users
365
+ assert_select(
366
+ 'tr[id=?]', "bookmark_#{@user2_blog_post2_bookmark.id}", false
367
+ )
368
+
369
+ # should include bookmarks from the user
370
+ assert_select(
371
+ 'tr[id=?]', "bookmark_#{@user_blog_post_bookmark.id}"
372
+ )
373
+ assert_select(
374
+ 'tr[id=?]', "bookmark_#{@user_blog_post2_bookmark.id}"
375
+ )
376
+
377
+ # should exclude bookmarks of other bookmarkable types by other users
378
+ assert_select(
379
+ 'tr[id=?]', "bookmark_#{@user2_product_bookmark.id}", false
380
+ )
381
+ end
382
+
383
+ def test_index_with_a_blank_search
384
+ Bookmark.destroy_all
385
+ @blog_post_bookmark = Bookmark.create!(
386
+ :user => @user, :bookmarkable => @blog_post
387
+ )
388
+
389
+ get(
390
+ "/admin/bookmarks",
391
+ :search => {
392
+ :bookmarkable_type => '', :bookmarkable_id => '', :user_id => '',
393
+ '(all_or_any)' => 'all'
394
+ }
395
+ )
396
+
397
+ # should be successful
398
+ assert_response :success
399
+
400
+ # should include the bookmarks
401
+ assert_select(
402
+ 'tr[id=?]', "bookmark_#{@blog_post_bookmark.id}"
403
+ )
404
+ end
405
+
406
+ def test_edit
407
+ @bookmark = Bookmark.create! :user => @user, :bookmarkable => @blog_post
408
+
409
+ get "/admin/bookmarks/edit/#{@bookmark.id}"
410
+
411
+ # should have a 'Bookmarkable' field
412
+ bt_name = 'bookmark[bookmarkable_type]'
413
+ assert_select('select[name=?]', bt_name) do
414
+ assert_select 'option[value=BlogPost][selected=selected]',
415
+ :text => 'BlogPost'
416
+ assert_select 'option[value=Comment]', :text => 'Comment'
417
+ assert_select 'option[value=Product]', :text => 'Product'
418
+ assert_select 'option[value=User]', :text => 'User'
419
+ end
420
+ assert_select(
421
+ 'input[name=?][value=?]', 'bookmark[bookmarkable_id]', @blog_post.id
422
+ )
423
+ end
424
+
425
+ def test_new
426
+ get "/admin/bookmarks/new"
427
+
428
+ # should be successful
429
+ assert_response :success
430
+
431
+ # should not have a 'Bookmarkable type' field label
432
+ assert_no_match(%r|<label[^>]*>Bookmarkable type</label>|, response.body)
433
+
434
+ # should have a 'Bookmarkable' field
435
+ assert_select('label', :text => 'Bookmarkable')
436
+ bt_name = 'bookmark[bookmarkable_type]'
437
+ assert_select('select[name=?]', bt_name) do
438
+ assert_select 'option[value=BlogPost]', :text => 'BlogPost'
439
+ assert_select 'option[value=Comment]', :text => 'Comment'
440
+ assert_select 'option[value=Product]', :text => 'Product'
441
+ assert_select 'option[value=User]', :text => 'User'
442
+ end
443
+ assert_select('input[name=?]', 'bookmark[bookmarkable_id]')
444
+ end
445
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::Comments2IntegrationTest < ActionController::IntegrationTest
4
+ def setup
5
+ @user = User.find_or_create_by_username 'soren'
6
+ @published_blog_post = BlogPost.create!(
7
+ :title => 'published', :user => @user, :published_at => Time.now.utc
8
+ )
9
+ @unpublished_blog_post = BlogPost.create!(
10
+ :title => 'unpublished', :user => @user, :published_at => nil
11
+ )
12
+ end
13
+
14
+ def test_edit
15
+ @comment = Comment.create!(
16
+ :comment => "you're funny but I'm funnier",
17
+ :blog_post => @published_blog_post
18
+ )
19
+ get "/admin/comments2/edit/#{@comment.id}"
20
+
21
+ # should not have a textarea for Comment#comment
22
+ assert_select("textarea[name=?]", "comment[comment]", false)
23
+ end
24
+
25
+ def test_index
26
+ Comment.destroy_all
27
+ @comment_on_published = Comment.create!(
28
+ :comment => "this is published",
29
+ :blog_post => @published_blog_post
30
+ )
31
+ @comment_on_unpublished = Comment.create!(
32
+ :comment => "this was published but no more",
33
+ :blog_post => @unpublished_blog_post
34
+ )
35
+ get "/admin/comments2"
36
+
37
+ # should show a comment on a published blog post
38
+ assert_select('td', :text => 'this is published')
39
+
40
+ # should not show a comment on an unpublished blog post
41
+ assert_no_match(
42
+ %r|<td[^>]*>this was published but no more</td>|, response.body
43
+ )
44
+ end
45
+
46
+ def test_new
47
+ get "/admin/comments2/new"
48
+
49
+ # should have a textarea for Comment#comment
50
+ assert_select("textarea[name=?]", "comment[comment]")
51
+ end
52
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::CommentsIntegrationTest < ActionController::IntegrationTest
4
+ def test_edit
5
+ @comment = Comment.create! :comment => "you think you're so smart"
6
+ get "/admin/comments/edit/#{@comment.id}"
7
+
8
+ # should not allow the comments to be editable
9
+ assert_match(/you think you're so smart/, response.body)
10
+ assert_select('textarea', false)
11
+ end
12
+
13
+ def test_index_with_a_comment_without_the_word_smart
14
+ Comment.create! :comment => "something else"
15
+ get "/admin/comments"
16
+
17
+ # should not include the index
18
+ assert_no_match(/something else/, response.body)
19
+ end
20
+
21
+ def test_index_when_searching_by_comment
22
+ @comment = Comment.create! :comment => "you think you're so smart"
23
+ get "/admin/comments", :search => 'you'
24
+
25
+ # should find the comment
26
+ assert_match(/you think you're so smart/, response.body)
27
+ end
28
+
29
+ def test_index_when_searching_by_ID
30
+ @comment = Comment.create! :comment => "you think you're so smart"
31
+ get "/admin/comments", :search => @comment.id.to_s
32
+
33
+ # should find the comment
34
+ assert_match(/you think you're so smart/, response.body)
35
+ end
36
+
37
+ def test_new_with_at_least_16_blog_posts_and_16_users
38
+ user = User.find_or_create_by_username 'soren'
39
+ BlogPost.count.upto(16) do
40
+ BlogPost.create! :title => random_word, :user => user
41
+ end
42
+ User.count.upto(16) do
43
+ User.create! :username => random_word
44
+ end
45
+ get "/admin/comments/new"
46
+
47
+ # should be a success
48
+ assert_response :success
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::FileColumnImages2IntegrationTest <
4
+ ActionController::IntegrationTest
5
+
6
+ def test_index
7
+ @file_column_image = FileColumnImage.create!(
8
+ :image => File.open("./test/data/ruby_throated.jpg")
9
+ )
10
+ get "/admin/file_column_images2"
11
+ assert_response :success
12
+
13
+ # should show the image in-line as an <img> tag
14
+ assert_select(
15
+ "img[src^=?][width=300][height=500]",
16
+ "/file_column_image/image/#{@file_column_image.id}/ruby_throated.jpg"
17
+ )
18
+ end
19
+ end