admin_assistant 1.0.1 → 1.0.2

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 (288) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/admin_assistant.gemspec +1 -285
  4. metadata +3 -287
  5. data/test_rails_app/README +0 -256
  6. data/test_rails_app/Rakefile +0 -13
  7. data/test_rails_app/app/controllers/admin/appointments2_controller.rb +0 -15
  8. data/test_rails_app/app/controllers/admin/appointments_controller.rb +0 -11
  9. data/test_rails_app/app/controllers/admin/blog_posts2_controller.rb +0 -138
  10. data/test_rails_app/app/controllers/admin/blog_posts3_controller.rb +0 -76
  11. data/test_rails_app/app/controllers/admin/blog_posts4_controller.rb +0 -21
  12. data/test_rails_app/app/controllers/admin/blog_posts5_controller.rb +0 -27
  13. data/test_rails_app/app/controllers/admin/blog_posts6_controller.rb +0 -10
  14. data/test_rails_app/app/controllers/admin/blog_posts_controller.rb +0 -8
  15. data/test_rails_app/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +0 -15
  16. data/test_rails_app/app/controllers/admin/blog_posts_read_only_controller.rb +0 -19
  17. data/test_rails_app/app/controllers/admin/bookmarks_controller.rb +0 -11
  18. data/test_rails_app/app/controllers/admin/comments2_controller.rb +0 -14
  19. data/test_rails_app/app/controllers/admin/comments_controller.rb +0 -12
  20. data/test_rails_app/app/controllers/admin/file_column_images2_controller.rb +0 -10
  21. data/test_rails_app/app/controllers/admin/file_column_images_controller.rb +0 -6
  22. data/test_rails_app/app/controllers/admin/images2_controller.rb +0 -11
  23. data/test_rails_app/app/controllers/admin/images_controller.rb +0 -6
  24. data/test_rails_app/app/controllers/admin/misconfigured1_controller.rb +0 -7
  25. data/test_rails_app/app/controllers/admin/not_migrated_yets_controller.rb +0 -9
  26. data/test_rails_app/app/controllers/admin/product_categories2_controller.rb +0 -7
  27. data/test_rails_app/app/controllers/admin/product_categories_controller.rb +0 -5
  28. data/test_rails_app/app/controllers/admin/products2_controller.rb +0 -15
  29. data/test_rails_app/app/controllers/admin/products_controller.rb +0 -31
  30. data/test_rails_app/app/controllers/admin/television_airings_controller.rb +0 -5
  31. data/test_rails_app/app/controllers/admin/television_time_slots_controller.rb +0 -5
  32. data/test_rails_app/app/controllers/admin/users2_controller.rb +0 -10
  33. data/test_rails_app/app/controllers/admin/users_controller.rb +0 -63
  34. data/test_rails_app/app/controllers/application.rb +0 -16
  35. data/test_rails_app/app/controllers/application_controller.rb +0 -16
  36. data/test_rails_app/app/controllers/blog_posts_controller.rb +0 -5
  37. data/test_rails_app/app/helpers/admin/appointments2_helper.rb +0 -2
  38. data/test_rails_app/app/helpers/admin/appointments_helper.rb +0 -2
  39. data/test_rails_app/app/helpers/admin/blog_posts2_helper.rb +0 -27
  40. data/test_rails_app/app/helpers/admin/blog_posts3_helper.rb +0 -2
  41. data/test_rails_app/app/helpers/admin/blog_posts4_helper.rb +0 -2
  42. data/test_rails_app/app/helpers/admin/blog_posts6_helper.rb +0 -16
  43. data/test_rails_app/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +0 -29
  44. data/test_rails_app/app/helpers/admin/blog_posts_helper.rb +0 -2
  45. data/test_rails_app/app/helpers/admin/blog_posts_read_only_helper.rb +0 -2
  46. data/test_rails_app/app/helpers/admin/bookmarks_helper.rb +0 -2
  47. data/test_rails_app/app/helpers/admin/comments2_helper.rb +0 -2
  48. data/test_rails_app/app/helpers/admin/comments_helper.rb +0 -2
  49. data/test_rails_app/app/helpers/admin/file_column_images2_helper.rb +0 -2
  50. data/test_rails_app/app/helpers/admin/file_column_images_helper.rb +0 -2
  51. data/test_rails_app/app/helpers/admin/images2_helper.rb +0 -8
  52. data/test_rails_app/app/helpers/admin/images_helper.rb +0 -2
  53. data/test_rails_app/app/helpers/admin/misconfigured1_helper.rb +0 -2
  54. data/test_rails_app/app/helpers/admin/not_migrated_yets_helper.rb +0 -2
  55. data/test_rails_app/app/helpers/admin/product_categories2_helper.rb +0 -2
  56. data/test_rails_app/app/helpers/admin/product_categories_helper.rb +0 -2
  57. data/test_rails_app/app/helpers/admin/products2_helper.rb +0 -3
  58. data/test_rails_app/app/helpers/admin/products_helper.rb +0 -6
  59. data/test_rails_app/app/helpers/admin/television_airings_helper.rb +0 -2
  60. data/test_rails_app/app/helpers/admin/television_time_slots_helper.rb +0 -2
  61. data/test_rails_app/app/helpers/admin/users2_helper.rb +0 -2
  62. data/test_rails_app/app/helpers/admin/users_helper.rb +0 -25
  63. data/test_rails_app/app/helpers/application_helper.rb +0 -3
  64. data/test_rails_app/app/helpers/blog_posts_helper.rb +0 -2
  65. data/test_rails_app/app/models/appointment.rb +0 -5
  66. data/test_rails_app/app/models/blog_post.rb +0 -14
  67. data/test_rails_app/app/models/blog_post_tag.rb +0 -6
  68. data/test_rails_app/app/models/bookmark.rb +0 -6
  69. data/test_rails_app/app/models/comment.rb +0 -4
  70. data/test_rails_app/app/models/file_column_image.rb +0 -3
  71. data/test_rails_app/app/models/image.rb +0 -3
  72. data/test_rails_app/app/models/not_migrated_yet.rb +0 -2
  73. data/test_rails_app/app/models/product.rb +0 -7
  74. data/test_rails_app/app/models/product_category.rb +0 -9
  75. data/test_rails_app/app/models/tag.rb +0 -4
  76. data/test_rails_app/app/models/television_airing.rb +0 -3
  77. data/test_rails_app/app/models/television_time_slot.rb +0 -11
  78. data/test_rails_app/app/models/user.rb +0 -14
  79. data/test_rails_app/app/views/admin/appointments/_subject_input.html.erb +0 -2
  80. data/test_rails_app/app/views/admin/appointments2/_time_input.html.erb +0 -31
  81. data/test_rails_app/app/views/admin/blog_posts2/_after_form.html.erb +0 -5
  82. data/test_rails_app/app/views/admin/blog_posts2/_after_index.html.erb +0 -1
  83. data/test_rails_app/app/views/admin/blog_posts2/_after_tags_input.html.erb +0 -16
  84. data/test_rails_app/app/views/admin/blog_posts2/_before_index.html.erb +0 -2
  85. data/test_rails_app/app/views/admin/blog_posts5/_after_index_header.html.erb +0 -8
  86. data/test_rails_app/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +0 -1
  87. data/test_rails_app/app/views/admin/products/_name_input.html.erb +0 -2
  88. data/test_rails_app/app/views/admin/products/_percent_off_input.html.erb +0 -2
  89. data/test_rails_app/app/views/admin/products/_price_input.html.erb +0 -10
  90. data/test_rails_app/app/views/blog_posts/show.html.erb +0 -13
  91. data/test_rails_app/app/views/layouts/admin.html.erb +0 -31
  92. data/test_rails_app/config/boot.rb +0 -109
  93. data/test_rails_app/config/database.yml +0 -28
  94. data/test_rails_app/config/environment.rb +0 -78
  95. data/test_rails_app/config/environments/development.rb +0 -17
  96. data/test_rails_app/config/environments/production.rb +0 -24
  97. data/test_rails_app/config/environments/test.rb +0 -24
  98. data/test_rails_app/config/initializers/inflections.rb +0 -10
  99. data/test_rails_app/config/initializers/mime_types.rb +0 -5
  100. data/test_rails_app/config/initializers/new_rails_defaults.rb +0 -17
  101. data/test_rails_app/config/locales/en.yml +0 -5
  102. data/test_rails_app/config/routes.rb +0 -43
  103. data/test_rails_app/db/migrate/20090213215514_create_blog_posts.rb +0 -12
  104. data/test_rails_app/db/migrate/20090217225542_add_body_to_blog_posts.rb +0 -9
  105. data/test_rails_app/db/migrate/20090221220917_create_tags.rb +0 -13
  106. data/test_rails_app/db/migrate/20090221220947_create_blog_post_tags.rb +0 -14
  107. data/test_rails_app/db/migrate/20090222162204_add_textile_to_blog_posts.rb +0 -9
  108. data/test_rails_app/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +0 -9
  109. data/test_rails_app/db/migrate/20090301191722_create_images.rb +0 -16
  110. data/test_rails_app/db/migrate/20090305165345_create_accounts.rb +0 -14
  111. data/test_rails_app/db/migrate/20090307225027_rename_accounts_to_users.rb +0 -9
  112. data/test_rails_app/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +0 -9
  113. data/test_rails_app/db/migrate/20090309185114_change_blog_posts_textile.rb +0 -9
  114. data/test_rails_app/db/migrate/20090309193635_create_products.rb +0 -14
  115. data/test_rails_app/db/migrate/20090309203056_create_comments.rb +0 -15
  116. data/test_rails_app/db/migrate/20090323005947_create_file_column_images.rb +0 -12
  117. data/test_rails_app/db/migrate/20090326160049_add_birthday_to_users.rb +0 -9
  118. data/test_rails_app/db/migrate/20090326223606_add_state_to_users.rb +0 -9
  119. data/test_rails_app/db/migrate/20090503134004_add_file_column_image_to_products.rb +0 -9
  120. data/test_rails_app/db/migrate/20090617173651_create_bookmarks.rb +0 -15
  121. data/test_rails_app/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +0 -9
  122. data/test_rails_app/db/migrate/20090625144313_add_avatar_fields_to_user.rb +0 -11
  123. data/test_rails_app/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +0 -9
  124. data/test_rails_app/db/migrate/20090701171857_add_force_textile_to_users.rb +0 -9
  125. data/test_rails_app/db/migrate/20090704163647_add_deleted_at_to_products.rb +0 -9
  126. data/test_rails_app/db/migrate/20090704173800_add_sale_fields_to_products.rb +0 -13
  127. data/test_rails_app/db/migrate/20090714024501_create_product_categories.rb +0 -15
  128. data/test_rails_app/db/migrate/20090819162835_add_admin_level_to_users.rb +0 -9
  129. data/test_rails_app/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +0 -11
  130. data/test_rails_app/db/migrate/20091221011256_add_position_to_product_categories.rb +0 -9
  131. data/test_rails_app/db/migrate/20091222160814_create_appointments.rb +0 -14
  132. data/test_rails_app/db/migrate/20091227224547_add_user_id_to_appointments.rb +0 -9
  133. data/test_rails_app/db/migrate/20100214213359_create_television_time_slots.rb +0 -13
  134. data/test_rails_app/db/migrate/20100214213451_create_television_airings.rb +0 -15
  135. data/test_rails_app/doc/README_FOR_APP +0 -5
  136. data/test_rails_app/lib/tasks/rspec.rake +0 -163
  137. data/test_rails_app/public/404.html +0 -30
  138. data/test_rails_app/public/422.html +0 -30
  139. data/test_rails_app/public/500.html +0 -33
  140. data/test_rails_app/public/dispatch.cgi +0 -10
  141. data/test_rails_app/public/dispatch.fcgi +0 -24
  142. data/test_rails_app/public/dispatch.rb +0 -10
  143. data/test_rails_app/public/favicon.ico +0 -0
  144. data/test_rails_app/public/images/rails.png +0 -0
  145. data/test_rails_app/public/index.html +0 -274
  146. data/test_rails_app/public/javascripts/application.js +0 -2
  147. data/test_rails_app/public/javascripts/controls.js +0 -963
  148. data/test_rails_app/public/javascripts/dragdrop.js +0 -973
  149. data/test_rails_app/public/javascripts/effects.js +0 -1128
  150. data/test_rails_app/public/javascripts/prototype.js +0 -4320
  151. data/test_rails_app/public/robots.txt +0 -5
  152. data/test_rails_app/public/stylesheets/admin.css +0 -3
  153. data/test_rails_app/public/stylesheets/scaffold.css +0 -54
  154. data/test_rails_app/script/about +0 -4
  155. data/test_rails_app/script/autospec +0 -5
  156. data/test_rails_app/script/console +0 -3
  157. data/test_rails_app/script/dbconsole +0 -3
  158. data/test_rails_app/script/destroy +0 -3
  159. data/test_rails_app/script/generate +0 -3
  160. data/test_rails_app/script/performance/benchmarker +0 -3
  161. data/test_rails_app/script/performance/profiler +0 -3
  162. data/test_rails_app/script/performance/request +0 -3
  163. data/test_rails_app/script/plugin +0 -3
  164. data/test_rails_app/script/populate_tables.rb +0 -49
  165. data/test_rails_app/script/process/inspector +0 -3
  166. data/test_rails_app/script/process/reaper +0 -3
  167. data/test_rails_app/script/process/spawner +0 -3
  168. data/test_rails_app/script/runner +0 -3
  169. data/test_rails_app/script/server +0 -3
  170. data/test_rails_app/script/spec +0 -5
  171. data/test_rails_app/script/spec_server +0 -125
  172. data/test_rails_app/spec/controllers/admin/appointments2_controller_spec.rb +0 -88
  173. data/test_rails_app/spec/controllers/admin/appointments_controller_spec.rb +0 -419
  174. data/test_rails_app/spec/controllers/admin/blog_posts2_controller_spec.rb +0 -1021
  175. data/test_rails_app/spec/controllers/admin/blog_posts3_controller_spec.rb +0 -532
  176. data/test_rails_app/spec/controllers/admin/blog_posts4_controller_spec.rb +0 -231
  177. data/test_rails_app/spec/controllers/admin/blog_posts5_controller_spec.rb +0 -77
  178. data/test_rails_app/spec/controllers/admin/blog_posts6_controller_spec.rb +0 -49
  179. data/test_rails_app/spec/controllers/admin/blog_posts_controller_spec.rb +0 -987
  180. data/test_rails_app/spec/controllers/admin/blog_posts_custom_new_and_edit_controller_spec.rb +0 -99
  181. data/test_rails_app/spec/controllers/admin/blog_posts_read_only_controller_spec.rb +0 -94
  182. data/test_rails_app/spec/controllers/admin/bookmarks_controller_spec.rb +0 -505
  183. data/test_rails_app/spec/controllers/admin/comments2_controller_spec.rb +0 -70
  184. data/test_rails_app/spec/controllers/admin/comments_controller_spec.rb +0 -82
  185. data/test_rails_app/spec/controllers/admin/file_column_images2_controller_spec.rb +0 -25
  186. data/test_rails_app/spec/controllers/admin/file_column_images_controller_spec.rb +0 -82
  187. data/test_rails_app/spec/controllers/admin/images2_controller_spec.rb +0 -44
  188. data/test_rails_app/spec/controllers/admin/images_controller_spec.rb +0 -97
  189. data/test_rails_app/spec/controllers/admin/misconfigured1_controller_spec.rb +0 -21
  190. data/test_rails_app/spec/controllers/admin/not_migrated_yets_controller_spec.rb +0 -10
  191. data/test_rails_app/spec/controllers/admin/product_categories2_controller_spec.rb +0 -215
  192. data/test_rails_app/spec/controllers/admin/product_categories_controller_spec.rb +0 -19
  193. data/test_rails_app/spec/controllers/admin/products2_controller_spec.rb +0 -203
  194. data/test_rails_app/spec/controllers/admin/products_controller_spec.rb +0 -255
  195. data/test_rails_app/spec/controllers/admin/television_airings_controller_spec.rb +0 -32
  196. data/test_rails_app/spec/controllers/admin/television_time_slots_controller_spec.rb +0 -10
  197. data/test_rails_app/spec/controllers/admin/users2_controller_spec.rb +0 -65
  198. data/test_rails_app/spec/controllers/admin/users_controller_spec.rb +0 -344
  199. data/test_rails_app/spec/controllers/blog_posts_controller_spec.rb +0 -13
  200. data/test_rails_app/spec/data/ruby_throated.jpg +0 -0
  201. data/test_rails_app/spec/data/tweenbot.jpg +0 -0
  202. data/test_rails_app/spec/fixtures/appointments.yml +0 -9
  203. data/test_rails_app/spec/fixtures/blog_post_tags.yml +0 -9
  204. data/test_rails_app/spec/fixtures/blog_posts.yml +0 -7
  205. data/test_rails_app/spec/fixtures/bookmarks.yml +0 -11
  206. data/test_rails_app/spec/fixtures/comments.yml +0 -11
  207. data/test_rails_app/spec/fixtures/file_column_images.yml +0 -7
  208. data/test_rails_app/spec/fixtures/images.yml +0 -7
  209. data/test_rails_app/spec/fixtures/not_migrated_yets.yml +0 -7
  210. data/test_rails_app/spec/fixtures/product_categories.yml +0 -7
  211. data/test_rails_app/spec/fixtures/products.yml +0 -9
  212. data/test_rails_app/spec/fixtures/tags.yml +0 -7
  213. data/test_rails_app/spec/fixtures/television_airings.yml +0 -11
  214. data/test_rails_app/spec/fixtures/television_time_slots.yml +0 -7
  215. data/test_rails_app/spec/fixtures/users.yml +0 -9
  216. data/test_rails_app/spec/helpers/admin/appointments2_helper_spec.rb +0 -11
  217. data/test_rails_app/spec/helpers/admin/appointments_helper_spec.rb +0 -11
  218. data/test_rails_app/spec/helpers/admin/blog_posts2_helper_spec.rb +0 -11
  219. data/test_rails_app/spec/helpers/admin/blog_posts3_helper_spec.rb +0 -11
  220. data/test_rails_app/spec/helpers/admin/blog_posts4_helper_spec.rb +0 -11
  221. data/test_rails_app/spec/helpers/admin/blog_posts_custom_new_and_edit_helper_spec.rb +0 -11
  222. data/test_rails_app/spec/helpers/admin/blog_posts_helper_spec.rb +0 -11
  223. data/test_rails_app/spec/helpers/admin/blog_posts_read_only_helper_spec.rb +0 -11
  224. data/test_rails_app/spec/helpers/admin/bookmarks_helper_spec.rb +0 -11
  225. data/test_rails_app/spec/helpers/admin/comments2_helper_spec.rb +0 -11
  226. data/test_rails_app/spec/helpers/admin/comments_helper_spec.rb +0 -11
  227. data/test_rails_app/spec/helpers/admin/file_column_images2_helper_spec.rb +0 -11
  228. data/test_rails_app/spec/helpers/admin/file_column_images_helper_spec.rb +0 -11
  229. data/test_rails_app/spec/helpers/admin/images2_helper_spec.rb +0 -11
  230. data/test_rails_app/spec/helpers/admin/images_helper_spec.rb +0 -11
  231. data/test_rails_app/spec/helpers/admin/misconfigured1_helper_spec.rb +0 -11
  232. data/test_rails_app/spec/helpers/admin/not_migrated_yets_helper_spec.rb +0 -11
  233. data/test_rails_app/spec/helpers/admin/product_categories2_helper_spec.rb +0 -11
  234. data/test_rails_app/spec/helpers/admin/product_categories_helper_spec.rb +0 -11
  235. data/test_rails_app/spec/helpers/admin/products2_helper_spec.rb +0 -11
  236. data/test_rails_app/spec/helpers/admin/products_helper_spec.rb +0 -11
  237. data/test_rails_app/spec/helpers/admin/television_airings_helper_spec.rb +0 -11
  238. data/test_rails_app/spec/helpers/admin/television_time_slots_helper_spec.rb +0 -11
  239. data/test_rails_app/spec/helpers/admin/users2_helper_spec.rb +0 -11
  240. data/test_rails_app/spec/helpers/admin/users_helper_spec.rb +0 -11
  241. data/test_rails_app/spec/helpers/blog_posts_helper_spec.rb +0 -11
  242. data/test_rails_app/spec/models/appointment_spec.rb +0 -16
  243. data/test_rails_app/spec/models/blog_post_spec.rb +0 -13
  244. data/test_rails_app/spec/models/blog_post_tag_spec.rb +0 -14
  245. data/test_rails_app/spec/models/bookmark_spec.rb +0 -15
  246. data/test_rails_app/spec/models/comment_spec.rb +0 -15
  247. data/test_rails_app/spec/models/file_column_image_spec.rb +0 -12
  248. data/test_rails_app/spec/models/image_spec.rb +0 -12
  249. data/test_rails_app/spec/models/not_migrated_yet_spec.rb +0 -15
  250. data/test_rails_app/spec/models/product_category_spec.rb +0 -15
  251. data/test_rails_app/spec/models/product_spec.rb +0 -14
  252. data/test_rails_app/spec/models/tag_spec.rb +0 -13
  253. data/test_rails_app/spec/models/television_airing_spec.rb +0 -15
  254. data/test_rails_app/spec/models/television_time_slot_spec.rb +0 -13
  255. data/test_rails_app/spec/models/user_spec.rb +0 -14
  256. data/test_rails_app/spec/rcov.opts +0 -2
  257. data/test_rails_app/spec/spec.opts +0 -4
  258. data/test_rails_app/spec/spec_helper.rb +0 -88
  259. data/test_rails_app/spec/spec_or_test_helper.rb +0 -49
  260. data/test_rails_app/test/fixtures/file_column_images.yml +0 -7
  261. data/test_rails_app/test/integration/admin_blog_posts2_integration_test.rb +0 -16
  262. data/test_rails_app/test/integration/admin_blog_posts5_integration_test.rb +0 -19
  263. data/test_rails_app/test/integration/admin_blog_posts_integration_test.rb +0 -25
  264. data/test_rails_app/test/test_helper.rb +0 -28
  265. data/test_rails_app/vendor/plugins/file_column/CHANGELOG +0 -69
  266. data/test_rails_app/vendor/plugins/file_column/README +0 -54
  267. data/test_rails_app/vendor/plugins/file_column/Rakefile +0 -36
  268. data/test_rails_app/vendor/plugins/file_column/TODO +0 -6
  269. data/test_rails_app/vendor/plugins/file_column/init.rb +0 -13
  270. data/test_rails_app/vendor/plugins/file_column/lib/file_column.rb +0 -723
  271. data/test_rails_app/vendor/plugins/file_column/lib/file_column_helper.rb +0 -150
  272. data/test_rails_app/vendor/plugins/file_column/lib/file_compat.rb +0 -28
  273. data/test_rails_app/vendor/plugins/file_column/lib/magick_file_column.rb +0 -260
  274. data/test_rails_app/vendor/plugins/file_column/lib/rails_file_column.rb +0 -19
  275. data/test_rails_app/vendor/plugins/file_column/lib/test_case.rb +0 -124
  276. data/test_rails_app/vendor/plugins/file_column/lib/validations.rb +0 -112
  277. data/test_rails_app/vendor/plugins/file_column/test/abstract_unit.rb +0 -63
  278. data/test_rails_app/vendor/plugins/file_column/test/connection.rb +0 -17
  279. data/test_rails_app/vendor/plugins/file_column/test/file_column_helper_test.rb +0 -97
  280. data/test_rails_app/vendor/plugins/file_column/test/file_column_test.rb +0 -650
  281. data/test_rails_app/vendor/plugins/file_column/test/fixtures/entry.rb +0 -32
  282. data/test_rails_app/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +0 -1
  283. data/test_rails_app/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
  284. data/test_rails_app/vendor/plugins/file_column/test/fixtures/mysql.sql +0 -25
  285. data/test_rails_app/vendor/plugins/file_column/test/fixtures/schema.rb +0 -10
  286. data/test_rails_app/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
  287. data/test_rails_app/vendor/plugins/file_column/test/magick_test.rb +0 -380
  288. data/test_rails_app/vendor/plugins/file_column/test/magick_view_only_test.rb +0 -21
@@ -1,987 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe Admin::BlogPostsController do
4
- integrate_views
5
-
6
- before :all do
7
- User.destroy_all
8
- @user = User.create! :username => 'soren'
9
- end
10
-
11
- describe '#autocomplete_user' do
12
- before :all do
13
- @bill1 = User.create! :username => 'Bill 1'
14
- @bill2 = User.create! :username => 'Bill 2'
15
- 1.upto(11) do |i|
16
- User.create! :username => "Bob #{i}"
17
- end
18
- User.create! :username => 'Bob'
19
- end
20
-
21
- describe 'with no matches' do
22
- before :each do
23
- get :autocomplete_user, :user_autocomplete_input => 'Jane'
24
- end
25
-
26
- it 'should return empty results' do
27
- response.should have_tag('ul')
28
- response.should_not have_tag('ul > li')
29
- end
30
-
31
- it 'should not render the admin layout' do
32
- response.should_not have_tag('head > title')
33
- end
34
- end
35
-
36
- describe 'with two matches' do
37
- before :each do
38
- get :autocomplete_user, :user_autocomplete_input => 'Bill'
39
- end
40
-
41
- it 'should return those two matches' do
42
- response.should have_tag('ul') do
43
- with_tag "li[id=user#{@bill1.id}]", :text => 'Bill 1'
44
- with_tag "li[id=user#{@bill2.id}]", :text => 'Bill 2'
45
- end
46
- end
47
- end
48
-
49
- describe 'with 12 matches' do
50
- before :each do
51
- get :autocomplete_user, :user_autocomplete_input => 'Bob'
52
- end
53
-
54
- it 'should return a max of ten users' do
55
- response.should have_tag('ul > li', :count => 10)
56
- end
57
-
58
- it 'should make sure the shortest matches are included in the results' do
59
- response.should have_tag('ul > li', :text => 'Bob')
60
- end
61
- end
62
- end
63
-
64
- describe '#create' do
65
- describe 'when there are no validation errors' do
66
- before :each do
67
- title = random_word
68
- post(
69
- :create,
70
- :blog_post => {
71
- :title => title, :textile => '1', :user_id => @user.id,
72
- 'published_at(1i)' => '', 'published_at(2i)' => '',
73
- 'published_at(3i)' => '', 'published_at(4i)' => '',
74
- 'published_at(5i)' => ''
75
- }
76
- )
77
- @blog_post = BlogPost.find_by_title(title)
78
- end
79
-
80
- it 'should create a new BlogPost' do
81
- @blog_post.should_not be_nil
82
- @blog_post.textile?.should be_true
83
- end
84
-
85
- it 'should not set published_at' do
86
- @blog_post.published_at.should be_nil
87
- end
88
- end
89
-
90
- describe 'when there are validation errors' do
91
- before :each do
92
- post(
93
- :create, :blog_post => {:title => ''}, :origin => '/admin/blog_posts'
94
- )
95
- end
96
-
97
- it 'should not create a new BlogPost' do
98
- BlogPost.find_by_title('').should be_nil
99
- end
100
-
101
- it 'should print all the errors' do
102
- response.should be_success
103
- response.body.should match(/Title can't be blank/)
104
- end
105
-
106
- it 'should show a link back to the index page' do
107
- response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
108
- end
109
- end
110
-
111
- describe 'when somebody GETs for some reason' do
112
- before :each do
113
- get :create
114
- end
115
-
116
- it 'should just redirect to #new' do
117
- response.should redirect_to(:action => 'new')
118
- end
119
- end
120
- end
121
-
122
- describe '#destroy' do
123
- it 'should be an unknown action' do
124
- lambda { post :destroy, :id => 123 }.should raise_error(
125
- ActionController::UnknownAction
126
- )
127
- end
128
- end
129
-
130
- describe '#edit' do
131
- before :all do
132
- @blog_post = BlogPost.create! :title => random_word, :user => @user
133
- end
134
-
135
- before :each do
136
- @request.env["HTTP_REFERER"] = '/admin/blog_posts'
137
- get :edit, :id => @blog_post.id
138
- end
139
-
140
- it 'should show a form' do
141
- response.body.should match(
142
- %r|<form action="/admin/blog_posts/update/#{@blog_post.id}".*input.*name="blog_post\[title\]"|m
143
- )
144
- end
145
-
146
- it 'should prefill the values' do
147
- response.body.should match(%r|input.*value="#{@blog_post.title}"|)
148
- end
149
-
150
- it 'should show a link back to the index page' do
151
- response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
152
- end
153
- end
154
-
155
- describe '#edit when there is a referer value on the request' do
156
- it 'should have the origin hidden input value' do
157
- blog_post = BlogPost.create! :title => random_word, :user => @user
158
- referer_page = 'referer_page'
159
- @request.env['HTTP_REFERER'] = referer_page
160
- get :edit, :id => blog_post.id
161
- response.should have_tag("input#origin[value=#{referer_page}]")
162
- end
163
- end
164
-
165
- describe '#edit when there are more than 15 users' do
166
- before :all do
167
- @blog_post = BlogPost.create! :title => random_word, :user => @user
168
- 1.upto(16) do |i|
169
- User.create! :username => "--user #{i}--"
170
- end
171
- end
172
-
173
- before :each do
174
- get :edit, :id => @blog_post.id
175
- end
176
-
177
- it 'should use the restricted autocompleter instead of a drop-down' do
178
- response.should_not have_tag("select[name=?]", "blog_post[user_id]")
179
- response.should have_tag(
180
- "input[id=user_autocomplete_input][value=soren]"
181
- )
182
- response.should have_tag(
183
- "input[type=hidden][name=?][id=blog_post_user_id][value=?]",
184
- "blog_post[user_id]", @user.id.to_s
185
- )
186
- response.should have_tag("div[id=user_autocomplete_palette]")
187
- response.should have_tag('div[id=clear_user_link]')
188
- response.body.should match(
189
- %r|
190
- new\s*AdminAssistant.RestrictedAutocompleter\(
191
- \s*"user",
192
- \s*"blog_post_user_id",
193
- \s*"/admin/blog_posts/autocomplete_user",
194
- [^)]*"includeBlank":\s*true
195
- |mx
196
- )
197
- end
198
- end
199
-
200
- describe '#edit when there are less than 15 users' do
201
- before :all do
202
- @blog_post = BlogPost.create! :title => random_word, :user => @user
203
- User.count.downto(14) do
204
- user = User.find(
205
- :first, :conditions => ['username != ?', @user.username]
206
- )
207
- user.destroy
208
- end
209
- end
210
-
211
- before :each do
212
- get :edit, :id => @blog_post.id
213
- end
214
-
215
- it 'should use a drop-down with a blank option' do
216
- response.should have_tag('select[name=?]', 'blog_post[user_id]') do
217
- with_tag "option[value='']"
218
- end
219
- end
220
- end
221
-
222
- describe '#index' do
223
- describe 'when there are no records' do
224
- before :all do
225
- BlogPost.destroy_all
226
- end
227
-
228
- before :each do
229
- get :index
230
- response.should be_success
231
- end
232
-
233
- it 'should say "No blog posts found"' do
234
- response.body.should match(/No blog posts found/)
235
- end
236
-
237
- it "should say the name of the model you're editing" do
238
- response.body.should match(/Blog posts/)
239
- end
240
-
241
- it 'should have a new link' do
242
- response.should have_tag(
243
- "a[href=/admin/blog_posts/new]", 'New blog post'
244
- )
245
- end
246
-
247
- it 'should have a search form' do
248
- response.body.should match(
249
- %r|<a.*onclick="AdminAssistant.show_search_form\(\);.*>Search</a>|
250
- )
251
- end
252
-
253
- it 'should use the admin layout' do
254
- response.body.should match(/admin_assistant sample Rails app/)
255
- end
256
-
257
- it 'should use the default admin_assistant CSS' do
258
- response.should have_tag(
259
- 'link[href^=/stylesheets/admin_assistant/default.css]'
260
- )
261
- end
262
- end
263
-
264
- describe 'when there is one record' do
265
- before :all do
266
- BlogPost.destroy_all
267
- @blog_post = BlogPost.create!(
268
- :title => "hi there", :user => @user, :textile => false
269
- )
270
- end
271
-
272
- before :each do
273
- get :index
274
- response.should be_success
275
- end
276
-
277
- it 'should show title by default' do
278
- response.body.should match(/hi there/)
279
- end
280
-
281
- it "should say the name of the model you're editing" do
282
- response.body.should match(/Blog posts/)
283
- end
284
-
285
- it 'should have a new link' do
286
- response.should have_tag(
287
- "a[href=/admin/blog_posts/new]", 'New blog post'
288
- )
289
- end
290
-
291
- it 'should have an edit link' do
292
- response.should have_tag('td.actions') do
293
- with_tag "a[href=/admin/blog_posts/edit/#{@blog_post.id}]", 'Edit'
294
- end
295
- end
296
-
297
- it 'should have a show link' do
298
- response.should have_tag(
299
- "a[href=/admin/blog_posts/show/#{@blog_post.id}]", 'Show'
300
- )
301
- end
302
-
303
- it 'should show sort links' do
304
- pretty_column_names = {
305
- 'id' => 'ID', 'title' => 'Title', 'body' => 'Body', 'user' => 'User'
306
- }
307
- pretty_column_names.each do |field, pretty_column_name|
308
- assert_a_tag_with_get_args(
309
- pretty_column_name, '/admin/blog_posts',
310
- {:sort => field, :sort_order => 'asc'}, response.body
311
- )
312
- end
313
- end
314
-
315
- it 'should show pretty column headers' do
316
- column_headers = ['ID', 'Title', 'Body', 'User']
317
- column_headers.each do |column_header|
318
- response.should have_tag('th') do
319
- with_tag 'a', column_header
320
- end
321
- end
322
- end
323
-
324
- it 'should say how many records are found' do
325
- response.should have_tag(
326
- 'div.aa_footer', :text => '1 blog post found'
327
- )
328
- end
329
-
330
- it "should say username because that's one of our default name fields" do
331
- response.should have_tag('td', :text => 'soren')
332
- end
333
-
334
- it 'should make the textile field an Ajax toggle' do
335
- toggle_div_id = "blog_post_#{@blog_post.id}_textile"
336
- post_url =
337
- "/admin/blog_posts/update/#{@blog_post.id}?" +
338
- CGI.escape('blog_post[textile]') + "=1&amp;from=#{toggle_div_id}"
339
- response.should have_tag("div[id=?]", toggle_div_id) do
340
- ajax_substr = "new Ajax.Updater('#{toggle_div_id}', '#{post_url}'"
341
- with_tag("a[href=#][onclick*=?]", ajax_substr, :text => 'false')
342
- end
343
- end
344
-
345
- it 'should not show the page selector form' do
346
- response.should have_tag('.pagination') do
347
- without_tag('form[method=get][action=/admin/blog_posts]')
348
- end
349
- end
350
-
351
- it 'should have a tbody with the ID blog_posts_index_tbody' do
352
- response.should have_tag('tbody#blog_posts_index_tbody')
353
- end
354
-
355
- it 'should have a tr with the ID based on @blog_post.id' do
356
- response.should have_tag("tr[id=blog_post_#{@blog_post.id}]")
357
- end
358
-
359
- it 'should not show created_at or updated_at by default' do
360
- response.body.should_not match(/Created at/)
361
- response.body.should_not match(/Updated at/)
362
- end
363
- end
364
-
365
- describe 'when there is one record that somehow has a nil User' do
366
- before :all do
367
- @blog_post = BlogPost.create! :title => "hi there", :user => @user
368
- BlogPost.update_all "user_id = null"
369
- end
370
-
371
- before :each do
372
- get :index
373
- end
374
-
375
- it 'should be fine with a nil User' do
376
- response.should be_success
377
- end
378
- end
379
-
380
- describe 'when there are more than 10 pages of results' do
381
- before :all do
382
- BlogPost.count.upto(251) do
383
- @blog_post = BlogPost.create!(
384
- :title => "hi there", :user => @user, :textile => false
385
- )
386
- end
387
- end
388
-
389
- before :each do
390
- get :index
391
- end
392
-
393
- it 'should show the page selector form at the bottom' do
394
- response.should have_tag('.pagination') do
395
- with_tag('form[method=get][action=/admin/blog_posts]') do
396
- with_tag 'input[name=page]'
397
- end
398
- end
399
- end
400
- end
401
- end
402
-
403
- describe '#index sorting' do
404
- describe 'when there are two records' do
405
- before :all do
406
- BlogPost.destroy_all
407
- @blog_post1 = BlogPost.create!(
408
- :title => "title 1", :body => "body 2", :user => @user
409
- )
410
- @blog_post2 = BlogPost.create!(
411
- :title => "title 2", :body => "body 1", :user => @user
412
- )
413
- end
414
-
415
- describe 'sorted by title asc' do
416
- before :each do
417
- get :index, :sort => 'title', :sort_order => 'asc'
418
- response.should be_success
419
- end
420
-
421
- it 'should sort by title asc' do
422
- response.body.should match(%r|title 1.*title 2|m)
423
- end
424
-
425
- it 'should show a desc sort link for title' do
426
- assert_a_tag_with_get_args(
427
- 'Title', '/admin/blog_posts',
428
- {:sort => 'title', :sort_order => 'desc'}, response.body
429
- )
430
- end
431
-
432
- it 'should show asc sort links for other fields' do
433
- pretty_column_names = {'id' => 'ID', 'body' => 'Body'}
434
- pretty_column_names.each do |field, pretty_column_name|
435
- assert_a_tag_with_get_args(
436
- pretty_column_name, '/admin/blog_posts',
437
- {:sort => field, :sort_order => 'asc'}, response.body
438
- )
439
- end
440
- end
441
-
442
- it 'should use the right CSS classes in the title header' do
443
- response.should have_tag('th[class="sort asc"]') do
444
- with_tag 'a', :text => 'Title'
445
- end
446
- end
447
-
448
- it 'should have no CSS sorting classes in the header for ID' do
449
- response.should have_tag('th:not([class])') do
450
- with_tag 'a', :text => 'ID'
451
- end
452
- end
453
-
454
- it 'should mark the title cells with CSS sorting classes' do
455
- response.should have_tag('td[class="sort"]', :text => 'title 1')
456
- end
457
- end
458
-
459
- describe 'sorted by title desc' do
460
- before :each do
461
- get :index, :sort => 'title', :sort_order => 'desc'
462
- response.should be_success
463
- end
464
-
465
- it 'should sort by title desc' do
466
- response.body.should match(%r|title 2.*title 1|m)
467
- end
468
-
469
- it 'should show a no-sort link for title' do
470
- response.should have_tag("a[href=/admin/blog_posts]", 'Title')
471
- end
472
-
473
- it 'should show asc sort links for other fields' do
474
- pretty_column_names = {'id' => 'ID', 'body' => 'Body'}
475
- pretty_column_names.each do |field, pretty_column_name|
476
- assert_a_tag_with_get_args(
477
- pretty_column_name, '/admin/blog_posts',
478
- {:sort => field, :sort_order => 'asc'}, response.body
479
- )
480
- end
481
- end
482
-
483
- it 'should use the right CSS classes in the title header' do
484
- response.should have_tag('th[class="sort desc"]') do
485
- with_tag 'a', :text => 'Title'
486
- end
487
- end
488
-
489
- it 'should have no CSS sorting classes in the header for ID' do
490
- response.should have_tag('th:not([class])') do
491
- with_tag 'a', :text => 'ID'
492
- end
493
- end
494
-
495
- it 'should mark the title cells with CSS sorting classes' do
496
- response.should have_tag('td[class="sort"]', :text => 'title 1')
497
- end
498
- end
499
- end
500
-
501
- describe 'by #user, a belongs_to association' do
502
- before :all do
503
- BlogPost.destroy_all
504
- jean_paul = User.create! :username => 'jean-paul'
505
- BlogPost.create!(
506
- :title => 'title 1', :body => 'body 1', :user => @user
507
- )
508
- BlogPost.create!(
509
- :title => 'title 2', :body => 'body 2', :user => jean_paul
510
- )
511
- end
512
-
513
- describe 'asc' do
514
- before :each do
515
- get :index, :sort => 'user', :sort_order => 'asc'
516
- response.should be_success
517
- end
518
-
519
- it "should show jean-paul's blog post before soren's" do
520
- response.body.should match(%r|jean-paul.*soren|m)
521
- end
522
-
523
- it 'should use the right CSS classes in the user header' do
524
- response.should have_tag('th[class="sort asc"]') do
525
- with_tag 'a', :text => 'User'
526
- end
527
- end
528
-
529
- it 'should mark the title cells with CSS sorting classes' do
530
- response.should have_tag('td[class="sort"]', :text => 'jean-paul')
531
- end
532
-
533
- it 'should show a desc sort link for user' do
534
- assert_a_tag_with_get_args(
535
- 'User', '/admin/blog_posts',
536
- {:sort => 'user', :sort_order => 'desc'}, response.body
537
- )
538
- end
539
- end
540
-
541
- describe 'desc' do
542
- before :each do
543
- get :index, :sort => 'user', :sort_order => 'desc'
544
- response.should be_success
545
- end
546
-
547
- it "should show soren's blog post before jean-paul's" do
548
- response.body.should match(%r|soren.*jean-paul|m)
549
- end
550
- end
551
- end
552
- end
553
-
554
- describe '#index search' do
555
- before :all do
556
- BlogPost.destroy_all
557
- end
558
-
559
- before :each do
560
- get :index, :search => 'foo'
561
- response.should be_success
562
- end
563
-
564
- describe 'when there are no records' do
565
- it "should say 'No blog posts found'" do
566
- response.body.should match(/No blog posts found/)
567
- end
568
-
569
- it "should display the search with the terms" do
570
- response.body.should match(
571
- %r|<form[^>]*id="search_form".*show_search_form\(\)|m
572
- )
573
- response.body.should match(%r|input.*value="foo"|)
574
- end
575
-
576
- it 'should show a link back to the index page' do
577
- response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
578
- end
579
- end
580
-
581
- describe 'when there are no records that match' do
582
- before :all do
583
- BlogPost.create!(
584
- :title => 'no match', :body => 'no match', :user => @user
585
- )
586
- end
587
-
588
- it "should say 'No blog posts found'" do
589
- response.body.should match(/No blog posts found/)
590
- end
591
- end
592
-
593
- describe 'when there is a blog post with a matching title' do
594
- before :all do
595
- BlogPost.create!(
596
- :title => 'foozy', :body => 'blog post body', :user => @user
597
- )
598
- end
599
-
600
- it "should show that blog post" do
601
- response.body.should match(/blog post body/)
602
- end
603
- end
604
-
605
- describe 'when there is a blog post with a matching body' do
606
- before :all do
607
- BlogPost.create!(
608
- :title => 'blog post title', :body => 'barfoo', :user => @user
609
- )
610
- end
611
-
612
- it "should show that blog post" do
613
- response.body.should match(/blog post title/)
614
- end
615
-
616
- it 'should say how many records are found' do
617
- response.body.should match(/1 blog post found/)
618
- end
619
- end
620
- end
621
-
622
- describe '#index pagination with 51 records' do
623
- before :all do
624
- BlogPost.destroy_all
625
- 1.upto(51) do |i|
626
- BlogPost.create!(
627
- :title => "title -#{i}-", :body => "body -#{i}-", :user => @user
628
- )
629
- end
630
- end
631
-
632
- describe 'when looking at the first page' do
633
- before :each do
634
- get :index
635
- response.should be_success
636
- end
637
-
638
- it 'should have a link to the next page' do
639
- response.should have_tag(
640
- "a[href=/admin/blog_posts?page=2]", 'Next &raquo;'
641
- )
642
- response.should have_tag("a[href=/admin/blog_posts?page=2]", '2')
643
- end
644
-
645
- it 'should not have a link to the previous page' do
646
- response.should_not have_tag(
647
- "a[href=/admin/blog_posts?page=0]", '&laquo; Previous'
648
- )
649
- response.should_not have_tag("a[href=/admin/blog_posts?page=0]", '0')
650
- end
651
-
652
- it 'should the full number of posts found' do
653
- response.body.should match(/51 blog posts found/)
654
- end
655
- end
656
-
657
- describe 'when looking at the second page' do
658
- before :each do
659
- get :index, :page => '2'
660
- response.should be_success
661
- end
662
-
663
- it 'should have a link to the next page' do
664
- response.should have_tag(
665
- "a[href=/admin/blog_posts?page=3]", 'Next &raquo;'
666
- )
667
- response.should have_tag("a[href=/admin/blog_posts?page=3]", '3')
668
- end
669
-
670
- it 'should have a link to the previous page' do
671
- response.should have_tag(
672
- "a[href=/admin/blog_posts?page=1]", '&laquo; Previous'
673
- )
674
- response.should have_tag("a[href=/admin/blog_posts?page=1]", '1')
675
- end
676
-
677
- it 'should the full number of posts found' do
678
- response.body.should match(/51 blog posts found/)
679
- end
680
- end
681
-
682
- describe 'when looking at the third page' do
683
- before :each do
684
- get :index, :page => '3'
685
- response.should be_success
686
- end
687
-
688
- it 'should not have a link to the next page' do
689
- response.should_not have_tag(
690
- "a[href=/admin/blog_posts?page=4]", 'Next &raquo;'
691
- )
692
- response.should_not have_tag("a[href=/admin/blog_posts?page=3]", '3')
693
- end
694
-
695
- it 'should have a link to the previous page' do
696
- response.should have_tag(
697
- "a[href=/admin/blog_posts?page=2]", '&laquo; Previous'
698
- )
699
- response.should have_tag("a[href=/admin/blog_posts?page=2]", '2')
700
- end
701
-
702
- it 'should the full number of posts found' do
703
- response.body.should match(/51 blog posts found/)
704
- end
705
- end
706
- end
707
-
708
- describe '#index with 100_000 records' do
709
- before :all do
710
- BlogPost.count.upto(25) do |i|
711
- BlogPost.create!(
712
- :title => "title -#{i}-", :body => "body -#{i}-", :user => @user
713
- )
714
- end
715
- records = BlogPost.paginate(:per_page => 25, :page => 1)
716
- records.total_entries = 100_000
717
- BlogPost.should_receive(:paginate).and_return(records)
718
- end
719
-
720
- before :each do
721
- get :index
722
- end
723
-
724
- it 'should not offer a link to sort by user' do
725
- assert_no_a_tag_with_get_args(
726
- 'User', '/admin/blog_posts', {:sort => 'user', :sort_order => 'asc'},
727
- response.body
728
- )
729
- end
730
- end
731
-
732
- describe '#new' do
733
- before :each do
734
- @alfie = User.find_or_create_by_username 'alfie'
735
- @request.env["HTTP_REFERER"] = '/admin/blog_posts'
736
- get :new
737
- end
738
-
739
- it 'should show a form' do
740
- response.body.should match(
741
- %r|<form action="/admin/blog_posts/create".*input.*name="blog_post\[title\]"|m
742
- )
743
- end
744
-
745
- it 'should use a textarea for the body field' do
746
- response.body.should match(
747
- %r|<textarea.*name="blog_post\[body\]".*>.*</textarea>|
748
- )
749
- end
750
-
751
- it 'should show a link back to the index page' do
752
- response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
753
- end
754
-
755
- it 'should show pretty field names' do
756
- field_names = ['Title', 'Body']
757
- field_names.each do |field_name|
758
- response.should have_tag('label', field_name)
759
- end
760
- end
761
-
762
- it 'should set the for attribute of the labels' do
763
- field_names = ['Title', 'Body']
764
- field_names.each do |field_name|
765
- response.should have_tag("label[for=blog_post_#{field_name.downcase}]")
766
- end
767
- end
768
-
769
- it "should use a checkbox for the boolean field 'textile'" do
770
- response.body.should match(
771
- %r!
772
- <input[^>]*
773
- (name="blog_post\[textile\][^>]*type="checkbox"|
774
- type="checkbox"[^>]*name="blog_post\[textile\])
775
- !x
776
- )
777
- end
778
-
779
- it 'should use a drop-down for the user field' do
780
- response.should have_tag("select[name=?]", "blog_post[user_id]") do
781
- with_tag "option:nth-child(1)[value='']"
782
- with_tag "option:nth-child(2)[value=?]", @alfie.id, :text => 'alfie'
783
- with_tag "option:nth-child(3)[value=?]", @user.id, :text => 'soren'
784
- end
785
- end
786
-
787
- it 'should set the controller path as a CSS class' do
788
- response.should have_tag("div[class~=admin_blog_posts]")
789
- end
790
-
791
- it 'should use dropdowns with nil defaults for published_at' do
792
- nums_and_dt_fields = {
793
- 1 => :year, 2 => :month, 3 => :day, 4 => :hour, 5 => :min
794
- }
795
- nums_and_dt_fields.each do |num, dt_field|
796
- name = "blog_post[published_at(#{num}i)]"
797
- value_for_now_option = Time.now.send(dt_field).to_s
798
- if [:hour, :min].include?(dt_field) && value_for_now_option.size == 1
799
- value_for_now_option = "0#{value_for_now_option}"
800
- end
801
- response.should have_tag('select[name=?]', name) do
802
- with_tag "option[value='']"
803
- with_tag "option:not([selected])[value=?]", value_for_now_option
804
- end
805
- end
806
- end
807
-
808
- it 'should show a clear link for published_at' do
809
- response.body.should have_tag('a', :text => "Clear")
810
- end
811
- end
812
-
813
- describe '#new with a preset value in the GET arguments' do
814
- before :each do
815
- get :new, :blog_post => {:user_id => @user.id.to_s}
816
- end
817
-
818
- it 'should set that preselected value' do
819
- response.should have_tag("select[name=?]", "blog_post[user_id]") do
820
- with_tag "option[value=?][selected=selected]",
821
- @user.id, :text => 'soren'
822
- with_tag "option[value='']"
823
- end
824
- end
825
- end
826
-
827
- describe '#new when there are more than 15 users' do
828
- before :all do
829
- User.destroy_all
830
- 1.upto(16) do |i|
831
- User.create! :username => "--user #{i}--"
832
- end
833
- end
834
-
835
- before :each do
836
- get :new
837
- end
838
-
839
- it 'should use the restricted autocompleter instead of a drop-down' do
840
- response.should_not have_tag("select[name=?]", "blog_post[user_id]")
841
- response.should have_tag("input[id=user_autocomplete_input]")
842
- response.should have_tag(
843
- "input[type=hidden][name=?][id=blog_post_user_id]",
844
- "blog_post[user_id]"
845
- )
846
- response.should have_tag("div[id=user_autocomplete_palette]")
847
- response.should have_tag('div[id=clear_user_link]')
848
- response.body.should match(
849
- %r|
850
- new\s*AdminAssistant.RestrictedAutocompleter\(
851
- \s*"user",
852
- \s*"blog_post_user_id",
853
- \s*"/admin/blog_posts/autocomplete_user",
854
- [^)]*"includeBlank":\s*true
855
- |mx
856
- )
857
- end
858
- end
859
-
860
- describe '#show' do
861
- before :all do
862
- BlogPost.destroy_all
863
- @blog_post = BlogPost.create!(
864
- :title => "foo > bar & baz", :user => @user, :textile => false
865
- )
866
- end
867
-
868
- before :each do
869
- get :show, :id => @blog_post.id
870
- end
871
-
872
- it 'should show the HTML-escaped title' do
873
- response.body.should match(/foo &gt; bar &amp; baz/)
874
- end
875
-
876
- it 'should have a link to edit' do
877
- response.should have_tag(
878
- "a[href=/admin/blog_posts/edit/#{@blog_post.id}]", 'Edit'
879
- )
880
- end
881
-
882
- it 'should show soren' do
883
- response.body.should match(/soren/)
884
- end
885
- end
886
-
887
- describe '#update' do
888
- before :all do
889
- @blog_post = BlogPost.create! :title => random_word, :user => @user
890
- end
891
-
892
- describe 'when there are no validation errors' do
893
- before :each do
894
- title2 = random_word
895
- post(
896
- :update,
897
- :id => @blog_post.id,
898
- :blog_post => {
899
- :title => title2, 'published_at(1i)' => '2009',
900
- 'published_at(2i)' => '1', 'published_at(3i)' => '2',
901
- 'published_at(4i)' => '3', 'published_at(5i)' => '4'
902
- }
903
- )
904
- response.should redirect_to(:action => 'index')
905
- @blog_post_prime = BlogPost.find_by_title(title2)
906
- end
907
-
908
- it 'should update a pre-existing BlogPost' do
909
- @blog_post_prime.should_not be_nil
910
- end
911
-
912
- it 'should set published_at' do
913
- @blog_post_prime.published_at.should == Time.utc(2009, 1, 2, 3, 4)
914
- end
915
- end
916
-
917
- describe 'when there are validation errors' do
918
- before :each do
919
- post(
920
- :update,
921
- :id => @blog_post.id, :blog_post => {:title => ''},
922
- :origin => '/admin/blog_posts'
923
- )
924
- end
925
-
926
- it 'should not create a new BlogPost' do
927
- BlogPost.find_by_title('').should be_nil
928
- end
929
-
930
- it 'should print all the errors' do
931
- response.should be_success
932
- response.body.should match(/Title can't be blank/)
933
- end
934
-
935
- it 'should show a link back to the index page' do
936
- response.should have_tag("a[href=/admin/blog_posts]", 'Back to index')
937
- end
938
- end
939
-
940
- describe 'on handling the origin param' do
941
- it 'should redirect to the origin when there is a origin on the form submit' do
942
- origin = 'http://foo.com'
943
- post :update, :id => @blog_post.id, :blog_post => {:title => 'foo'}, :origin => origin
944
- response.should redirect_to(origin)
945
- end
946
- end
947
-
948
- end
949
-
950
- describe '#update as Ajax toggle' do
951
- before :all do
952
- @blog_post = BlogPost.create!(
953
- :title => random_word, :user => @user, :textile => false
954
- )
955
- end
956
-
957
- before :each do
958
- post(
959
- :update,
960
- :id => @blog_post.id, :from => "blog_post_#{@blog_post.id}_textile",
961
- :blog_post => {:textile => '1'}
962
- )
963
- end
964
-
965
- it 'should return success' do
966
- response.should be_success
967
- end
968
-
969
- it 'should update the textile field' do
970
- @blog_post.reload.textile.should be_true
971
- end
972
-
973
- it 'should only render a small snippet of HTML with Ajax in it' do
974
- toggle_div_id = "blog_post_#{@blog_post.id}_textile"
975
- post_url =
976
- "/admin/blog_posts/update/#{@blog_post.id}?" +
977
- CGI.escape('blog_post[textile]') + "=0&amp;from=#{toggle_div_id}"
978
- response.should_not have_tag('div[id=?]', toggle_div_id)
979
- ajax_substr = "new Ajax.Updater('#{toggle_div_id}', '#{post_url}'"
980
- response.should have_tag(
981
- "a[href=#][onclick*=?]", ajax_substr, :text => 'true'
982
- )
983
- response.should_not have_tag('title', :text => 'Admin')
984
- end
985
- end
986
-
987
- end