admin_assistant 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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