hydra-head 3.0.0pre1

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 (366) hide show
  1. data/.gitignore +71 -0
  2. data/.gitmodules +6 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +257 -0
  5. data/README.textile +150 -0
  6. data/README_RAILS3_CHANGES.textile +42 -0
  7. data/Rakefile +5 -0
  8. data/TESTING.textile +85 -0
  9. data/app/controllers/assets_controller.rb +117 -0
  10. data/app/controllers/contributors_controller.rb +54 -0
  11. data/app/controllers/file_assets_controller.rb +152 -0
  12. data/app/controllers/permissions_controller.rb +137 -0
  13. data/app/controllers/user_sessions_controller.rb +14 -0
  14. data/app/helpers/article_metadata_helper.rb +80 -0
  15. data/app/helpers/blacklight_helper.rb +192 -0
  16. data/app/helpers/downloads_helper.rb +19 -0
  17. data/app/helpers/generic_content_objects_helper.rb +16 -0
  18. data/app/helpers/hydra_assets_helper.rb +75 -0
  19. data/app/helpers/hydra_djatoka_helper.rb +23 -0
  20. data/app/helpers/hydra_fedora_metadata_helper.rb +365 -0
  21. data/app/helpers/hydra_helper.rb +155 -0
  22. data/app/helpers/hydra_uploader_helper.rb +18 -0
  23. data/app/helpers/inline_editable_metadata_helper.rb +15 -0
  24. data/app/helpers/javascript_includes_helper.rb +93 -0
  25. data/app/helpers/release_process_helper.rb +32 -0
  26. data/app/models/audio_asset.rb +8 -0
  27. data/app/models/file_asset.rb +111 -0
  28. data/app/models/generic_content.rb +21 -0
  29. data/app/models/generic_image.rb +62 -0
  30. data/app/models/image_asset.rb +8 -0
  31. data/app/models/mods_asset.rb +6 -0
  32. data/app/models/role_mapper.rb +22 -0
  33. data/app/models/superuser.rb +6 -0
  34. data/app/models/video_asset.rb +8 -0
  35. data/app/views/_add_assets_links.html.erb +13 -0
  36. data/app/views/_brown_sidebar.html +15 -0
  37. data/app/views/_user_util_links.html.erb +31 -0
  38. data/app/views/catalog/_citation.html.erb +11 -0
  39. data/app/views/catalog/_constraints_element.html.erb +34 -0
  40. data/app/views/catalog/_delete_partials/_default.html.erb +29 -0
  41. data/app/views/catalog/_document_list.html.erb +11 -0
  42. data/app/views/catalog/_edit_partials/_default.html.erb +64 -0
  43. data/app/views/catalog/_edit_partials/_default_details.html.erb +15 -0
  44. data/app/views/catalog/_email_form.html.erb +9 -0
  45. data/app/views/catalog/_facets.html.erb +37 -0
  46. data/app/views/catalog/_flash_msg.html.erb +17 -0
  47. data/app/views/catalog/_home.html.erb +6 -0
  48. data/app/views/catalog/_home_text.html.erb +10 -0
  49. data/app/views/catalog/_index_partials/_default.html.erb +20 -0
  50. data/app/views/catalog/_index_partials/_default_details.html.erb +11 -0
  51. data/app/views/catalog/_index_partials/_default_group.html.erb +15 -0
  52. data/app/views/catalog/_search_form.html.erb +12 -0
  53. data/app/views/catalog/_show_partials/_default.html.erb +23 -0
  54. data/app/views/catalog/_show_partials/_default_details.html.erb +12 -0
  55. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  56. data/app/views/catalog/_sms_form.html.erb +21 -0
  57. data/app/views/catalog/_sort_and_per_page.html.erb +22 -0
  58. data/app/views/catalog/_uva_tabs.html.erb +10 -0
  59. data/app/views/catalog/about.html.erb +0 -0
  60. data/app/views/catalog/show.html.erb +48 -0
  61. data/app/views/contributors/_add_contributor_split_button.html.erb +10 -0
  62. data/app/views/contributors/_edit_conference.html.erb +29 -0
  63. data/app/views/contributors/_edit_organization.html.erb +29 -0
  64. data/app/views/contributors/_edit_person.html.erb +42 -0
  65. data/app/views/contributors/_index.html.erb +12 -0
  66. data/app/views/contributors/_new.html.erb +10 -0
  67. data/app/views/contributors/_show_conference.html.erb +22 -0
  68. data/app/views/contributors/_show_organization.html.erb +29 -0
  69. data/app/views/contributors/_show_person.html.erb +17 -0
  70. data/app/views/contributors/new.html.erb +13 -0
  71. data/app/views/downloads/index.html.erb +1 -0
  72. data/app/views/file_assets/_deletable_result.html.erb +5 -0
  73. data/app/views/file_assets/_index.html.erb +15 -0
  74. data/app/views/file_assets/_new.html.erb +2 -0
  75. data/app/views/file_assets/_result.html.erb +16 -0
  76. data/app/views/file_assets/index.html.erb +5 -0
  77. data/app/views/fluid_infusion/_uploader.html.erb +81 -0
  78. data/app/views/fluid_infusion/_uploader_generic_content_objects.js.erb +38 -0
  79. data/app/views/fluid_infusion/_uploader_js.erb +45 -0
  80. data/app/views/generic_content_objects/_edit_description.html.erb +50 -0
  81. data/app/views/generic_content_objects/_new.html.erb +0 -0
  82. data/app/views/generic_content_objects/_show_description.html.erb +68 -0
  83. data/app/views/generic_content_objects/contributors/_edit_conference.html.erb +29 -0
  84. data/app/views/generic_content_objects/contributors/_edit_organization.html.erb +29 -0
  85. data/app/views/generic_content_objects/contributors/_edit_person.html.erb +37 -0
  86. data/app/views/generic_content_objects/contributors/_new.html.erb +10 -0
  87. data/app/views/generic_content_objects/contributors/_show_conference.html.erb +22 -0
  88. data/app/views/generic_content_objects/contributors/_show_organization.html.erb +22 -0
  89. data/app/views/generic_content_objects/contributors/_show_person.html.erb +38 -0
  90. data/app/views/generic_contents/_edit.html.erb +59 -0
  91. data/app/views/generic_contents/_index.html.erb +23 -0
  92. data/app/views/generic_contents/_show.html.erb +18 -0
  93. data/app/views/generic_contents/_show_content.html.erb +4 -0
  94. data/app/views/generic_images/_edit.html.erb +59 -0
  95. data/app/views/generic_images/_index.html.erb +24 -0
  96. data/app/views/generic_images/_show.html.erb +18 -0
  97. data/app/views/generic_images/_show_all.html.erb +14 -0
  98. data/app/views/generic_images/_show_content.html.erb +7 -0
  99. data/app/views/layouts/application.html.erb +57 -0
  100. data/app/views/layouts/hydra-head.html.erb +12 -0
  101. data/app/views/mods_assets/_edit.html.erb +49 -0
  102. data/app/views/mods_assets/_edit_description.html.erb +82 -0
  103. data/app/views/mods_assets/_edit_journal.html.erb +72 -0
  104. data/app/views/mods_assets/_index.html.erb +1 -0
  105. data/app/views/mods_assets/_index_list.html.erb +37 -0
  106. data/app/views/mods_assets/_index_table.html.erb +7 -0
  107. data/app/views/mods_assets/_progress_box.html.erb +82 -0
  108. data/app/views/mods_assets/_show.html.erb +44 -0
  109. data/app/views/mods_assets/_show_description.html.erb +44 -0
  110. data/app/views/mods_assets/_show_journal.html.erb +42 -0
  111. data/app/views/mods_assets/_show_permissions.html.erb +14 -0
  112. data/app/views/permissions/_edit_person_permissions.html.erb +35 -0
  113. data/app/views/permissions/_index.html.erb +55 -0
  114. data/app/views/permissions/_new.html.erb +18 -0
  115. data/app/views/permissions/index.html.erb +1 -0
  116. data/app/views/permissions/new.html.erb +1 -0
  117. data/app/views/shared/_delete_asset_confirmation.html.erb +17 -0
  118. data/app/views/user_sessions/_login_form.html.erb +10 -0
  119. data/app/views/user_sessions/logged_out.html.erb +1 -0
  120. data/config/routes.rb +12 -0
  121. data/fedora_conf/conf/fedora.fcfg +1021 -0
  122. data/hydra-head.gemspec +70 -0
  123. data/lib/application_controller.rb +25 -0
  124. data/lib/application_helper.rb +2 -0
  125. data/lib/engine.rb +30 -0
  126. data/lib/generators/hydra/head_generator.rb +152 -0
  127. data/lib/generators/hydra/templates/config/fedora.yml +17 -0
  128. data/lib/generators/hydra/templates/config/initializers/blacklight_config.rb +246 -0
  129. data/lib/generators/hydra/templates/config/initializers/fedora_config.rb +23 -0
  130. data/lib/generators/hydra/templates/config/initializers/hydra_config.rb +29 -0
  131. data/lib/generators/hydra/templates/config/role_map_cucumber.yml +10 -0
  132. data/lib/generators/hydra/templates/config/role_map_development.yml +12 -0
  133. data/lib/generators/hydra/templates/config/role_map_production.yml +2 -0
  134. data/lib/generators/hydra/templates/config/role_map_test.yml +15 -0
  135. data/lib/generators/hydra/templates/config/solr.yml +10 -0
  136. data/lib/generators/hydra/templates/config/solr_mappings.yml +22 -0
  137. data/lib/generators/hydra/templates/fedora_conf/conf/fedora.fcfg +1021 -0
  138. data/lib/generators/hydra/templates/migrations/add_user_attributes_table.rb +15 -0
  139. data/lib/generators/hydra/templates/migrations/create_superusers.rb +12 -0
  140. data/lib/generators/hydra/templates/solr_conf/conf/schema.xml +118 -0
  141. data/lib/generators/hydra/templates/solr_conf/conf/solrconfig.xml +332 -0
  142. data/lib/generators/hydra/templates/solr_conf/solr.xml +35 -0
  143. data/lib/hydra-head.rb +29 -0
  144. data/lib/hydra-head/engine.rb +9 -0
  145. data/lib/hydra-head/routes.rb +87 -0
  146. data/lib/hydra-head/version.rb +4 -0
  147. data/lib/hydra.rb +22 -0
  148. data/lib/hydra/access_controls_enforcement.rb +236 -0
  149. data/lib/hydra/access_controls_evaluation.rb +97 -0
  150. data/lib/hydra/assets_controller_helper.rb +144 -0
  151. data/lib/hydra/catalog.rb +64 -0
  152. data/lib/hydra/common_mods_index_methods.rb +42 -0
  153. data/lib/hydra/controller.rb +7 -0
  154. data/lib/hydra/file_assets_helper.rb +144 -0
  155. data/lib/hydra/fixtures.rb +43 -0
  156. data/lib/hydra/generic_content.rb +113 -0
  157. data/lib/hydra/generic_image.rb +100 -0
  158. data/lib/hydra/image.rb +177 -0
  159. data/lib/hydra/model_methods.rb +95 -0
  160. data/lib/hydra/model_mixins.rb +2 -0
  161. data/lib/hydra/model_mixins/common_metadata.rb +24 -0
  162. data/lib/hydra/model_mixins/mods_object.rb +16 -0
  163. data/lib/hydra/mods_article.rb +505 -0
  164. data/lib/hydra/mods_dataset.rb +165 -0
  165. data/lib/hydra/mods_generic_content.rb +494 -0
  166. data/lib/hydra/mods_image.rb +494 -0
  167. data/lib/hydra/repository_controller.rb +102 -0
  168. data/lib/hydra/rights_metadata.rb +189 -0
  169. data/lib/hydra/superuser_attributes.rb +12 -0
  170. data/lib/hydra/testing_server.rb +183 -0
  171. data/lib/hydra/user.rb +22 -0
  172. data/lib/mediashelf/active_fedora_helper.rb +72 -0
  173. data/lib/railties/all_tests.rake +23 -0
  174. data/lib/railties/hydra-fixtures.rake +184 -0
  175. data/lib/railties/hydra_jetty.rake +79 -0
  176. data/lib/railties/hyhead_cucumber.rake +127 -0
  177. data/lib/railties/hyhead_rspec.rake +137 -0
  178. data/lib/stanford/searchworks_helper.rb +1338 -0
  179. data/lib/stanford/solr_helper.rb +108 -0
  180. data/lib/uva/mods_index_methods.rb +24 -0
  181. data/solr_conf/conf/schema.xml +122 -0
  182. data/solr_conf/conf/solrconfig.xml +332 -0
  183. data/solr_conf/solr.xml +35 -0
  184. data/tasks/hydra-head-fixtures.rake +54 -0
  185. data/tasks/hydra-head.rake +247 -0
  186. data/tasks/hydra_jetty.rake +79 -0
  187. data/tasks/replicator.rake +27 -0
  188. data/tasks/solrizer-fedora.rake +53 -0
  189. data/tasks/solrizer.rake +13 -0
  190. data/test_support/etc/Gemfile +29 -0
  191. data/test_support/etc/rvmrc +32 -0
  192. data/test_support/features/button_add_assets.feature +22 -0
  193. data/test_support/features/button_add_generic_content.feature +11 -0
  194. data/test_support/features/button_add_image.feature +11 -0
  195. data/test_support/features/button_add_mods_asset.feature +11 -0
  196. data/test_support/features/contributor_add.feature +39 -0
  197. data/test_support/features/file_assets_list.feature +32 -0
  198. data/test_support/features/file_upload.feature +40 -0
  199. data/test_support/features/home_page.feature +9 -0
  200. data/test_support/features/html_validity.feature +47 -0
  201. data/test_support/features/mods_asset_contributors_edit.feature +80 -0
  202. data/test_support/features/mods_asset_create.feature +12 -0
  203. data/test_support/features/mods_asset_edit.feature +33 -0
  204. data/test_support/features/mods_asset_edit_without_permission.feature +10 -0
  205. data/test_support/features/mods_asset_search_result.feature +13 -0
  206. data/test_support/features/mods_asset_show.feature +39 -0
  207. data/test_support/features/permissions_add.feature +15 -0
  208. data/test_support/features/permissions_edit.feature +63 -0
  209. data/test_support/features/step_definitions/catalog_index_steps.rb +14 -0
  210. data/test_support/features/step_definitions/create_asset_steps.rb +7 -0
  211. data/test_support/features/step_definitions/edit_metadata_steps.rb +73 -0
  212. data/test_support/features/step_definitions/file_list_steps.rb +28 -0
  213. data/test_support/features/step_definitions/hydra_metadata_steps.rb +3 -0
  214. data/test_support/features/step_definitions/hydra_steps.rb +8 -0
  215. data/test_support/features/step_definitions/inline_editable_edit_steps.rb +77 -0
  216. data/test_support/features/step_definitions/search_steps.rb +88 -0
  217. data/test_support/features/step_definitions/searching_steps.rb +22 -0
  218. data/test_support/features/step_definitions/show_document_steps.rb +85 -0
  219. data/test_support/features/step_definitions/user_steps.rb +36 -0
  220. data/test_support/features/step_definitions/web_steps.rb +219 -0
  221. data/test_support/features/support/env.rb +55 -0
  222. data/test_support/features/support/paths.rb +80 -0
  223. data/test_support/features/switch_users.feature +14 -0
  224. data/test_support/features/view_catalog_index.feature +18 -0
  225. data/test_support/fixtures/empty_file.txt +0 -0
  226. data/test_support/fixtures/hydrangea_fixture_archivist_only_mods_article.foxml.xml +1212 -0
  227. data/test_support/fixtures/hydrangea_fixture_file_asset1.foxml.xml +4946 -0
  228. data/test_support/fixtures/hydrangea_fixture_mods_article1.foxml.xml +234 -0
  229. data/test_support/fixtures/hydrangea_fixture_mods_article2.foxml.xml +177 -0
  230. data/test_support/fixtures/hydrangea_fixture_mods_article3.foxml.xml +170 -0
  231. data/test_support/fixtures/hydrangea_fixture_mods_dataset1.foxml.xml +187 -0
  232. data/test_support/fixtures/hydrangea_fixture_uploaded_svg1.foxml.xml +676 -0
  233. data/test_support/fixtures/image.jp2 +0 -0
  234. data/test_support/fixtures/libra-oa_1.foxml.xml +2324 -0
  235. data/test_support/fixtures/libra-oa_2.foxml.xml +2422 -0
  236. data/test_support/spec/controllers/assets_controller_spec.rb +113 -0
  237. data/test_support/spec/controllers/catalog_controller_spec.rb +148 -0
  238. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +62 -0
  239. data/test_support/spec/controllers/contributors_controller_spec.rb +47 -0
  240. data/test_support/spec/controllers/file_assets_controller_spec.rb +189 -0
  241. data/test_support/spec/controllers/hydra_controller_spec.rb +15 -0
  242. data/test_support/spec/controllers/permissions_controller_spec.rb +80 -0
  243. data/test_support/spec/controllers/user_sessions_controller_spec.rb +35 -0
  244. data/test_support/spec/generators/hydra-head_generator_spec.rb +14 -0
  245. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +212 -0
  246. data/test_support/spec/helpers/access_controls_evaluation_spec.rb +35 -0
  247. data/test_support/spec/helpers/assets_controller_helper_spec.rb +71 -0
  248. data/test_support/spec/helpers/blacklight_helper_spec.rb +64 -0
  249. data/test_support/spec/helpers/file_assets_helper_spec.rb +107 -0
  250. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +32 -0
  251. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +195 -0
  252. data/test_support/spec/helpers/hydra_djatoka_helper_spec.rb +32 -0
  253. data/test_support/spec/helpers/hydra_fedora_metadata_helper_spec.rb +215 -0
  254. data/test_support/spec/helpers/hydra_helper_spec.rb +73 -0
  255. data/test_support/spec/helpers/hydra_model_methods_spec.rb +95 -0
  256. data/test_support/spec/helpers/hydra_uploader_helper_spec.rb +18 -0
  257. data/test_support/spec/helpers/javascript_includes_helper_spec.rb +43 -0
  258. data/test_support/spec/integration/file_asset_spec.rb +150 -0
  259. data/test_support/spec/lib/active_fedora_helper_spec.rb +56 -0
  260. data/test_support/spec/lib/catalog_spec.rb +16 -0
  261. data/test_support/spec/lib/common_mods_index_methods_spec.rb +28 -0
  262. data/test_support/spec/models/audio_asset_spec.rb +23 -0
  263. data/test_support/spec/models/file_asset_spec.rb +42 -0
  264. data/test_support/spec/models/generic_content_spec.rb +29 -0
  265. data/test_support/spec/models/generic_image_spec.rb +58 -0
  266. data/test_support/spec/models/hydra_rights_metadata_spec.rb +162 -0
  267. data/test_support/spec/models/image_asset_spec.rb +23 -0
  268. data/test_support/spec/models/mods_asset_spec.rb +29 -0
  269. data/test_support/spec/models/role_mapper_spec.rb +22 -0
  270. data/test_support/spec/models/user_spec.rb +52 -0
  271. data/test_support/spec/models/video_asset_spec.rb +23 -0
  272. data/test_support/spec/rcov.opts +3 -0
  273. data/test_support/spec/spec.opts +4 -0
  274. data/test_support/spec/spec_helper.rb +44 -0
  275. data/test_support/spec/support/matchers/helper_matcher.rb +14 -0
  276. data/test_support/spec/support/matchers/solr_matchers.rb +60 -0
  277. data/test_support/spec/unit/hydra-head-engine_spec.rb +8 -0
  278. data/test_support/spec/unit/hydra-head_spec.rb +8 -0
  279. data/test_support/spec/utilities/hydra_testing_server_spec.rb +49 -0
  280. data/test_support/spec/views/uploader.html.erb_spec.rb +30 -0
  281. data/vendor/cache/RedCloth-4.2.3.gem +0 -0
  282. data/vendor/cache/abstract-1.0.0.gem +0 -0
  283. data/vendor/cache/actionmailer-3.0.9.gem +0 -0
  284. data/vendor/cache/actionpack-3.0.9.gem +0 -0
  285. data/vendor/cache/active-fedora-2.3.3.gem +0 -0
  286. data/vendor/cache/activemodel-3.0.9.gem +0 -0
  287. data/vendor/cache/activerecord-3.0.9.gem +0 -0
  288. data/vendor/cache/activeresource-3.0.9.gem +0 -0
  289. data/vendor/cache/activesupport-3.0.9.gem +0 -0
  290. data/vendor/cache/arel-2.0.10.gem +0 -0
  291. data/vendor/cache/blacklight-3.0.0.gem +0 -0
  292. data/vendor/cache/block_helpers-0.3.3.gem +0 -0
  293. data/vendor/cache/builder-2.1.2.gem +0 -0
  294. data/vendor/cache/capybara-1.0.0.gem +0 -0
  295. data/vendor/cache/childprocess-0.2.0.gem +0 -0
  296. data/vendor/cache/columnize-0.3.4.gem +0 -0
  297. data/vendor/cache/crack-0.1.8.gem +0 -0
  298. data/vendor/cache/cucumber-1.0.2.gem +0 -0
  299. data/vendor/cache/cucumber-rails-1.0.2.gem +0 -0
  300. data/vendor/cache/curb-0.7.15.gem +0 -0
  301. data/vendor/cache/daemons-1.1.4.gem +0 -0
  302. data/vendor/cache/database_cleaner-0.6.7.gem +0 -0
  303. data/vendor/cache/diff-lcs-1.1.2.gem +0 -0
  304. data/vendor/cache/equivalent-xml-0.2.7.gem +0 -0
  305. data/vendor/cache/erubis-2.6.6.gem +0 -0
  306. data/vendor/cache/facets-2.8.4.gem +0 -0
  307. data/vendor/cache/factory_girl-1.3.3.gem +0 -0
  308. data/vendor/cache/fastercsv-1.5.4.gem +0 -0
  309. data/vendor/cache/ffi-1.0.9.gem +0 -0
  310. data/vendor/cache/gherkin-2.4.5.gem +0 -0
  311. data/vendor/cache/haml-3.1.2.gem +0 -0
  312. data/vendor/cache/httparty-0.7.8.gem +0 -0
  313. data/vendor/cache/i18n-0.5.0.gem +0 -0
  314. data/vendor/cache/jettywrapper-0.0.10.gem +0 -0
  315. data/vendor/cache/json-1.5.3.gem +0 -0
  316. data/vendor/cache/json_pure-1.5.3.gem +0 -0
  317. data/vendor/cache/kaminari-0.12.4.gem +0 -0
  318. data/vendor/cache/launchy-2.0.3.gem +0 -0
  319. data/vendor/cache/linecache-0.46.gem +0 -0
  320. data/vendor/cache/logger-1.2.8.gem +0 -0
  321. data/vendor/cache/mail-2.2.19.gem +0 -0
  322. data/vendor/cache/marc-0.4.3.gem +0 -0
  323. data/vendor/cache/mediashelf-loggable-0.4.2.gem +0 -0
  324. data/vendor/cache/mime-types-1.16.gem +0 -0
  325. data/vendor/cache/mocha-0.9.12.gem +0 -0
  326. data/vendor/cache/multipart-post-1.1.2.gem +0 -0
  327. data/vendor/cache/nokogiri-1.5.0.gem +0 -0
  328. data/vendor/cache/om-1.2.5.gem +0 -0
  329. data/vendor/cache/polyglot-0.3.1.gem +0 -0
  330. data/vendor/cache/rack-1.2.3.gem +0 -0
  331. data/vendor/cache/rack-mount-0.6.14.gem +0 -0
  332. data/vendor/cache/rack-test-0.5.7.gem +0 -0
  333. data/vendor/cache/rails-3.0.9.gem +0 -0
  334. data/vendor/cache/railties-3.0.9.gem +0 -0
  335. data/vendor/cache/rake-0.9.2.gem +0 -0
  336. data/vendor/cache/rbx-require-relative-0.0.5.gem +0 -0
  337. data/vendor/cache/rcov-0.9.9.gem +0 -0
  338. data/vendor/cache/rdoc-3.8.gem +0 -0
  339. data/vendor/cache/rsolr-1.0.2.gem +0 -0
  340. data/vendor/cache/rsolr-ext-1.0.3.gem +0 -0
  341. data/vendor/cache/rspec-2.6.0.gem +0 -0
  342. data/vendor/cache/rspec-core-2.6.4.gem +0 -0
  343. data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
  344. data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
  345. data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
  346. data/vendor/cache/ruby-debug-0.10.4.gem +0 -0
  347. data/vendor/cache/ruby-debug-base-0.10.4.gem +0 -0
  348. data/vendor/cache/rubyzip-0.9.4.gem +0 -0
  349. data/vendor/cache/sanitize-2.0.3.gem +0 -0
  350. data/vendor/cache/selenium-webdriver-0.2.2.gem +0 -0
  351. data/vendor/cache/solr-ruby-0.0.8.gem +0 -0
  352. data/vendor/cache/solrizer-1.1.0.gem +0 -0
  353. data/vendor/cache/solrizer-fedora-1.1.0.gem +0 -0
  354. data/vendor/cache/sqlite3-ruby-1.2.5.gem +0 -0
  355. data/vendor/cache/stomp-1.1.9.gem +0 -0
  356. data/vendor/cache/term-ansicolor-1.0.5.gem +0 -0
  357. data/vendor/cache/thor-0.14.6.gem +0 -0
  358. data/vendor/cache/treetop-1.4.9.gem +0 -0
  359. data/vendor/cache/trollop-1.16.2.gem +0 -0
  360. data/vendor/cache/tzinfo-0.3.29.gem +0 -0
  361. data/vendor/cache/unicode-0.4.0.gem +0 -0
  362. data/vendor/cache/will_paginate-2.3.15.gem +0 -0
  363. data/vendor/cache/xml-simple-1.1.0.gem +0 -0
  364. data/vendor/cache/xpath-0.1.4.gem +0 -0
  365. data/vendor/cache/yard-0.7.2.gem +0 -0
  366. metadata +1110 -0
@@ -0,0 +1,113 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+
4
+ # See cucumber tests (ie. /features/edit_document.feature) for more tests, including ones that test the edit method & view
5
+ # You can run the cucumber tests with
6
+ #
7
+ # cucumber --tags @edit
8
+ # or
9
+ # rake cucumber
10
+
11
+ describe AssetsController do
12
+
13
+ before do
14
+ request.env['WEBAUTH_USER']='bob'
15
+ end
16
+
17
+ it "should use DocumentController" do
18
+ controller.should be_an_instance_of(AssetsController)
19
+ end
20
+
21
+ describe "update" do
22
+ it "should update the object with the attributes provided" do
23
+ mock_document = mock("document")
24
+ mock_document.stubs(:update_from_computing_id).returns(nil)
25
+ controller.expects(:check_embargo_date_format).returns(nil)
26
+
27
+ ModsAsset.expects(:find).with("_PID_").returns(mock_document)
28
+
29
+ simple_request_params = {"asset"=>{
30
+ "descMetadata"=>{
31
+ "subject"=>{"0"=>"subject1", "1"=>"subject2", "2"=>"subject3"}
32
+ }
33
+ }
34
+ }
35
+
36
+ mock_document.expects(:update_datastream_attributes).with("descMetadata"=>{"subject"=>{"0"=>"subject1", "1"=>"subject2", "2"=>"subject3"}}).returns({"subject"=>{"2"=>"My Topic"}})
37
+ mock_document.expects(:save)
38
+ controller.stubs(:display_release_status_notice)
39
+ put :update, {:id=>"_PID_"}.merge(simple_request_params)
40
+ end
41
+
42
+ it "should support updating OM::XML datastreams" do
43
+ mock_document = mock("document")
44
+ mock_document.stubs(:update_from_computing_id).returns(nil)
45
+ ModsAsset.expects(:find).with("_PID_").returns(mock_document)
46
+
47
+ update_method_args = [ "descMetadata" => { [{:person=>0}, :role] => {"0"=>"role1","1"=>"role2","2"=>"role3"} } ]
48
+ mock_document.expects(:update_datastream_attributes).with( *update_method_args ).returns({"person_0_role"=>{"0"=>"role1","1"=>"role2","2"=>"role3"}})
49
+ mock_document.expects(:save)
50
+
51
+
52
+ nokogiri_request_params = {
53
+ "id"=>"_PID_",
54
+ "content_type"=>"mods_asset",
55
+ "field_selectors"=>{
56
+ "descMetadata"=>{
57
+ "person_0_role"=>[{":person"=>"0"}, "role"]
58
+ }
59
+ },
60
+ "asset"=>{
61
+ "descMetadata"=>{
62
+ "person_0_role"=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"}
63
+ }
64
+ }
65
+ }
66
+ controller.stubs(:display_release_status_notice)
67
+ put :update, nokogiri_request_params
68
+ # put :update, :id=>"_PID_", "content_type"=>"mods_asset", "datastream"=>"descMetadata", "field_name"=>"person_0_last_name","parent_select"=>[{":person"=>"0"}, ":last_name"], "child_index"=>"0", "value"=>"Sample New Value"
69
+ end
70
+
71
+ it "should handle complete updates of many fields in many datastreams" do
72
+ pending("This is failing intermittently. See https://jira.duraspace.org/browse/HYDRUS-166 for more info")
73
+ request_params = {"id"=>"hydrangea:fixture_mods_article3", "content_type"=>"mods_asset", "action"=>"update", "_method"=>"put"}
74
+ request_params["field_selectors"] = {"descMetadata"=>{"person_0_computing_id"=>[{"person"=>"0"}, "computing_id"], "journal_0_issue_start_page"=>[{"journal"=>"0"}, "issue", "start_page"], "person_1_description"=>[{"person"=>"1"}, "description"], "person_1_institution"=>[{"person"=>"1"}, "institution"], "journal_0_origin_info_publisher"=>[{"journal"=>"0"}, "origin_info", "publisher"], "abstract"=>["abstract"], "person_0_last_name"=>[{"person"=>"0"}, "last_name"], "person_0_description"=>[{"person"=>"0"}, "description"], "journal_0_issue_volume"=>[{"journal"=>"0"}, "issue", "volume"], "title_info_main_title"=>["title_info", "main_title"], "location_url"=>["location", "url"], "note"=>["note"], "person_1_last_name"=>[{"person"=>"1"}, "last_name"], "subject_topic"=>["subject", "topic"], "person_0_institution"=>[{"person"=>"0"}, "institution"], "person_1_first_name"=>[{"person"=>"1"}, "first_name"], "person_1"=>[{"person"=>"1"}], "journal_0_title_info_main_title"=>[{"journal"=>"0"}, "title_info", "main_title"], "journal_0_issue_level"=>[{"journal"=>"0"}, "issue", "level"], "journal_0_issue_end_page"=>[{"journal"=>"0"}, "issue", "end_page"], "peer_reviewed"=>["peer_reviewed"], "person_0_first_name"=>[{"person"=>"0"}, "first_name"], "person_1_computing_id"=>[{"person"=>"1"}, "computing_id"], "journal_0_issn"=>[{"journal"=>"0"}, "issn"], "journal_0_issue_publication_date"=>[{"journal"=>"0"}, "issue", "publication_date"]}, "rightsMetadata"=>{"embargo_embargo_release_date"=>["embargo", "embargo_release_date"]}, "properties"=>{"release_to"=>["release_to"]}}
75
+ request_params["asset"] = {"descMetadata"=>{"person_0_computing_id"=>{"0"=>""}, "journal_0_issue_start_page"=>{"0"=>"195"}, "person_1_description"=>{"0"=>""}, "person_1_institution"=>{"0"=>"Baltimore"}, "journal_0_origin_info_publisher"=>{"0"=>"PUBLISHER"}, "abstract"=>{"0"=>"ABSTRACT"}, "person_0_last_name"=>{"0"=>"Smith"}, "person_0_description"=>{"0"=>""}, "journal_0_issue_volume"=>{"0"=>"2 "}, "title_info_main_title"=>{"0"=>"Test Article"}, "location_url"=>{"0"=>"http://example.com/foo"}, "note"=>{"0"=>""}, "person_1_last_name"=>{"0"=>"Lacks"}, "subject_topic"=>{"0"=>"TOPIC 1", "1"=>"TOPIC 2", "2"=>"CONTROLLED TERM"}, "person_0_institution"=>{"0"=>"FACULTY, UNIVERSITY"}, "person_1_first_name"=>{"0"=>"Henrietta"}, "journal_0_title_info_main_title"=>{"0"=>"The Journal of Mock Object"}, "journal_0_issue_level"=>{"0"=>""}, "journal_0_issue_end_page"=>{"0"=>"230"}, "person_0_first_name"=>{"0"=>"John"}, "person_1_computing_id"=>{"0"=>""}, "journal_0_issn"=>{"0"=>"1234-5678"}, "journal_0_issue_publication_date"=>{"0"=>"FEB. 2007"}}, "rightsMetadata"=>{"embargo_embargo_release_date"=>{"0"=>""}}, "properties"=>{"released"=>{"0"=>"true"}, "release_to"=>{"0"=>"public"}}}
76
+ expected_response = {"descMetadata"=>{"journal_0_issue_start_page"=>{"0"=>"195"}, "person_0_computing_id"=>{"-1"=>""}, "abstract"=>{"0"=>"ABSTRACT"}, "journal_0_origin_info_publisher"=>{"0"=>"PUBLISHER"}, "person_1_description"=>{"-1"=>""}, "person_1_institution"=>{"0"=>"Baltimore"}, "journal_0_issue_volume"=>{"0"=>"2 "}, "person_0_description"=>{"-1"=>""}, "person_0_last_name"=>{"0"=>"Smith"}, "title_info_main_title"=>{"0"=>"Test Article"}, "note"=>{"-1"=>""}, "location_url"=>{"0"=>"http://example.com/foo"}, "person_1_last_name"=>{"0"=>"Lacks"}, "subject_topic"=>{"0"=>"TOPIC 1", "1"=>"TOPIC 2", "2"=>"CONTROLLED TERM"}, "journal_0_issue_end_page"=>{"0"=>"230"}, "journal_0_title_info_main_title"=>{"0"=>"The Journal of Mock Object"}, "journal_0_issue_level"=>{"-1"=>""}, "person_1_first_name"=>{"0"=>"Henrietta"}, "person_0_institution"=>{"0"=>"FACULTY, UNIVERSITY"}, "journal_0_issn"=>{"0"=>"1234-5678"}, "person_0_first_name"=>{"0"=>"John"}, "person_1_computing_id"=>{"-1"=>""}, "journal_0_issue_publication_date"=>{"0"=>"FEB. 2007"}}, "rightsMetadata"=>{"embargo_embargo_release_date"=>{"-1"=>""}}, "properties"=>{:released=>{"0"=>"true"}, [:release_to]=>{}, :release_to=>{"0"=>"public"}}}
77
+
78
+ post :update, request_params
79
+ expected_response.each_pair do |datastream_name, fields|
80
+ fields.each_pair do |field_pointer, value|
81
+ assigns[:response][datastream_name][field_pointer].should == value
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ describe "destroy" do
88
+ it "should delete the asset identified by pid" do
89
+ mock_obj = mock("asset", :delete)
90
+ mock_obj.expects(:destroy_child_assets).returns([])
91
+ ActiveFedora::Base.expects(:load_instance_from_solr).with("__PID__").returns(mock_obj)
92
+ ActiveFedora::ContentModel.expects(:known_models_for).with(mock_obj).returns([ModsAsset])
93
+ ModsAsset.expects(:load_instance_from_solr).with("__PID__").returns(mock_obj)
94
+ delete(:destroy, :id => "__PID__")
95
+ end
96
+ end
97
+
98
+ # withdraw is a conditional destroy, with the conditions dependant on the project requirements.
99
+ # Currently, the widthdraw method is an alias for destroy, should behave as such
100
+ describe "withdraw" do
101
+ it "should withdraw the asset identified by pid" do
102
+ mock_obj = mock("asset", :delete)
103
+ mock_obj.expects(:destroy_child_assets).returns([])
104
+ ActiveFedora::Base.expects(:load_instance_from_solr).with("__PID__").returns(mock_obj)
105
+ ActiveFedora::ContentModel.expects(:known_models_for).with(mock_obj).returns([ModsAsset])
106
+ ModsAsset.expects(:load_instance_from_solr).with("__PID__").returns(mock_obj)
107
+ delete(:withdraw, :id => "__PID__")
108
+ end
109
+ end
110
+
111
+
112
+
113
+ end
@@ -0,0 +1,148 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'mocha'
3
+
4
+
5
+ # See cucumber tests (ie. /features/edit_document.feature) for more tests, including ones that test the edit method & view
6
+ # You can run the cucumber tests with
7
+ #
8
+ # cucumber --tags @edit
9
+ # or
10
+ # rake cucumber
11
+
12
+ describe CatalogController do
13
+
14
+ before do
15
+ #controller.stubs(:protect_from_forgery).returns("meh")
16
+ session[:user]='bob'
17
+ end
18
+
19
+ it "should use CatalogController" do
20
+ controller.should be_an_instance_of(CatalogController)
21
+ end
22
+
23
+
24
+ describe "Paths Generated by Custom Routes:" do
25
+ # paths generated by custom routes
26
+ it "should map {:controller=>'catalog', :action=>'index'} to GET /catalog" do
27
+ { :get => "/catalog" }.should route_to(:controller => 'catalog', :action => 'index')
28
+ end
29
+ it "should map {:controller=>'catalog', :action=>'show', :id=>'test:3'} to GET /catalog/test:3" do
30
+ { :get => "/catalog/test:3" }.should route_to(:controller => 'catalog', :action => 'show', :id=>'test:3')
31
+ end
32
+ it "should map {:controller=>'catalog', :action=>'edit', :id=>'test:3'} to GET /catalog/test:3" do
33
+ { :get => "/catalog/test:3/edit" }.should route_to(:controller => 'catalog', :action => 'edit', :id=>'test:3')
34
+ end
35
+
36
+ it "should map catalog_path" do
37
+ # catalog_path.should == '/catalog'
38
+ catalog_path("test:3").should == '/catalog/test:3'
39
+ end
40
+ end
41
+
42
+ it "should not choke on objects with periods in ids (ie Fedora system objects)" do
43
+ pending "Need to override blacklight routes"
44
+
45
+ ## We could do something like this to remove the catalog/show route and replace it with a route that allows dots (e.g. resources :catalog, :id=> /.+/)
46
+ # def add_route
47
+ # new_route = ActionController::Routing::Routes.builder.build(name, route_options)
48
+ # ActionController::Routing::Routes.routes.insert(0, new_route)
49
+ # end
50
+
51
+ # def remove_route
52
+ # ActionController::Routing::Routes.routes.reject! { |r| r.instance_variable_get(:@requirements)[:slug_id] == id }
53
+ # end
54
+
55
+ catalog_path("fedora-system:FedoraObject-3.0").should == '/catalog/fedora-system:FedoraObject-3.0'
56
+ { :get => "/catalog/fedora-system:FedoraObject-3.0" }.should route_to(:controller => 'catalog', :action => 'show', :id=>'fedora-system:FedoraObject-3.0')
57
+ end
58
+
59
+ describe "index" do
60
+
61
+ describe "access controls" do
62
+ before(:all) do
63
+ @public_only_results = Blacklight.solr.find Hash[:phrases=>{:access_t=>"public"}]
64
+ @private_only_results = Blacklight.solr.find Hash[:phrases=>{:access_t=>"private"}]
65
+ end
66
+
67
+ it "should only return public documents if role does not have permissions" do
68
+ controller.stubs(:current_user).returns(nil)
69
+ get :index
70
+ assigns("response").docs.count.should == @public_only_results.docs.count
71
+ end
72
+ it "should return all documents if role does have permissions" do
73
+ User.any_instance.stubs(:login).returns("BigWig")
74
+ mock_user = User.new
75
+ session[:superuser_mode] = true
76
+ controller.stubs(:current_user).returns(mock_user)
77
+ get :index
78
+ assigns["response"].docs.count.should > @public_only_results.docs.count
79
+ end
80
+ end
81
+ end
82
+
83
+
84
+ describe "load_fedora_document" do
85
+
86
+ it "should load @document_fedora and @file_assets" do
87
+ controller.stubs(:params).returns({:id=>"foo:id"})
88
+ stub_base_object = stub("Base Object")
89
+ ActiveFedora::ContentModel.expects(:known_models_for).with( stub_base_object ).returns( [ModsAsset] )
90
+ stub_mods_asset = stub("MODS Asset")
91
+ stub_mods_asset.expects(:file_objects).with(:response_format=>:solr).returns("file assets response")
92
+
93
+ # Note: Had to stub Fedora::Repository.instance.find_model rather than stubbing ActiveFedora::Base.load_instance and ModsAsset.load_instance because
94
+ # Mocha was not unstubbing the ModsAsset class
95
+ #
96
+ # ActiveFedora::Base.stubs(:load_instance).with("foo:id").returns( stub_base_object )
97
+ # ModsAsset.stubs(:load_instance).with("foo:id").returns( stub_mods_asset )
98
+ Fedora::Repository.instance.expects(:find_model).with("foo:id", ActiveFedora::Base).returns( stub_base_object )
99
+ Fedora::Repository.instance.expects(:find_model).with("foo:id", ModsAsset).returns( stub_mods_asset )
100
+
101
+ controller.load_fedora_document
102
+
103
+ assigns[:document_fedora].should == stub_mods_asset
104
+ assigns[:file_assets].should == "file assets response"
105
+ end
106
+ end
107
+
108
+ describe "edit" do
109
+
110
+ it "should trigger show action" do
111
+ controller.expects(:show)
112
+ controller.stubs(:enforce_access_controls)
113
+ controller.stubs(:load_fedora_document)
114
+ get :edit, :id=>'hydrangea:fixture_mods_article1'
115
+ end
116
+ it "should render show template (which then delegates to edit partials)" do
117
+ controller.stubs(:enforce_access_controls)
118
+ controller.stubs(:load_fedora_document)
119
+ get :edit, :id=>'hydrangea:fixture_mods_article1'
120
+ response.should render_template("show")
121
+ end
122
+ end
123
+
124
+ describe "filters" do
125
+ describe "index" do
126
+ it "should trigger enforce_index_permissions" do
127
+ controller.expects(:add_access_controls_to_solr_params)
128
+ controller.expects(:enforce_index_permissions)
129
+ get :index
130
+ end
131
+ end
132
+ describe "show" do
133
+ it "should trigger enforce_show_permissions and load_fedora_document" do
134
+ controller.expects(:load_fedora_document)
135
+ controller.expects(:enforce_show_permissions)
136
+ get :show, :id=>'test:3'
137
+ end
138
+ end
139
+ describe "edit" do
140
+ it "should trigger enforce_edit_permissions and load_fedora_document" do
141
+ controller.expects(:load_fedora_document)
142
+ controller.expects(:enforce_edit_permissions)
143
+ get :edit, :id=>'test:3'
144
+ end
145
+ end
146
+ end
147
+
148
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+
4
+ # See cucumber tests (ie. /features/edit_document.feature) for more tests, including ones that test the edit method & view
5
+ # You can run the cucumber tests with
6
+ #
7
+ # cucumber --tags @edit
8
+ # or
9
+ # rake cucumber
10
+
11
+ describe CatalogController do
12
+
13
+ before do
14
+ controller.stubs(:load_fedora_document)
15
+ end
16
+
17
+ describe "show" do
18
+ it "should redirect to edit view if session is in edit context and user has edit permission" do
19
+ controller.stubs(:reader?).returns(true)
20
+ controller.expects(:editor?).returns(true)
21
+
22
+ controller.session[:viewing_context] = "edit"
23
+ get(:show, {:id=>"hydrangea:fixture_mods_article1"})
24
+ response.should redirect_to(:action => 'edit')
25
+ end
26
+ it "should allow you to reset the session context to browse using :viewing_context param" do
27
+ controller.stubs(:reader?).returns(true)
28
+ controller.session[:viewing_context] = "edit"
29
+ get(:show, :id=>"hydrangea:fixture_mods_article1", :viewing_context=>"browse")
30
+ session[:viewing_context].should == "browse"
31
+ response.should_not redirect_to(:action => 'edit')
32
+ end
33
+
34
+ it "should quietly switch session state to browse if user does not have edit permissions" do
35
+ controller.expects(:reader?).returns(true)
36
+ controller.expects(:editor?).returns(false)
37
+ controller.session[:viewing_context] = "edit"
38
+ get(:show, {:id=>"hydrangea:fixture_mods_article1"})
39
+ session[:viewing_context].should == "browse"
40
+ response.should_not redirect_to(:action => 'edit')
41
+ end
42
+ end
43
+
44
+ describe "edit" do
45
+ it "should enforce edit permissions, redirecting to show action and resetting session context if user does not have edit permissions" do
46
+ mock_user = mock("User")
47
+ mock_user.stubs(:login).returns("patron1")
48
+ mock_user.stubs(:is_being_superuser?).returns(false)
49
+ controller.stubs(:current_user).returns(mock_user)
50
+
51
+ get :edit, :id=>"hydrangea:fixture_mods_article1"
52
+ response.should redirect_to(:action => 'show')
53
+ flash[:notice].should == "You do not have sufficient privileges to edit this document. You have been redirected to the read-only view."
54
+ end
55
+ it "should render normally if user has edit permissions" do
56
+ controller.expects(:editor?).returns(true)
57
+ get :edit, :id=>"hydrangea:fixture_mods_article1"
58
+ response.should_not redirect_to(:action => 'show')
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+
4
+ # See cucumber tests (ie. /features/edit_document.feature) for more tests, including ones that test the edit method & view
5
+ # You can run the cucumber tests with
6
+ #
7
+ # cucumber --tags @edit
8
+ # or
9
+ # rake cucumber
10
+
11
+ describe ContributorsController do
12
+
13
+ describe "create" do
14
+ it "should support adding new person / contributor / organization nodes" do
15
+ mock_document = mock("document")
16
+ ["person","conference","organization"].each do |type|
17
+ mock_document.expects(:insert_contributor).with(type).returns(["foo node",989])
18
+ mock_document.expects(:save)
19
+ ModsAsset.expects(:find).with("_PID_").returns(mock_document)
20
+ post :create, :asset_id=>"_PID_", :controller => "contributors", :content_type => "mods_asset", :contributor_type=>type
21
+ response.should redirect_to "http://test.host/catalog/_PID_/edit##{type}_989"
22
+ end
23
+ end
24
+ it "should return inline html if format is inline" do
25
+ mock_document = mock("document")
26
+ ["person","conference","organization"].each do |type|
27
+ mock_document.expects(:insert_contributor).with(type).returns(["foo node","foo index"])
28
+ mock_document.expects(:save)
29
+ ModsAsset.expects(:find).with("_PID_").returns(mock_document)
30
+ post :create, :asset_id=>"_PID_", :controller => "contributors", :content_type => "mods_asset", :contributor_type=>type, :format=>"inline"
31
+ response.should render_template "contributors/_edit_#{type}"
32
+ end
33
+ end
34
+ end
35
+
36
+ describe "destroy" do
37
+ it "should delete the contributor corresponding to contributor_type and index" do
38
+ mock_dataset = mock("Dataset")
39
+ mock_dataset.expects(:remove_contributor).with("conference", "3")
40
+ mock_dataset.expects(:save)
41
+ ModsAsset.expects(:find).with("_PID_").returns(mock_dataset)
42
+
43
+ delete :destroy, :asset_id=>"_PID_", :content_type => "mods_asset", :contributor_type=>"conference", :index=>"3"
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,189 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe FileAssetsController do
4
+ include Devise::TestHelpers
5
+
6
+ before do
7
+ session[:user]='bob'
8
+ end
9
+
10
+ ## Plugin Tests
11
+ it "should use FileAssetsController" do
12
+ controller.should be_an_instance_of(FileAssetsController)
13
+ end
14
+ it "should be restful" do
15
+ { :get => "/file_assets" }.should route_to(:controller=>'file_assets', :action=>'index')
16
+ { :get => "/file_assets/3" }.should route_to(:controller=>'file_assets', :action=>'show', :id=>"3")
17
+ { :delete=> "/file_assets/3" }.should route_to(:controller=>'file_assets', :action=>'destroy', :id=>"3")
18
+ { :put=>"/file_assets/3" }.should route_to(:controller=>'file_assets', :action=>'update', :id=>"3")
19
+ { :get => "/file_assets/3/edit" }.should route_to(:controller=>'file_assets', :action=>'edit', :id=>"3")
20
+ { :get =>"/file_assets/new" }.should route_to(:controller=>'file_assets', :action=>'new')
21
+ { :post => "/file_assets" }.should route_to(:controller=>'file_assets', :action=>'create')
22
+
23
+ end
24
+
25
+ describe "index" do
26
+
27
+ it "should find all file assets in the repo if no container_id is provided" do
28
+ #FileAsset.expects(:find_by_solr).with(:all, {}).returns("solr result")
29
+ # Solr::Connection.any_instance.expects(:query).with('conforms_to_field:info\:fedora/afmodel\:FileAsset', {}).returns("solr result")
30
+ Solr::Connection.any_instance.expects(:query).with('active_fedora_model_s:FileAsset', {}).returns("solr result")
31
+ controller.stubs(:load_permissions_from_solr)
32
+ ActiveFedora::Base.expects(:new).never
33
+ xhr :get, :index
34
+ assigns[:solr_result].should == "solr result"
35
+ end
36
+ it "should find all file assets belonging to a given container object if container_id or container_id is provided" do
37
+ mock_container = mock("container")
38
+ mock_container.expects(:file_objects).with(:response_format => :solr).returns("solr result")
39
+ controller.expects(:get_search_results).with(:q=>'is_part_of_s:info\:fedora/_PID_').returns(["assets solr response","assets solr list"])
40
+ controller.expects(:get_solr_response_for_doc_id).with('_PID_').returns(["container solr response","container solr doc"])
41
+ controller.stubs(:load_permissions_from_solr)
42
+
43
+ ActiveFedora::Base.expects(:load_instance).with("_PID_").returns(mock_container)
44
+ xhr :get, :index, :asset_id=>"_PID_"
45
+ assigns[:response].should == "assets solr response"
46
+ assigns[:document_list].should == "assets solr list"
47
+
48
+ assigns[:container_response].should == "container solr response"
49
+ assigns[:document].should == "container solr doc"
50
+ assigns[:solr_result].should == "solr result"
51
+ assigns[:container].should == mock_container
52
+ end
53
+
54
+ it "should find all file assets belonging to a given container object if container_id or container_id is provided" do
55
+ pending
56
+ # this was testing a hacked version
57
+ mock_solr_hash = {"has_collection_member_field"=>["info:fedora/foo:id"]}
58
+ mock_container = mock("container")
59
+ mock_container.expects(:collection_members).with(:response_format=>:solr).returns("solr result")
60
+ ActiveFedora::Base.expects(:load_instance).with("_PID_").returns(mock_container)
61
+ xhr :get, :index, :asset_id=>"_PID_"
62
+ assigns[:solr_result].should == "solr result"
63
+ assigns[:container].should == mock_container
64
+ end
65
+ end
66
+
67
+ describe "index" do
68
+ before(:each) do
69
+ Fedora::Repository.stubs(:instance).returns(stub_everything)
70
+ end
71
+
72
+ it "should be refined further!"
73
+
74
+ end
75
+ describe "new" do
76
+ it "should return the file uploader view"
77
+ it "should set :container_id to value of :container_id if available" do
78
+ xhr :get, :new, :asset_id=>"_PID_"
79
+ @controller.params[:asset_id].should == "_PID_"
80
+ end
81
+ end
82
+
83
+ describe "show" do
84
+ it "should redirect to index view if current_user does not have read or edit permissions" do
85
+ mock_user = mock("User")
86
+ mock_user.stubs(:login).returns("fake_user")
87
+ mock_user.stubs(:is_being_superuser?).returns(false)
88
+ controller.stubs(:current_user).returns(mock_user)
89
+ get(:show, :id=>"hydrangea:fixture_file_asset1")
90
+ response.should redirect_to(:action => 'index')
91
+ end
92
+ it "should redirect to index view if the file does not exist" do
93
+ get(:show, :id=>"example:invalid_object")
94
+ response.should redirect_to(:action => 'index')
95
+ end
96
+ end
97
+
98
+ describe "create" do
99
+ it "should create and save a file asset from the given params" do
100
+ mock_fa = mock("FileAsset")
101
+ mock_fa.stubs(:pid).returns("foo:pid")
102
+ controller.expects(:create_and_save_file_asset_from_params).returns(mock_fa)
103
+ xhr :post, :create, :Filedata=>mock("File"), :Filename=>"Foo File"
104
+ end
105
+ it "if container_id is provided, should associate the created file asset wtih the container" do
106
+ stub_fa = stub("FileAsset", :save)
107
+ stub_fa.stubs(:pid).returns("foo:pid")
108
+ controller.expects(:create_and_save_file_asset_from_params).returns(stub_fa)
109
+ controller.expects(:associate_file_asset_with_container)
110
+ xhr :post, :create, :Filedata=>stub("File"), :Filename=>"Foo File", :asset_id=>"_PID_"
111
+ end
112
+ it "should redirect back to container edit view if no Filedata is provided but container_id is provided" do
113
+ xhr :post, :create, :asset_id=>"_PID_"
114
+ response.should redirect_to(:controller=>"catalog", :id=>"_PID_", :action => 'edit')
115
+ # flash[:notice].should == "You must specify a file to upload."
116
+ end
117
+ it "should display a message that you need to select a file to upload if no Filedata is provided" do
118
+ xhr :post, :create
119
+ # flash[:notice].should == "You must specify a file to upload."
120
+ end
121
+
122
+ end
123
+
124
+ describe "destroy" do
125
+ it "should delete the asset identified by pid" do
126
+ mock_obj = mock("asset", :delete)
127
+ ActiveFedora::Base.expects(:load_instance).with("__PID__").returns(mock_obj)
128
+ delete(:destroy, :id => "__PID__")
129
+ end
130
+ it "should remove container relationship and perform proper garbage collection" do
131
+ pending "relies on ActiveFedora implementing Base.file_objects_remove"
132
+ mock_container = mock("asset")
133
+ mock_container.expects(:file_objects_remove).with("_file_asset_pid_")
134
+ FileAsset.expects(:garbage_collect).with("_file_asset_pid_")
135
+ ActiveFedora::Base.expects(:load_instance).with("_container_pid_").returns(mock_container)
136
+ delete(:destroy, :id => "_file_asset_pid_", :asset_id=>"_container_pid_")
137
+ end
138
+ end
139
+
140
+ describe "integration tests - " do
141
+ before(:all) do
142
+ Fedora::Repository.register(ActiveFedora.fedora_config[:url])
143
+ ActiveFedora::SolrService.register(ActiveFedora.solr_config[:url])
144
+ @test_container = ActiveFedora::Base.new
145
+ @test_container.add_relationship(:is_member_of, "foo:1")
146
+ @test_container.add_relationship(:has_collection_member, "foo:2")
147
+ @test_container.save
148
+
149
+ @test_fa = FileAsset.new
150
+ @test_fa.add_relationship(:is_part_of, @test_container)
151
+ @test_fa.save
152
+ end
153
+
154
+ after(:all) do
155
+ @test_container.delete
156
+ @test_fa.delete
157
+ end
158
+
159
+ describe "index" do
160
+ it "should retrieve the container object and its file assets" do
161
+ #xhr :get, :index, :container_id=>@test_container.pid
162
+ get :index, {:asset_id=>@test_container.pid}
163
+ @controller.params[:asset_id].should_not be_nil
164
+ assigns(:solr_result).should_not be_nil
165
+ #puts assigns(:solr_result).inspect
166
+ assigns(:container).file_objects(:response_format=>:id_array).should include(@test_fa.pid)
167
+ assigns(:container).file_objects(:response_format=>:id_array).should include("foo:2")
168
+ end
169
+ end
170
+
171
+ describe "create" do
172
+ before :each do
173
+ mock_user = mock("User")
174
+ mock_warden = mock("Warden")
175
+ mock_warden.stubs(:authenticate).returns(mock_user)
176
+ request.env['warden'] = mock_warden
177
+ end
178
+
179
+ it "should set is_part_of relationship on the new File Asset pointing back at the container" do
180
+
181
+ test_file = fixture("empty_file.txt")
182
+ filename = "My File Name"
183
+ post :create, {:Filedata=>test_file, :Filename=>filename, :asset_id=>@test_container.pid}
184
+ assigns(:file_asset).relationships[:self][:is_part_of].should == ["info:fedora/#{@test_container.pid}"]
185
+ retrieved_fa = FileAsset.load_instance(@test_fa.pid).relationships[:self][:is_part_of].should == ["info:fedora/#{@test_container.pid}"]
186
+ end
187
+ end
188
+ end
189
+ end