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,418 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::BlogPosts3IntegrationTest < ActionController::IntegrationTest
4
+ def setup
5
+ User.destroy_all
6
+ @user = User.create! :username => 'soren', :password => 'password'
7
+ end
8
+
9
+ def test_create_with_no_title
10
+ @orig_blog_post_count = BlogPost.count
11
+ post "/admin/blog_posts3/create", :blog_post => {:user_id => @user.id}
12
+
13
+ # should redirect to the index
14
+ assert_redirected_to(:action => 'index')
15
+
16
+ # should create a new blog post with the title pre-filled as (draft)
17
+ assert_equal(@orig_blog_post_count + 1, BlogPost.count)
18
+ blog_post = BlogPost.last
19
+ assert_equal('(draft)', blog_post.title)
20
+ end
21
+
22
+ def test_edit
23
+ @blog_post = BlogPost.create! :title => random_word, :user => @user
24
+ get "/admin/blog_posts3/edit/#{@blog_post.id}"
25
+
26
+ # should have a body field
27
+ assert_select('textarea[name=?]', 'blog_post[body]')
28
+
29
+ # should not include textile
30
+ assert_no_match(/textile/, response.body)
31
+ end
32
+
33
+ def test_index_with_no_blog_posts
34
+ BlogPost.destroy_all
35
+ get "/admin/blog_posts3"
36
+ assert_response :success
37
+
38
+ # should use the activescaffold-themed CSS
39
+ assert_select(
40
+ 'link[href^=/stylesheets/admin_assistant/activescaffold.css]'
41
+ )
42
+
43
+ # should say 'Posts'
44
+ assert_select('h2', :text => 'Posts')
45
+ end
46
+
47
+ def test_index_with_one_unpublished_blog_post
48
+ BlogPost.destroy_all
49
+ @blog_post = BlogPost.create!(
50
+ :title => "unpublished blog post", :user => @user,
51
+ :published_at => nil
52
+ )
53
+ $cache.flush
54
+ get "/admin/blog_posts3"
55
+
56
+ # should show the blog post
57
+ assert_match(/unpublished blog post/, response.body)
58
+
59
+ # should show 'No' from having called BlogPost#published?
60
+ assert_select("tr[id=blog_post_#{@blog_post.id}]") do
61
+ assert_select "td", :text => 'No'
62
+ end
63
+
64
+ # should not have a comparator for the ID search field
65
+ assert_select('form[id=search_form][method=get]') do
66
+ assert_select("select[name=?]", "search[id(comparator)]", false)
67
+ end
68
+
69
+ # should have a blank checkbox for the body search field
70
+ assert_select('form[id=search_form][method=get]') do
71
+ assert_select("input[type=checkbox][name=?]", "search[body(blank)]")
72
+ end
73
+
74
+ # should render extra action links in order
75
+ assert_match(/Short title.*Blank body/m, response.body)
76
+
77
+ # should have a trinary select for the has_short_title search field
78
+ assert_select('form[id=search_form][method=get]') do
79
+ assert_select('select[name=?]', 'search[has_short_title]') do
80
+ assert_select("option[value='']", :text => '')
81
+ assert_select("option[value='true']", :text => 'Yes')
82
+ assert_select("option[value='false']", :text => 'No')
83
+ end
84
+ end
85
+
86
+ # should show a search form with specific fields
87
+ assert_select(
88
+ 'form[id=search_form][method=get]', :text => /Title/
89
+ ) do
90
+ assert_select('input[name=?]', 'search[title]')
91
+ assert_select('input[name=?]', 'search[body]')
92
+ assert_select('select[name=?]', 'search[textile]') do
93
+ assert_select("option[value='']", :text => '')
94
+ assert_select("option[value='true']", :text => 'true')
95
+ assert_select("option[value='false']", :text => 'false')
96
+ end
97
+ assert_select('label', :text => 'User')
98
+ assert_select('input[name=?]', 'search[user]')
99
+ end
100
+
101
+ # should set the count in memcache
102
+ key =
103
+ "AdminAssistant::Admin::BlogPosts3Controller_count_published_at_is_null_"
104
+ assert_equal(1, $cache.read(key))
105
+ assert_in_delta(12.hours, $cache.expires_in(key), 5.seconds)
106
+
107
+ # should not make the textile field an Ajax toggle
108
+ toggle_div_id = "blog_post_#{@blog_post.id}_textile"
109
+ assert_no_match(%r|new Ajax.Updater\('#{toggle_div_id}'|, response.body)
110
+ end
111
+
112
+ def test_index_with_a_published_blog_post
113
+ $cache.flush
114
+ BlogPost.destroy_all
115
+ BlogPost.create!(
116
+ :title => "published blog post", :user => @user,
117
+ :published_at => Time.now.utc
118
+ )
119
+ get "/admin/blog_posts3"
120
+
121
+ # should not show the blog post
122
+ assert_no_match(/published blog post/, response.body)
123
+ assert_match(/No posts found/, response.body)
124
+ end
125
+
126
+ def test_index_when_searching_by_user
127
+ User.destroy_all
128
+ tiffany = User.create!(:username => 'tiffany')
129
+ BlogPost.create! :title => "By Tiffany", :user => tiffany
130
+ BlogPost.create!(
131
+ :title => "Already published", :user => tiffany,
132
+ :published_at => Time.now
133
+ )
134
+ bill = User.create! :username => 'bill', :password => 'parsimony'
135
+ BlogPost.create! :title => "By Bill", :user => bill
136
+ brooklyn_steve = User.create!(
137
+ :username => 'brooklyn_steve', :state => 'NY'
138
+ )
139
+ BlogPost.create! :title => "By Brooklyn Steve", :user => brooklyn_steve
140
+ sadie = User.create!(
141
+ :username => 'Sadie', :password => 'sadie', :state => 'KY'
142
+ )
143
+ BlogPost.create! :title => "By Sadie", :user => sadie
144
+ get(
145
+ "/admin/blog_posts3",
146
+ :search => {
147
+ :body => "", :textile => "", :id => "", :user => 'ny',
148
+ :has_short_title => ''
149
+ }
150
+ )
151
+ assert_response :success
152
+
153
+ # should match the string to the username
154
+ assert_match(/By Tiffany/, response.body)
155
+
156
+ # should match the string to the password
157
+ assert_match(/By Bill/, response.body)
158
+
159
+ # should match the string to the state
160
+ assert_match(/By Brooklyn Steve/, response.body)
161
+
162
+ # should skip blog posts that don't match anything on the user
163
+ assert_no_match(/By Sadie/, response.body)
164
+
165
+ # should skip blog posts that have already been published
166
+ assert_no_match(/Already published/, response.body)
167
+ end
168
+
169
+ def test_index_with_blog_posts_from_two_different_users
170
+ aardvark_man = User.create!(:username => 'aardvark_man')
171
+ BlogPost.create! :title => 'AARDVARKS!!!!!1', :user => aardvark_man
172
+ ziggurat = User.create!(:username => 'zigguratz')
173
+ BlogPost.create! :title => "Wanna go climbing?", :user => ziggurat
174
+ get "/admin/blog_posts3"
175
+ assert_response :success
176
+
177
+ # should sort by username
178
+ assert_match(%r|AARDVARKS!!!!!1.*Wanna go climbing|m, response.body)
179
+ end
180
+
181
+ def test_index_when_searching_for_a_blank_body
182
+ BlogPost.destroy_all
183
+ @nil_body_post = BlogPost.create!(
184
+ :title => "nil", :user => @user, :body => nil
185
+ )
186
+ @empty_string_body_post = BlogPost.create!(
187
+ :title => "empty string", :user => @user, :body => ''
188
+ )
189
+ @non_blank_body_post = BlogPost.create!(
190
+ :title => "non-blank", :user => @user, :body => 'foo'
191
+ )
192
+ get(
193
+ "/admin/blog_posts3",
194
+ :search => {
195
+ "body(blank)" => '1', :user => '', :body => '', :title => '',
196
+ :textile => '', :id => '', '(all_or_any)' => 'all',
197
+ :has_short_title => ''
198
+ }
199
+ )
200
+
201
+ # should retrieve a blog post with a nil body
202
+ assert_select("tr[id=?]", "blog_post_#{@nil_body_post.id}")
203
+
204
+ # should retrieve a blog post with a space-only string body
205
+ assert_select(
206
+ "tr[id=?]", "blog_post_#{@empty_string_body_post.id}"
207
+ )
208
+
209
+ # should not retrieve a blog post with a non-blank body
210
+ assert_select(
211
+ "tr[id=?]", "blog_post_#{@non_blank_body_post.id}", false
212
+ )
213
+
214
+ # should have a checked blank checkbox for the body search field
215
+ assert_select('form[id=search_form][method=get]') do
216
+ assert_select(
217
+ "input[type=checkbox][checked=checked][name=?]",
218
+ "search[body(blank)]"
219
+ )
220
+ end
221
+ end
222
+
223
+ def test_index_when_searching_for_short_title_blog_posts
224
+ BlogPost.destroy_all
225
+ @bp1 = BlogPost.create!(
226
+ :title => 'short', :body => 'foobar', :user => @user
227
+ )
228
+ @bp2 = BlogPost.create!(
229
+ :title => "longer title", :body => 'foobar', :user => @user
230
+ )
231
+ get(
232
+ "/admin/blog_posts3",
233
+ :search => {
234
+ :body => "", "body(blank)" => '0', :textile => "", :id => "",
235
+ :user => '', :has_short_title => 'true'
236
+ }
237
+ )
238
+
239
+ # should return a short-titled blog post
240
+ assert_select('td', :text => 'short')
241
+
242
+ # should not return a longer-title blog post
243
+ assert_no_match(%r|<td[^>]*>longer title</td>|, response.body)
244
+
245
+ # should pre-select 'true' in the has_short_title search field
246
+ assert_select('form[id=search_form][method=get]') do
247
+ assert_select('select[name=?]', 'search[has_short_title]') do
248
+ assert_select("option[value='']", :text => '')
249
+ assert_select("option[value='true'][selected=selected]", :text => 'Yes')
250
+ assert_select("option[value='false']", :text => 'No')
251
+ end
252
+ end
253
+ end
254
+
255
+ def test_index_when_searching_for_long_titled_blog_posts
256
+ BlogPost.destroy_all
257
+ @bp1 = BlogPost.create!(
258
+ :title => 'short', :body => 'foobar', :user => @user
259
+ )
260
+ @bp2 = BlogPost.create!(
261
+ :title => "longer title", :body => 'foobar', :user => @user
262
+ )
263
+ get(
264
+ "/admin/blog_posts3",
265
+ :search => {
266
+ :body => "", "body(blank)" => '0', :textile => "", :id => "",
267
+ :user => '', :has_short_title => 'false'
268
+ }
269
+ )
270
+
271
+ # should not return a short-titled blog post
272
+ assert_no_match(%r|<td[^>]*>short</td>|, response.body)
273
+
274
+ # should return a longer-title blog post
275
+ assert_select('td', :text => 'longer title')
276
+
277
+ # should pre-select 'false' in the has_short_title search field
278
+ assert_select('form[id=search_form][method=get]') do
279
+ assert_select('select[name=?]', 'search[has_short_title]') do
280
+ assert_select("option[value='']", :text => '')
281
+ assert_select("option[value='true']", :text => 'Yes')
282
+ assert_select("option[value='false'][selected=selected]", :text => 'No')
283
+ end
284
+ end
285
+ end
286
+
287
+ def test_index_when_searching_for_blog_posts_of_any_title_length
288
+ BlogPost.destroy_all
289
+ @bp1 = BlogPost.create!(
290
+ :title => 'short', :body => 'foobar', :user => @user
291
+ )
292
+ @bp2 = BlogPost.create!(
293
+ :title => "longer title", :body => 'foobar', :user => @user
294
+ )
295
+ get(
296
+ "/admin/blog_posts3",
297
+ :search => {
298
+ :body => 'foobar', "body(blank)" => '0', :textile => "", :id => "",
299
+ :user => '', :has_short_title => ''
300
+ }
301
+ )
302
+
303
+ # should return a short-titled blog post
304
+ assert_select('td', :text => 'short')
305
+
306
+ # should return a longer-title blog post
307
+ assert_select('td', :text => 'longer title')
308
+ end
309
+
310
+ def test_index_when_searching_by_id
311
+ BlogPost.destroy_all
312
+ @blog_post1 = BlogPost.create! :title => random_word, :user => @user
313
+ blog_post2 = BlogPost.create! :title => random_word, :user => @user
314
+ BlogPost.update_all(
315
+ "id = #{@blog_post1.id * 10}", "id = #{blog_post2.id}"
316
+ )
317
+ @blog_post2 = BlogPost.find(@blog_post1.id * 10)
318
+ get(
319
+ "/admin/blog_posts3",
320
+ :search => {
321
+ :body => '', "body(blank)" => '0', :textile => "",
322
+ :id => @blog_post1.id.to_s, :user => '', :has_short_title => ''
323
+ }
324
+ )
325
+
326
+ # should match the record with that ID
327
+ assert_select("tr[id=?]", "blog_post_#{@blog_post1.id}")
328
+
329
+ # should not match a record with an ID that has the ID as a substring
330
+ assert_select("tr[id=?]", "blog_post_#{@blog_post2.id}", false)
331
+ end
332
+
333
+ def test_index_when_the_blank_body_count_has_been_cached_in_memcache_but_the_request_is_looking_for_the_default_index
334
+ $cache.flush
335
+ another_key =
336
+ "AdminAssistant::Admin::BlogPosts3Controller_count__body_is_null_or_body______"
337
+ $cache.write another_key, 1_000_000, :expires_in => 12.hours
338
+ get "/admin/blog_posts3"
339
+
340
+ # should not read a value from memcache
341
+ assert_no_match(/1000000 posts found/, response.body)
342
+
343
+ # should set the count in memcache
344
+ key =
345
+ "AdminAssistant::Admin::BlogPosts3Controller_count_published_at_is_null_"
346
+ assert $cache.read(key)
347
+ assert_in_delta(12.hours, $cache.expires_in(key), 5.seconds)
348
+ end
349
+
350
+ def test_index_when_the_count_has_been_cached_in_memcache
351
+ BlogPost.create!(:title => "title", :user => @user)
352
+ key =
353
+ "AdminAssistant::Admin::BlogPosts3Controller_count_published_at_is_null_"
354
+ $cache.write key, 1_000_000, :expires_in => 12.hours
355
+ $cache.raise_on_write
356
+ get "/admin/blog_posts3"
357
+
358
+ # should read memcache and not hit the database
359
+ assert_match(/1000000 posts found/, response.body)
360
+ end
361
+
362
+ def test_index_with_more_than_one_pages_worth_of_unpublished_blog_posts
363
+ $cache.flush
364
+ BlogPost.destroy_all
365
+ 1.upto(26) do |i|
366
+ BlogPost.create!(
367
+ :title => "unpublished blog post #{i}", :user => @user,
368
+ :published_at => nil
369
+ )
370
+ end
371
+ @unpub_count = BlogPost.count "published_at is null"
372
+ $cache.flush
373
+ get "/admin/blog_posts3"
374
+
375
+ # should cache the total number of entries, not the entries on just this page
376
+ key =
377
+ "AdminAssistant::Admin::BlogPosts3Controller_count_published_at_is_null_"
378
+ assert_equal(@unpub_count, $cache.read(key))
379
+ assert_in_delta(12.hours, $cache.expires_in(key), 5.seconds)
380
+ end
381
+
382
+ def test_new
383
+ @request_time = Time.now.utc
384
+ get "/admin/blog_posts3/new"
385
+
386
+ # should not have a body field
387
+ assert_select('textarea[name=?]', 'blog_post[body]', false)
388
+
389
+ # should have a published_at select that starts in the year 2009
390
+ name = 'blog_post[published_at(1i)]'
391
+ assert_select('select[name=?]', name) do
392
+ assert_select "option[value='2009']"
393
+ assert_select "option[value='2010']"
394
+ assert_select "option[value='2008']", false
395
+ end
396
+
397
+ # should have a published_at select that is set to now
398
+ name = 'blog_post[published_at(3i)]'
399
+ assert_select('select[name=?]', name) do
400
+ assert_select "option[value=?][selected=selected]", @request_time.day
401
+ end
402
+
403
+ # should not show a nullify link for published_at
404
+ assert_no_match(%r|<a [^>]*>Set "published at" to nil</a>|, response.body)
405
+
406
+ # should say 'New post'
407
+ assert_select('h2', :text => 'New post')
408
+ end
409
+
410
+ def test_show
411
+ @blog_post = BlogPost.create! :title => "title", :user => @user
412
+ get "/admin/blog_posts3/show/#{@blog_post.id}"
413
+ assert_response :success
414
+
415
+ # should say 'Post [ID]'
416
+ assert_select('h2', :text => "Post #{@blog_post.id}")
417
+ end
418
+ end
@@ -0,0 +1,189 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::BlogPosts4IntegrationTest < ActionController::IntegrationTest
4
+ def setup
5
+ User.destroy_all
6
+ @user = User.create! :username => 'soren'
7
+ end
8
+
9
+ def test_index
10
+ BlogPost.create!(
11
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @user,
12
+ :title => 'whatever'
13
+ )
14
+ get "/admin/blog_posts4"
15
+ assert_response :success
16
+
17
+ # should show datetime stuff in the search form for published_at
18
+ assert_select(
19
+ 'form[id=search_form][method=get]', :text => /Title/
20
+ ) do
21
+ assert_select('select[name=?]', 'search[published_at(comparator)]') do
22
+ assert_select("option[value=?]", ">", :text => 'greater than')
23
+ assert_select("option[value=?]", "<", :text => 'less than')
24
+ end
25
+ nums_and_dt_fields = {
26
+ 1 => :year, 2 => :month, 3 => :day, 4 => :hour, 5 => :min
27
+ }
28
+ nums_and_dt_fields.each do |num, dt_field|
29
+ name = "search[published_at(#{num}i)]"
30
+ value_for_now_option = Time.now.send(dt_field).to_s
31
+ if [:hour, :min].include?(dt_field) && value_for_now_option.size == 1
32
+ value_for_now_option = "0#{value_for_now_option}"
33
+ end
34
+ assert_select('select[name=?]', name) do
35
+ assert_select "option[value='']"
36
+ assert_select "option[value=?]", value_for_now_option
37
+ end
38
+ end
39
+ assert_select(
40
+ "a.clear_datetime_select[data-prefix=search_published_at]",
41
+ :text => 'Clear'
42
+ )
43
+ end
44
+
45
+ # should use strftime_format for displaying published_at
46
+ assert_select('td', :text => "Sep 01, 2009 12:30:00")
47
+ end
48
+
49
+ def test_index_when_searching_by_published_at_with_a_greater_than_comparator
50
+ @jun_blog_post = BlogPost.create!(
51
+ :published_at => Time.utc(2009,6,1), :title => 'June', :user => @user
52
+ )
53
+ @aug_blog_post = BlogPost.create!(
54
+ :published_at => Time.utc(2009,8,1), :title => 'August', :user => @user
55
+ )
56
+ get(
57
+ "/admin/blog_posts4",
58
+ :search => {
59
+ :textile => '', :title => '', :user_id => '',
60
+ 'published_at(comparator)' => '>',
61
+ 'published_at(1i)' => '2009', 'published_at(2i)' => '7',
62
+ 'published_at(3i)' => '1', 'published_at(4i)' => '1',
63
+ 'published_at(5i)' => '1'
64
+ }
65
+ )
66
+ assert_response :success
67
+
68
+ # should include a blog post with a published_at time after the entered time
69
+ assert_select('td', :text => 'August')
70
+
71
+ # should not include a blog post with a published_at time before the entered time
72
+ assert_no_match(%r|<td[^>]*>June</td>|, response.body)
73
+
74
+ # should show the right fields pre-filled in the search form
75
+ assert_select(
76
+ 'form[id=search_form][method=get]', :text => /Title/
77
+ ) do
78
+ assert_select('select[name=?]', 'search[published_at(comparator)]') do
79
+ assert_select(
80
+ "option[value=?][selected=selected]", ">", :text => 'greater than'
81
+ )
82
+ assert_select("option[value=?]", "<", :text => 'less than')
83
+ end
84
+ assert_select('select[name=?]', 'search[published_at(1i)]') do
85
+ assert_select "option[value=?][selected=selected]", "2009"
86
+ end
87
+ assert_select('select[name=?]', 'search[published_at(2i)]') do
88
+ assert_select "option[value=?][selected=selected]", "7"
89
+ end
90
+ assert_select('select[name=?]', 'search[published_at(3i)]') do
91
+ assert_select "option[value=?][selected=selected]", "1"
92
+ end
93
+ assert_select('select[name=?]', 'search[published_at(4i)]') do
94
+ assert_select "option[value=?][selected=selected]", "01"
95
+ end
96
+ assert_select('select[name=?]', 'search[published_at(5i)]') do
97
+ assert_select "option[value=?][selected=selected]", "01"
98
+ end
99
+ end
100
+ end
101
+
102
+ def test_index_when_searching_by_published_at_with_a_less_than_comparator
103
+ @jun_blog_post = BlogPost.create!(
104
+ :published_at => Time.utc(2009,6,1), :title => 'June', :user => @user
105
+ )
106
+ @aug_blog_post = BlogPost.create!(
107
+ :published_at => Time.utc(2009,8,1), :title => 'August', :user => @user
108
+ )
109
+ get(
110
+ "/admin/blog_posts4",
111
+ :search => {
112
+ :textile => '', :title => '', :user_id => '',
113
+ 'published_at(comparator)' => '<',
114
+ 'published_at(1i)' => '2009', 'published_at(2i)' => '7',
115
+ 'published_at(3i)' => '1', 'published_at(4i)' => '1',
116
+ 'published_at(5i)' => '1'
117
+ }
118
+ )
119
+ assert_response :success
120
+
121
+ # should not include a blog post with a published_at time after the entered time
122
+ assert_no_match(%r|<td[^>]*>August</td>|, response.body)
123
+
124
+ # should include a blog post with a published_at time before the entered time
125
+ assert_select('td', :text => 'June')
126
+
127
+ # should show the right fields pre-filled in the search form
128
+ assert_select(
129
+ 'form[id=search_form][method=get]', :text => /Title/
130
+ ) do
131
+ assert_select('select[name=?]', 'search[published_at(comparator)]') do
132
+ assert_select "option[value=?]", ">", :text => 'greater than'
133
+ assert_select(
134
+ "option[value=?][selected=selected]", "<", :text => 'less than'
135
+ )
136
+ end
137
+ assert_select('select[name=?]', 'search[published_at(1i)]') do
138
+ assert_select "option[value=?][selected=selected]", "2009"
139
+ end
140
+ assert_select('select[name=?]', 'search[published_at(2i)]') do
141
+ assert_select "option[value=?][selected=selected]", "7"
142
+ end
143
+ assert_select('select[name=?]', 'search[published_at(3i)]') do
144
+ assert_select "option[value=?][selected=selected]", "1"
145
+ end
146
+ assert_select('select[name=?]', 'search[published_at(4i)]') do
147
+ assert_select "option[value=?][selected=selected]", "01"
148
+ end
149
+ assert_select('select[name=?]', 'search[published_at(5i)]') do
150
+ assert_select "option[value=?][selected=selected]", "01"
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_index_with_26_unpublished_blog_posts
156
+ BlogPost.destroy_all
157
+ 1.upto(26) do |i|
158
+ BlogPost.create!(
159
+ :title => "--post #{i}--", :user => @user, :published_at => nil
160
+ )
161
+ end
162
+ get "/admin/blog_posts4"
163
+
164
+ # should not show link to page 2
165
+ assert_select("a[href=/admin/blog_posts4?page=2]", false)
166
+
167
+ # should only say 25 blog posts found
168
+ assert_match(/25 blog posts found/, response.body)
169
+ end
170
+
171
+ def test_new
172
+ get "/admin/blog_posts4/new"
173
+
174
+ # should use a textarea for virtual_text
175
+ assert_select("textarea[name=?]", "blog_post[virtual_text]")
176
+ end
177
+
178
+ def test_show
179
+ @blog_post = BlogPost.create!(
180
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @user,
181
+ :title => 'whatever'
182
+ )
183
+ get "/admin/blog_posts4/show/#{@blog_post.id}"
184
+ assert_response :success
185
+
186
+ # should use strftime_format for displaying published_at
187
+ assert_match(/Sep 01, 2009 12:30:00/, response.body)
188
+ end
189
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../test_helper")
2
+
3
+ class Admin::BlogPosts5IntegrationTest < ActionController::IntegrationTest
4
+ def setup
5
+ User.destroy_all
6
+ @soren = User.create! :username => 'soren'
7
+ @jean = User.create! :username => 'jean'
8
+ end
9
+
10
+ def test_create_with_title_alt
11
+ post(
12
+ "/admin/blog_posts5/create",
13
+ :blog_post => {
14
+ :user_id => @soren.id, :title => '', :title_alt => 'alternate field'
15
+ }
16
+ )
17
+ assert_response :redirect
18
+
19
+ # should use the value of title alt for the title
20
+ bp = BlogPost.last
21
+ assert_equal('alternate field', bp.title)
22
+ end
23
+
24
+ def test_index
25
+ BlogPost.create!(
26
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @soren,
27
+ :title => 'whatever'
28
+ )
29
+ BlogPost.create!(
30
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @soren,
31
+ :title => 'just do it'
32
+ )
33
+ get "/admin/blog_posts5"
34
+ assert_response :success
35
+
36
+ # should render the filter.html.erb partial
37
+ assert_select('ul.aa_filter')
38
+ assert_select('ul.aa_filter li a', :text => "soren")
39
+ assert_select('td', :text => "whatever")
40
+ assert_select('td', :text => "just do it")
41
+ end
42
+
43
+ def test_index_filter
44
+ BlogPost.create!(
45
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @soren,
46
+ :title => 'whatever'
47
+ )
48
+ BlogPost.create!(
49
+ :published_at => Time.utc(2009, 9, 1, 12, 30, 0), :user => @soren,
50
+ :title => 'whatever'
51
+ )
52
+
53
+ get "/admin/blog_posts5?filter=#{@soren.id}"
54
+ assert_response :success
55
+
56
+ # should filter blog posts by user id
57
+ assert_select('td', :text => "whatever")
58
+ assert_no_match(%r|<td[^>]*>just do it</td>|, response.body)
59
+ end
60
+
61
+ def test_search_retains_filter
62
+ user1 = User.find_or_create_by_username 'friedrich'
63
+ user2 = User.find_or_create_by_username 'rene'
64
+
65
+ BlogPost.create! :title => "God is dead", :user => user1
66
+ blog_post2 = BlogPost.create! :title => "I think therefore I am", :user => user2
67
+
68
+ visit "/admin/blog_posts5"
69
+ click_link "friedrich"
70
+ fill_in "search", :with => 'I think therefore I am'
71
+ click_button 'Search'
72
+
73
+ assert_select 'a[href=?]', "/admin/blog_posts5/edit/#{blog_post2.id}", false
74
+ end
75
+ end