worthwhile 0.0.1.alpha → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rspec +1 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +7 -11
  6. data/README.md +8 -12
  7. data/Rakefile +17 -2
  8. data/app/actors/concerns/worthwhile/manages_embargoes_actor.rb +79 -0
  9. data/app/actors/curation_concern/base_actor.rb +68 -0
  10. data/app/actors/curation_concern/generic_file_actor.rb +40 -0
  11. data/app/actors/curation_concern/generic_work_actor.rb +92 -0
  12. data/app/actors/curation_concern/linked_resource_actor.rb +4 -0
  13. data/app/assets/images/default.png +0 -0
  14. data/app/assets/images/nope.png +0 -0
  15. data/app/assets/javascripts/.gitkeep +0 -0
  16. data/app/assets/javascripts/modernizr.js +3 -0
  17. data/app/assets/javascripts/worthwhile/.gitkeep +0 -0
  18. data/app/assets/javascripts/worthwhile/accept_contributor_agreement.js +15 -0
  19. data/app/assets/javascripts/worthwhile/application.js +18 -0
  20. data/app/assets/javascripts/worthwhile/browse_everything_implement.js +7 -0
  21. data/app/assets/javascripts/worthwhile/embargoes.js +17 -0
  22. data/app/assets/javascripts/worthwhile/facet_mine.js +22 -0
  23. data/app/assets/javascripts/worthwhile/help_modal.js +36 -0
  24. data/app/assets/javascripts/worthwhile/link_groups.js.coffee +123 -0
  25. data/app/assets/javascripts/worthwhile/link_users.js.coffee +126 -0
  26. data/app/assets/javascripts/worthwhile/manage_repeating_fields.js +74 -0
  27. data/app/assets/javascripts/worthwhile/proxy_rights.js.coffee +95 -0
  28. data/app/assets/javascripts/worthwhile/proxy_submission.js +23 -0
  29. data/app/assets/javascripts/worthwhile/select_works.js.coffee +20 -0
  30. data/app/assets/javascripts/worthwhile/worthwhile.js +45 -0
  31. data/app/assets/stylesheets/worthwhile.css.scss +23 -0
  32. data/app/assets/stylesheets/worthwhile/_global-variables.css.scss +5 -0
  33. data/app/assets/stylesheets/worthwhile/_modules.css.scss +14 -0
  34. data/app/assets/stylesheets/worthwhile/_positioning.css.scss +138 -0
  35. data/app/assets/stylesheets/worthwhile/_theme.css.scss +46 -0
  36. data/app/assets/stylesheets/worthwhile/_typography.css.scss +142 -0
  37. data/app/assets/stylesheets/worthwhile/_variables_bootstrap.css.scss +7 -0
  38. data/app/assets/stylesheets/worthwhile/_worthwhile.css.scss +7 -0
  39. data/app/assets/stylesheets/worthwhile/downloads.css.scss +3 -0
  40. data/app/assets/stylesheets/worthwhile/help_requests.css.scss +3 -0
  41. data/app/assets/stylesheets/worthwhile/modules/accessibility.css.scss +50 -0
  42. data/app/assets/stylesheets/worthwhile/modules/accordion.css.scss +33 -0
  43. data/app/assets/stylesheets/worthwhile/modules/attributes.css.scss +26 -0
  44. data/app/assets/stylesheets/worthwhile/modules/classify_work.css.scss +100 -0
  45. data/app/assets/stylesheets/worthwhile/modules/collections.css.scss +42 -0
  46. data/app/assets/stylesheets/worthwhile/modules/embargoes.css.scss +15 -0
  47. data/app/assets/stylesheets/worthwhile/modules/emphatic_action_area.css.scss +14 -0
  48. data/app/assets/stylesheets/worthwhile/modules/forms.css.scss +116 -0
  49. data/app/assets/stylesheets/worthwhile/modules/multi_value_fields.css.scss +52 -0
  50. data/app/assets/stylesheets/worthwhile/modules/pagination.css.scss +4 -0
  51. data/app/assets/stylesheets/worthwhile/modules/search_results.css.scss +55 -0
  52. data/app/assets/stylesheets/worthwhile/modules/site_actions.css.scss +53 -0
  53. data/app/assets/stylesheets/worthwhile/modules/site_search.css.scss +46 -0
  54. data/app/controllers/catalog_controller.rb +3 -0
  55. data/app/controllers/collections_controller.rb +59 -0
  56. data/app/controllers/concerns/worthwhile/application_controller_behavior.rb +23 -0
  57. data/app/controllers/concerns/worthwhile/catalog_controller.rb +347 -0
  58. data/app/controllers/concerns/worthwhile/curation_concern_controller.rb +131 -0
  59. data/app/controllers/concerns/worthwhile/files_controller.rb +149 -0
  60. data/app/controllers/concerns/worthwhile/manages_embargoes.rb +22 -0
  61. data/app/controllers/concerns/worthwhile/parent_container.rb +31 -0
  62. data/app/controllers/concerns/worthwhile/themed_layout_controller.rb +31 -0
  63. data/app/controllers/concerns/worthwhile/without_namespace.rb +15 -0
  64. data/app/controllers/curation_concern/generic_files_controller.rb +6 -0
  65. data/app/controllers/curation_concern/generic_works_controller.rb +6 -0
  66. data/app/controllers/curation_concern/linked_resources_controller.rb +68 -0
  67. data/app/controllers/curation_concern/permissions_controller.rb +19 -0
  68. data/app/controllers/downloads_controller.rb +4 -0
  69. data/app/controllers/embargoes_controller.rb +44 -0
  70. data/app/controllers/leases_controller.rb +34 -0
  71. data/app/controllers/registrations_controller.rb +20 -0
  72. data/app/controllers/sessions_controller.rb +4 -0
  73. data/app/controllers/worthwhile/application_controller.rb +7 -0
  74. data/app/controllers/worthwhile/classify_concerns_controller.rb +35 -0
  75. data/app/datastreams/generic_work_metadata.rb +3 -0
  76. data/app/datastreams/worthwhile/generic_work_rdf_properties.rb +57 -0
  77. data/app/datastreams/worthwhile/properties_datastream.rb +28 -0
  78. data/app/helpers/curate/collections_helper.rb +133 -0
  79. data/app/helpers/worthwhile/ability_helper.rb +46 -0
  80. data/app/helpers/worthwhile/attribute_helper.rb +67 -0
  81. data/app/helpers/worthwhile/catalog_helper.rb +38 -0
  82. data/app/helpers/worthwhile/collections_helper.rb +19 -0
  83. data/app/helpers/worthwhile/embargo_helper.rb +17 -0
  84. data/app/helpers/worthwhile/generic_file_helper.rb +19 -0
  85. data/app/helpers/worthwhile/lease_helper.rb +18 -0
  86. data/app/helpers/worthwhile/main_app_helpers.rb +14 -0
  87. data/app/helpers/worthwhile/render_constraints_helper.rb +42 -0
  88. data/app/helpers/worthwhile/search_paths_helper.rb +13 -0
  89. data/app/helpers/worthwhile/thumbnail_helper.rb +11 -0
  90. data/app/helpers/worthwhile/title_helper.rb +23 -0
  91. data/app/helpers/worthwhile/url_helper.rb +16 -0
  92. data/app/inputs/multi_value_input.rb +72 -0
  93. data/app/models/collection.rb +15 -0
  94. data/app/models/concerns/curation_concern/collection_model.rb +62 -0
  95. data/app/models/concerns/curation_concern/curatable.rb +77 -0
  96. data/app/models/concerns/curation_concern/has_representative.rb +14 -0
  97. data/app/models/concerns/curation_concern/human_readable_type.rb +23 -0
  98. data/app/models/concerns/curation_concern/with_basic_metadata.rb +49 -0
  99. data/app/models/concerns/curation_concern/with_editors.rb +44 -0
  100. data/app/models/concerns/curation_concern/with_generic_files.rb +23 -0
  101. data/app/models/concerns/curation_concern/with_linked_resources.rb +21 -0
  102. data/app/models/concerns/curation_concern/work.rb +24 -0
  103. data/app/models/concerns/worthwhile/ability.rb +34 -0
  104. data/app/models/concerns/worthwhile/generic_file/versioned_content.rb +18 -0
  105. data/app/models/concerns/worthwhile/generic_file_base.rb +64 -0
  106. data/app/models/concerns/worthwhile/solr_document_behavior.rb +140 -0
  107. data/app/models/generic_work.rb +5 -0
  108. data/app/models/worthwhile/classify_concern.rb +47 -0
  109. data/app/models/worthwhile/content_version.rb +23 -0
  110. data/app/models/worthwhile/contributor_agreement.rb +23 -0
  111. data/app/models/worthwhile/generic_file.rb +5 -0
  112. data/app/models/worthwhile/linked_resource.rb +41 -0
  113. data/app/models/worthwhile/quick_classification_query.rb +31 -0
  114. data/app/services/worthwhile/curation_concern.rb +21 -0
  115. data/app/services/worthwhile/embargo_service.rb +26 -0
  116. data/app/services/worthwhile/lease_service.rb +23 -0
  117. data/app/views/catalog/_action_menu_partials/_collection.html.erb +27 -0
  118. data/app/views/catalog/_action_menu_partials/_default.html.erb +27 -0
  119. data/app/views/catalog/_document.html.erb +3 -0
  120. data/app/views/catalog/_document_list.html.erb +5 -0
  121. data/app/views/catalog/_home_text.html.erb +8 -0
  122. data/app/views/catalog/_index_default.html.erb +17 -0
  123. data/app/views/catalog/_index_header_list_default.html.erb +17 -0
  124. data/app/views/catalog/_navbar.html.erb +12 -0
  125. data/app/views/catalog/_show_partials/_default.html.erb +22 -0
  126. data/app/views/catalog/_show_partials/_default_details.html.erb +15 -0
  127. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  128. data/app/views/catalog/index.html.erb +48 -0
  129. data/app/views/collections/_batch_edits_actions.html.erb +3 -0
  130. data/app/views/collections/_button_for_creating_empty_collection.html.erb +3 -0
  131. data/app/views/collections/_collection.html.erb +1 -0
  132. data/app/views/collections/_dashboard_document_list.html.erb +6 -0
  133. data/app/views/collections/_document_list.html.erb +7 -0
  134. data/app/views/collections/_edit_actions.html.erb +5 -0
  135. data/app/views/collections/_edit_descriptions.html.erb +20 -0
  136. data/app/views/collections/_form.html.erb +26 -0
  137. data/app/views/collections/_form_for_select_collection.html.erb +34 -0
  138. data/app/views/collections/_form_permission.html.erb +36 -0
  139. data/app/views/collections/_form_required_information.html.erb +11 -0
  140. data/app/views/collections/_identifier_and_action.html.erb +15 -0
  141. data/app/views/collections/_media_display.html.erb +1 -0
  142. data/app/views/collections/_paginate.html.erb +6 -0
  143. data/app/views/collections/_search_collection_dashboard_form.html.erb +10 -0
  144. data/app/views/collections/_show_actions.html.erb +8 -0
  145. data/app/views/collections/_show_descriptions.html.erb +10 -0
  146. data/app/views/collections/_show_fields.html.erb +0 -0
  147. data/app/views/collections/_single_item_action_fields.html.erb +6 -0
  148. data/app/views/collections/_sort_and_per_page.html.erb +29 -0
  149. data/app/views/collections/_view_type_group.html.erb +13 -0
  150. data/app/views/collections/edit.html.erb +22 -0
  151. data/app/views/collections/new.html.erb +15 -0
  152. data/app/views/collections/show.html.erb +24 -0
  153. data/app/views/curate/collections/_add_to_collection_modal.html.erb +15 -0
  154. data/app/views/curate/collections/_button_remove_from_collection.html.erb +6 -0
  155. data/app/views/curate/collections/_form_to_add_member.html.erb +27 -0
  156. data/app/views/curate/collections/add_member_form.html.erb +6 -0
  157. data/app/views/curation_concern/base/_attributes.html.erb +25 -0
  158. data/app/views/curation_concern/base/_collections.html.erb +26 -0
  159. data/app/views/curation_concern/base/_form.html.erb +27 -0
  160. data/app/views/curation_concern/base/_form_additional_information.html.erb +9 -0
  161. data/app/views/curation_concern/base/_form_content_license.html.erb +16 -0
  162. data/app/views/curation_concern/base/_form_contributor_agreement.html.erb +29 -0
  163. data/app/views/curation_concern/base/_form_descriptive_fields.erb +23 -0
  164. data/app/views/curation_concern/base/_form_files_and_links.html.erb +29 -0
  165. data/app/views/curation_concern/base/_form_permission.html.erb +52 -0
  166. data/app/views/curation_concern/base/_form_permission_embargo.html.erb +6 -0
  167. data/app/views/curation_concern/base/_form_permission_lease.html.erb +6 -0
  168. data/app/views/curation_concern/base/_form_permission_under_embargo.html.erb +16 -0
  169. data/app/views/curation_concern/base/_form_permission_under_lease.html.erb +18 -0
  170. data/app/views/curation_concern/base/_form_representative_image.html.erb +13 -0
  171. data/app/views/curation_concern/base/_form_required_information.html.erb +11 -0
  172. data/app/views/curation_concern/base/_form_supplementary_fields.html.erb +15 -0
  173. data/app/views/curation_concern/base/_legally_binding_text.html.erb +33 -0
  174. data/app/views/curation_concern/base/_related_files.html.erb +24 -0
  175. data/app/views/curation_concern/base/_related_resources.html.erb +40 -0
  176. data/app/views/curation_concern/base/_representative_media.html.erb +8 -0
  177. data/app/views/curation_concern/base/edit.html.erb +15 -0
  178. data/app/views/curation_concern/base/new.html.erb +14 -0
  179. data/app/views/curation_concern/base/show.html.erb +32 -0
  180. data/app/views/curation_concern/base/unauthorized.html.erb +3 -0
  181. data/app/views/curation_concern/generic_files/_form.html.erb +35 -0
  182. data/app/views/curation_concern/generic_files/_media_display.html.erb +20 -0
  183. data/app/views/curation_concern/generic_files/edit.html.erb +5 -0
  184. data/app/views/curation_concern/generic_files/show.html.erb +15 -0
  185. data/app/views/curation_concern/generic_works/_generic_work.html.erb +3 -0
  186. data/app/views/curation_concern/linked_resources/_form.html.erb +11 -0
  187. data/app/views/curation_concern/linked_resources/edit.html.erb +5 -0
  188. data/app/views/curation_concern/linked_resources/new.html.erb +5 -0
  189. data/app/views/curation_concern/permissions/confirm.html.erb +13 -0
  190. data/app/views/curation_concern/worthwhile/generic_files/_actions.html.erb +16 -0
  191. data/app/views/curation_concern/worthwhile/generic_files/_generic_file.html.erb +12 -0
  192. data/app/views/embargoes/_embargo_history.html.erb +7 -0
  193. data/app/views/embargoes/_list_active_embargoes.html.erb +16 -0
  194. data/app/views/embargoes/_list_deactivated_embargoes.html.erb +10 -0
  195. data/app/views/embargoes/_list_expired_active_embargoes.html.erb +44 -0
  196. data/app/views/embargoes/edit.html.erb +43 -0
  197. data/app/views/embargoes/index.html.erb +18 -0
  198. data/app/views/layouts/boilerplate.html.erb +22 -0
  199. data/app/views/layouts/common_objects.html.erb +36 -0
  200. data/app/views/layouts/curate_nd.html.erb +33 -0
  201. data/app/views/layouts/curate_nd/1_column.html.erb +22 -0
  202. data/app/views/layouts/curate_nd/2_column.html.erb +26 -0
  203. data/app/views/layouts/curate_nd/catalog.html.erb +38 -0
  204. data/app/views/layouts/curate_nd/dashboard.html.erb +22 -0
  205. data/app/views/leases/_lease_history.html.erb +7 -0
  206. data/app/views/leases/_list_active_leases.html.erb +16 -0
  207. data/app/views/leases/_list_deactivated_leases.html.erb +4 -0
  208. data/app/views/leases/_list_expired_active_leases.html.erb +38 -0
  209. data/app/views/leases/edit.html.erb +43 -0
  210. data/app/views/leases/index.html.erb +18 -0
  211. data/app/views/shared/_add_content.html.erb +32 -0
  212. data/app/views/shared/_brand_bar.html.erb +10 -0
  213. data/app/views/shared/_flash_message.html.erb +17 -0
  214. data/app/views/shared/_footer.html.erb +10 -0
  215. data/app/views/shared/_ga.html.erb +6 -0
  216. data/app/views/shared/_header.html.erb +12 -0
  217. data/app/views/shared/_my_actions.html.erb +21 -0
  218. data/app/views/shared/_site_actions.html.erb +7 -0
  219. data/app/views/shared/_site_search.html.erb +12 -0
  220. data/app/views/shared/_title_bar.html.erb +16 -0
  221. data/app/views/worthwhile/classify_concerns/new.html.erb +27 -0
  222. data/app/workers/visibility_copy_worker.rb +29 -0
  223. data/config/initializers/simple_form.rb +31 -0
  224. data/config/locales/sufia.en.yml +26 -0
  225. data/config/locales/worthwhile.en.yml +68 -0
  226. data/config/routes.rb +4 -0
  227. data/lib/generators/worthwhile/install_generator.rb +74 -0
  228. data/lib/generators/worthwhile/templates/worthwhile.css.scss +3 -0
  229. data/lib/generators/worthwhile/templates/worthwhile.js +1 -0
  230. data/lib/generators/worthwhile/templates/worthwhile_config.rb +3 -0
  231. data/lib/generators/worthwhile/templates/worthwhile_helper.rb +4 -0
  232. data/lib/worthwhile.rb +3 -1
  233. data/lib/worthwhile/configuration.rb +74 -0
  234. data/lib/worthwhile/controller_resource.rb +10 -0
  235. data/lib/worthwhile/engine.rb +20 -0
  236. data/lib/worthwhile/rails/routes.rb +78 -0
  237. data/lib/worthwhile/spec_support.rb +10 -0
  238. data/lib/worthwhile/version.rb +1 -1
  239. data/spec/abilities/generic_file_abilities_spec.rb +62 -0
  240. data/spec/abilities/generic_work_abilities_spec.rb +58 -0
  241. data/spec/actors/curation_concern/generic_work_actor_spec.rb +215 -0
  242. data/spec/actors/curation_concern/linked_resource_actor_spec.rb +36 -0
  243. data/spec/actors/worthwile/manages_embargoes_actor_spec.rb +95 -0
  244. data/spec/controllers/catalog_controller_spec.rb +114 -0
  245. data/spec/controllers/collections_controller_spec.rb +216 -0
  246. data/spec/controllers/curation_concern/generic_files_controller_spec.rb +258 -0
  247. data/spec/controllers/curation_concern/generic_works_controller_spec.rb +171 -0
  248. data/spec/controllers/curation_concern/linked_resources_controller_spec.rb +123 -0
  249. data/spec/controllers/curation_concern/permissions_controller_spec.rb +29 -0
  250. data/spec/controllers/downloads_controller_spec.rb +53 -0
  251. data/spec/controllers/embargoes_controller_spec.rb +107 -0
  252. data/spec/controllers/leases_controller_spec.rb +95 -0
  253. data/spec/controllers/worthwhile/classify_concerns_controller_spec.rb +35 -0
  254. data/spec/factories/collections_factory.rb +21 -0
  255. data/spec/factories/create_curation_concern.rb +3 -0
  256. data/spec/factories/generic_files.rb +18 -0
  257. data/spec/factories/generic_works.rb +37 -0
  258. data/spec/factories/linked_resources_factory.rb +18 -0
  259. data/spec/factories/users.rb +15 -0
  260. data/spec/features/add_external_link_spec.rb +25 -0
  261. data/spec/features/add_file_spec.rb +28 -0
  262. data/spec/features/collection_spec.rb +238 -0
  263. data/spec/features/embargo_spec.rb +45 -0
  264. data/spec/features/lease_spec.rb +43 -0
  265. data/spec/features/update_file_spec.rb +28 -0
  266. data/spec/fixtures/files/image.png +0 -0
  267. data/spec/helpers/catalog_helper_spec.rb +58 -0
  268. data/spec/helpers/configuration_helper_spec.rb +13 -0
  269. data/spec/helpers/render_constraints_helper_spec.rb +19 -0
  270. data/spec/helpers/thumbnail_helper_spec.rb +21 -0
  271. data/spec/helpers/url_helper_spec.rb +19 -0
  272. data/spec/matchers.rb +24 -0
  273. data/spec/matchers/metadata_field_matchers.rb +28 -0
  274. data/spec/models/collection_spec.rb +136 -0
  275. data/spec/models/curation_concern/collection_model_spec.rb +50 -0
  276. data/spec/models/curation_concern/work_spec.rb +30 -0
  277. data/spec/models/generic_work_spec.rb +24 -0
  278. data/spec/models/worthwhile/content_version_spec.rb +27 -0
  279. data/spec/models/worthwhile/generic_file_spec.rb +77 -0
  280. data/spec/models/worthwhile/linked_resource_spec.rb +76 -0
  281. data/spec/routing/worthwhile/routes_spec.rb +23 -0
  282. data/spec/services/embargo_service_spec.rb +38 -0
  283. data/spec/services/lease_service_spec.rb +37 -0
  284. data/spec/spec_helper.rb +30 -5
  285. data/spec/support/controllers/engine_helpers.rb +7 -0
  286. data/spec/support/curation_concern/factory_helpers.rb +14 -0
  287. data/spec/support/features.rb +19 -0
  288. data/spec/support/features/fixture_file_upload.rb +14 -0
  289. data/spec/support/features/session_helpers.rb +41 -0
  290. data/spec/support/shared/shared_examples_has_dc_metadata.rb +17 -0
  291. data/spec/support/shared/shared_examples_is_a_curation_concern_model.rb +40 -0
  292. data/spec/support/shared/shared_examples_is_embargoable.rb +8 -0
  293. data/spec/support/shared/shared_examples_with_access_rights.rb +63 -0
  294. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -29
  295. data/spec/views/curation_concern/base/_attributes.html.erb_spec.rb +25 -0
  296. data/spec/views/curation_concern/base/show.html.erb_spec.rb +25 -0
  297. data/spec/views/shared/_add_content.html.erb_spec.rb +42 -0
  298. data/spec/views/shared/_my_actions.html.erb_spec.rb +23 -0
  299. data/spec/workers/visibility_copy_worker_spec.rb +68 -0
  300. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  301. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  302. data/vendor/assets/javascripts/handlebars.js +2278 -0
  303. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.autocomplete.js +602 -0
  304. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.core.js +356 -0
  305. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect-highlight.js +50 -0
  306. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.effect.js +1276 -0
  307. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.menu.js +610 -0
  308. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js +498 -0
  309. data/vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js +528 -0
  310. data/vendor/assets/javascripts/jquery.tokeninput.js +1061 -0
  311. data/vendor/assets/stylesheets/jquery-ui-lightness.css +474 -0
  312. data/vendor/assets/stylesheets/token-input-facebook.css +122 -0
  313. data/vendor/assets/stylesheets/token-input-mac.css +204 -0
  314. data/vendor/assets/stylesheets/token-input.css +127 -0
  315. data/worthwhile.gemspec +9 -3
  316. metadata +469 -9
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'embargo' do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ before do
6
+ sign_in user
7
+ end
8
+ describe "creating an embargoed object" do
9
+ before do
10
+ visit '/'
11
+ end
12
+
13
+ it "can be created, displayed and updated" do
14
+ click_link 'New Generic Work'
15
+ fill_in 'Title', with: 'Embargo test'
16
+ check 'I have read and accept the contributor license agreement'
17
+ choose 'Embargo'
18
+ select 'Private', from: 'Restricted to'
19
+ select 'Open Access', from: 'then open it up to'
20
+ click_button 'Create Generic work'
21
+
22
+ click_link "Edit This Generic Work"
23
+ click_link "Embargo Management Page"
24
+
25
+ expect(page).to have_content("This work is under embargo.")
26
+
27
+ fill_in "until", with: 2.days.from_now.to_s
28
+
29
+ click_button "Update Embargo"
30
+ expect(page).to have_content(2.days.from_now.strftime '%F')
31
+ end
32
+ end
33
+
34
+ describe "managing embargoes" do
35
+ before do
36
+ # admin privs
37
+ allow_any_instance_of(Ability).to receive(:user_groups).and_return(['admin'])
38
+ end
39
+
40
+ it "should show lists of objects under lease" do
41
+ visit '/embargoes'
42
+ expect(page).to have_content 'Manage Embargoes'
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe "leases" do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ before do
6
+ sign_in user
7
+ end
8
+ describe "create a new leased object" do
9
+
10
+ it "can be created, displayed and updated" do
11
+ visit '/'
12
+ click_link 'New Generic Work'
13
+ fill_in 'Title', with: 'Lease test'
14
+ check 'I have read and accept the contributor license agreement'
15
+ choose 'Lease'
16
+ select 'Open Access', from: 'Is available for'
17
+ select 'Private', from: 'then restrict it to'
18
+ click_button 'Create Generic work'
19
+
20
+ click_link "Edit This Generic Work"
21
+ click_link "Lease Management Page"
22
+
23
+ expect(page).to have_content("This work is under lease.")
24
+
25
+ fill_in "until", with: 2.days.from_now.to_s
26
+
27
+ click_button "Update Lease"
28
+ expect(page).to have_content(2.days.from_now.strftime '%F')
29
+ end
30
+
31
+ end
32
+
33
+ describe "managing leases" do
34
+ before do
35
+ # admin privs
36
+ allow_any_instance_of(Ability).to receive(:user_groups).and_return(['admin'])
37
+ end
38
+ it "should show lists of objects under lease" do
39
+ visit '/leases'
40
+ expect(page).to have_content 'Manage Leases'
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Editing attached files" do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ let!(:generic_file) { FactoryGirl.create(:file_with_work, user: user) }
6
+
7
+ before do
8
+ sign_in user
9
+
10
+ # stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
11
+ s2 = double('resque message')
12
+ expect(CharacterizeJob).to receive(:new).and_return(s2)
13
+ expect(Sufia.queue).to receive(:push).with(s2).once
14
+ end
15
+
16
+ it "should update the file" do
17
+ visit "/concern/generic_works/#{generic_file.batch.id}"
18
+ click_link 'Edit'
19
+
20
+ expect(page).to have_content "Updating Attached File to \"Test title\""
21
+
22
+ attach_file("Upload a file", fixture_file_path('files/image.png'))
23
+ click_button "Update Attached File"
24
+
25
+ expect(page).to have_content "The file image.png has been updated."
26
+ expect(generic_file.reload.content.label).to eq 'image.png'
27
+ end
28
+ end
Binary file
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Worthwhile::CatalogHelper do
4
+ before do
5
+ helper.params[:controller] = 'catalog'
6
+ allow(helper).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
7
+ allow(helper).to receive(:search_action_path) do |*args|
8
+ catalog_index_path *args
9
+ end
10
+ end
11
+
12
+ describe "all_type_tab" do
13
+ subject { helper.all_type_tab('All') }
14
+
15
+ context "when it is the active tab" do
16
+ it { should eq "<li class=\"active\"><a href=\"#\">All</a></li>" }
17
+ end
18
+
19
+ context "when it is not the active tab" do
20
+ before do
21
+ helper.params[:f] = { 'generic_type_sim' => ['Work'] }
22
+ end
23
+ it { should eq "<li><a href=\"/catalog\">All</a></li>" }
24
+ end
25
+
26
+ context "when other parameters are present" do
27
+ before do
28
+ helper.params[:f] = { 'generic_type_sim' => ['Work'] }
29
+ helper.params[:page] = 4
30
+ end
31
+ it("should clear them") { should eq "<li><a href=\"/catalog\">All</a></li>" }
32
+ end
33
+ end
34
+
35
+ describe "type_tab" do
36
+ subject { helper.type_tab('Works', 'Work') }
37
+
38
+ context "when it is the active tab" do
39
+ before do
40
+ helper.params[:f] = { 'generic_type_sim' => ['Work'] }
41
+ end
42
+ it { should eq "<li class=\"active\"><a href=\"#\">Works</a></li>" }
43
+ end
44
+
45
+ context "when it is not the active tab" do
46
+ it { should eq "<li><a href=\"/catalog?f%5Bgeneric_type_sim%5D%5B%5D=Work\">Works</a></li>" }
47
+ end
48
+
49
+ context "when other parameters are present" do
50
+ before do
51
+ helper.params[:f] = { 'generic_type_sim' => ['Collection'] }
52
+ helper.params[:page] = 4
53
+ end
54
+ it("should clear them") { should eq "<li><a href=\"/catalog?f%5Bgeneric_type_sim%5D%5B%5D=Work\">Works</a></li>" }
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::ConfigurationHelperBehavior do
4
+
5
+ describe "creator facet" do
6
+ before do
7
+ allow(helper).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
8
+ end
9
+ let(:field) { 'desc_metadata__creator_sim' }
10
+ subject { helper.facet_field_label field }
11
+ it { should eq 'Creator' }
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe WorthwhileHelper do
4
+ describe "render_constraints_query" do
5
+ before do
6
+ # Stub methods from Blacklight::SearchFields
7
+ allow(helper).to receive(:default_search_field).and_return(CatalogController.blacklight_config.default_search_field)
8
+ allow(helper).to receive(:label_for_search_field).and_return("Foo")
9
+ end
10
+
11
+ let(:search_params) { { q: 'Simon', search_field: 'publisher', controller: 'catalog' } }
12
+ subject { helper.render_constraints_query(search_params) }
13
+
14
+ it "removes search_field" do
15
+ node = Capybara::Node::Simple.new(subject)
16
+ expect(node).to have_link 'Remove constraint Foo: Simon', href: '/'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Worthwhile::ThumbnailHelper do
4
+ let(:work) { GenericWork.new }
5
+ let(:document) { SolrDocument.new work.to_solr }
6
+ subject { helper.thumbnail_tag document, {} }
7
+
8
+ context "with a representative" do
9
+ before do
10
+ allow(work).to receive(:representative).and_return('sufia:test123')
11
+ end
12
+ it "draws the thumbnail" do
13
+ expect(subject).to eq "<img alt=\"Thumbnail\" class=\"canonical-image\" " \
14
+ "src=\"/downloads/sufia:test123?datastream_id=thumbnail\" />"
15
+ end
16
+ end
17
+
18
+ it "draws the default thumbnail" do
19
+ expect(subject).to eq "<span class=\"canonical-image\"></span>"
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Worthwhile::UrlHelper do
4
+ before do
5
+ GenericWork.destroy_all
6
+ end
7
+ let(:profile) { ["{\"datastreams\":{}}"] }
8
+ let(:work) { GenericWork.create!(pid: 'sufia:123') }
9
+ let(:document) { SolrDocument.new("id"=>"sufia:123", "has_model_ssim"=>["info:fedora/afmodel:GenericWork"], 'object_profile_ssm' => profile) }
10
+ subject { helper.url_for_document document }
11
+
12
+ it { should eq "/concern/generic_works/123" }
13
+
14
+ context "when document is a Worthwhile::GenericFile" do
15
+ let(:document) { Worthwhile::GenericFile.new pid: 'foo:123' }
16
+ it { should eq "/concern/generic_files/123" }
17
+ end
18
+ end
19
+
data/spec/matchers.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'rspec/matchers'
2
+
3
+ if defined?($SHOW_MATCHERS)
4
+ module RSpec::Shim
5
+ def define(matcher_name, *args, &block)
6
+ $SHOW_MATCHERS[matcher_name] = caller.first.split(":")[0..1]
7
+ super
8
+ end
9
+ def matcher(matcher_name, *args, &block)
10
+ $SHOW_MATCHERS[matcher_name] = caller.first.split(":")[0..1]
11
+ super
12
+ end
13
+ end
14
+
15
+ RSpec::Matchers.extend(RSpec::Shim)
16
+ end
17
+
18
+ require 'rspec/matchers/dsl'
19
+ require 'rspec-html-matchers'
20
+ require 'rspec-rails'
21
+ require 'rspec/rails'
22
+ require 'rspec/rails/matchers'
23
+
24
+ Dir[File.expand_path('../matchers/**/*.rb', __FILE__)].each { |f| require f }
@@ -0,0 +1,28 @@
1
+ # RSpec matcher to spec delegations.
2
+
3
+ RSpec::Matchers.define :have_unique_field do |expected_field_name|
4
+ match do |subject|
5
+ subject.should respond_to(expected_field_name)
6
+ field_value = subject.send(expected_field_name)
7
+ field_value.nil? || !field_value.kind_of?(Array)
8
+ end
9
+
10
+ description do
11
+ "expected to have a single-valued field named #{expected_field_name}"
12
+ end
13
+
14
+ failure_message_for_should do |subject|
15
+ "#{subject.inspect} should respond to #{expected_field_name} as a single-value, not an Array. Responded with #{subject.send(expected_field_name).inspect}"
16
+ end
17
+ end
18
+
19
+ RSpec::Matchers.define :have_multivalue_field do |expected_field_name|
20
+ match do |subject|
21
+ subject.should respond_to(expected_field_name)
22
+ subject.send(expected_field_name).should be_instance_of Array
23
+ end
24
+
25
+ description do
26
+ "expected to have a multi-valued field named #{expected_field_name}"
27
+ end
28
+ end
@@ -0,0 +1,136 @@
1
+ require 'spec_helper'
2
+
3
+ describe Collection do
4
+ let(:reloaded_subject) { Collection.find(subject.pid) }
5
+
6
+ before do
7
+ subject.title = 'A title'
8
+ end
9
+
10
+ it 'can be part of a collection' do
11
+ expect(subject.can_be_member_of_collection?(double)).to be true
12
+ end
13
+
14
+ it 'can contain another collection' do
15
+ another_collection = FactoryGirl.create(:collection)
16
+ subject.members << another_collection
17
+ subject.members.should == [another_collection]
18
+ end
19
+
20
+ it 'updates solr with pids of its parent collections' do
21
+ another_collection = FactoryGirl.create(:collection)
22
+ another_collection.members << subject
23
+ another_collection.save
24
+ subject.reload.to_solr[Solrizer.solr_name(:collection)].should == [another_collection.pid]
25
+ end
26
+
27
+ it 'cannot contain itself' do
28
+ subject.members << subject
29
+ subject.save
30
+ reloaded_subject.members.should == []
31
+ end
32
+
33
+ describe "when visibility is private" do
34
+ it "should not be open_access?" do
35
+ subject.should_not be_open_access
36
+ end
37
+ it "should not be authenticated_only_access?" do
38
+ subject.should_not be_authenticated_only_access
39
+ end
40
+ it "should not be private_access?" do
41
+ subject.should be_private_access
42
+ end
43
+ end
44
+
45
+ describe "visibility" do
46
+ it "should have visibility accessor" do
47
+ subject.visibility.should == Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
48
+ end
49
+ it "should have visibility writer" do
50
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
51
+ subject.should be_open_access
52
+ end
53
+ end
54
+
55
+ describe "to_solr" do
56
+ before do
57
+ allow(subject).to receive(:pid).and_return('sufia:test123')
58
+ end
59
+
60
+ let(:solr_doc) {subject.to_solr}
61
+
62
+ it "should have required fields" do
63
+ expect(solr_doc['generic_type_sim']).to eq ['Collection']
64
+ expect(solr_doc['noid_tsi']).to eq 'test123'
65
+ end
66
+
67
+ end
68
+
69
+ describe '#human_readable_type' do
70
+ it "indicates collection" do
71
+ subject.human_readable_type.should == 'Collection'
72
+ end
73
+ end
74
+
75
+ describe '#add_member' do
76
+ it 'adds the member to the collection and returns true' do
77
+ work = FactoryGirl.create(:generic_work)
78
+ subject.add_member(work).should be true
79
+ reloaded_subject.members.should == [work]
80
+
81
+ work.reload
82
+ work.collections.should == [subject]
83
+ work.to_solr["collection_sim"].should == [subject.pid]
84
+ end
85
+
86
+ it 'returns nil if there is nothing to add' do
87
+ expect(subject.add_member(nil)).to be_nil
88
+ end
89
+
90
+ it 'returns false if it failed to save' do
91
+ subject.save
92
+ work = FactoryGirl.create(:generic_work)
93
+ allow(subject).to receive(:save).and_return(false)
94
+ expect(subject.add_member(work)).to be false
95
+ reloaded_subject.members.should == []
96
+ end
97
+ end
98
+
99
+ describe '#members.delete' do
100
+ it 'removes the member from the collection and returns true' do
101
+ work = FactoryGirl.create(:generic_work)
102
+ subject.members << work
103
+ subject.members.should == [work]
104
+ subject.save
105
+
106
+ work.reload
107
+ work.collections.should == [subject]
108
+ work.to_solr["collection_tesim"].should == [subject.pid]
109
+ solr_doc = ActiveFedora::SolrInstanceLoader.new(ActiveFedora::Base, work.pid).send(:solr_doc)
110
+ solr_doc["collection_tesim"].should == [subject.pid]
111
+
112
+ subject.members.delete(work).should == [work]
113
+ subject.save!
114
+ reloaded_subject.members.should == []
115
+
116
+ solr_doc = ActiveFedora::SolrInstanceLoader.new(ActiveFedora::Base, work.pid).send(:solr_doc)
117
+ solr_doc["collection_tesim"].should be_nil
118
+
119
+
120
+ work.reload
121
+ work.collections.should == []
122
+ work.to_solr["collection_tesim"].should == []
123
+ end
124
+ end
125
+
126
+ it 'has a representative' do
127
+ expect(subject.respond_to?(:representative)).to eq true
128
+ end
129
+
130
+ it 'can contain non-collection-member generic files' do
131
+ # GenericFiles that are associated with the Collection,
132
+ # but aren't members, for example, the representative file.
133
+ expect(subject.respond_to?(:generic_files)).to eq true
134
+ end
135
+
136
+ end