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,7 @@
1
+ module Controllers
2
+ module EngineHelpers
3
+ def main_app
4
+ Rails.application.class.routes.url_helpers
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ module CurationConcern
2
+ module FactoryHelpers
3
+ module_function
4
+ def load_factories_for(context, klass)
5
+ context.instance_exec(klass) do |curation_concern_class|
6
+ let(:curation_concern_type_underscore) { curation_concern_class.name.underscore }
7
+ let(:default_work_factory_name) { curation_concern_type_underscore }
8
+ let(:default_work_factory_name_with_files) { "#{default_work_factory_name}_with_files".to_sym }
9
+ let(:private_work_factory_name) { "private_#{curation_concern_type_underscore}".to_sym }
10
+ let(:public_work_factory_name) { "public_#{curation_concern_type_underscore}".to_sym }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../features/session_helpers', __FILE__)
2
+ require File.expand_path('../features/fixture_file_upload', __FILE__)
3
+
4
+ RSpec.configure do |config|
5
+ config.include Warden::Test::Helpers, type: :feature
6
+ config.include Features::SessionHelpers, type: :feature
7
+ config.include Features::FixtureFileUpload
8
+
9
+ config.before(:each, type: :feature) do
10
+ Warden.test_mode!
11
+ @old_resque_inline_value = Resque.inline
12
+ Resque.inline = true
13
+ end
14
+
15
+ config.after(:each, type: :feature) do
16
+ Warden.test_reset!
17
+ Resque.inline = @old_resque_inline_value
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ module Features
2
+ module FixtureFileUpload
3
+ # Can't just call this fixture_file_upload due to name conflicts.
4
+ def worthwhile_fixture_file_upload(path, content_type = 'text/plain', binary = false)
5
+ Rack::Test::UploadedFile.new(fixture_file_path(path), content_type, binary)
6
+ end
7
+ def fixture_file(path)
8
+ File.open(fixture_file_path(path))
9
+ end
10
+ def fixture_file_path(path)
11
+ File.join(Worthwhile::Engine.root.to_s, 'spec/fixtures', path)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,41 @@
1
+ module Features
2
+ module SessionHelpers
3
+ # Regular login
4
+ def login_as(user)
5
+ user.reload # because the user isn't re-queried via Warden
6
+ super(user, scope: :user, run_callbacks: false)
7
+ end
8
+ # Regular logout
9
+ def logout(user=:user)
10
+ super(user)
11
+ end
12
+
13
+ # Poltergeist-friendly sign-up
14
+ # Use this in feature tests
15
+ def sign_up_with(email, password)
16
+ Capybara.exact = true
17
+ visit new_user_registration_path
18
+ fill_in 'Email', with: email
19
+ fill_in 'Password', with: password
20
+ fill_in 'Password confirmation', with: password
21
+ click_button 'Sign up'
22
+ end
23
+
24
+ # Poltergeist-friendly sign-in
25
+ # Use this in feature tests
26
+ def sign_in(who = :user)
27
+ user = if who.instance_of?(User)
28
+ who
29
+ else
30
+ FactoryGirl.build(:user).tap do |u|
31
+ u.save!
32
+ end
33
+ end
34
+ visit new_user_session_path
35
+ fill_in 'Email', with: user.email
36
+ fill_in 'Password', with: user.password
37
+ click_button 'Log in'
38
+ expect(page).to_not have_text 'Invalid email or password.'
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,17 @@
1
+ shared_examples 'has_dc_metadata' do
2
+
3
+ # Single-valued fields
4
+ it { should have_unique_field(:created) }
5
+ it { should have_unique_field(:date_uploaded) }
6
+ it { should have_unique_field(:date_modified) }
7
+
8
+ # Multivalued fields
9
+ it { should have_multivalue_field(:content_format) }
10
+ it { should have_multivalue_field(:description) }
11
+ it { should have_multivalue_field(:identifier) }
12
+ it { should have_multivalue_field(:publisher) }
13
+ it { should have_multivalue_field(:source) }
14
+ it { should have_multivalue_field(:language) }
15
+ it { should have_multivalue_field(:subject) }
16
+
17
+ end
@@ -0,0 +1,40 @@
1
+ shared_examples 'is_a_curation_concern_model' do
2
+ CurationConcern::FactoryHelpers.load_factories_for(self, described_class)
3
+
4
+ it 'is registered for classification' do
5
+ expect(Worthwhile.configuration.registered_curation_concern_types).to include(described_class.name)
6
+ end
7
+
8
+ context 'behavior' do
9
+ subject { FactoryGirl.build(default_work_factory_name) }
10
+ it 'can be cast as an RDF object' do
11
+ expect(subject.as_rdf_object).to be_kind_of RDF::URI
12
+ end
13
+ end
14
+
15
+ context 'collectibility' do
16
+ subject { FactoryGirl.build(default_work_factory_name) }
17
+ let(:collection) { double }
18
+ it '#can_be_member_of_collection?' do
19
+ expect(subject.can_be_member_of_collection?(collection)).to eq(true)
20
+ end
21
+ end
22
+
23
+ context 'its test support factories', factory_verification: true do
24
+ it {
25
+ expect {
26
+ FactoryGirl.create(default_work_factory_name)
27
+ }.to_not raise_error
28
+ }
29
+ it {
30
+ expect {
31
+ FactoryGirl.create(private_work_factory_name)
32
+ }.to_not raise_error
33
+ }
34
+ it {
35
+ expect {
36
+ FactoryGirl.create(public_work_factory_name)
37
+ }.to_not raise_error
38
+ }
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+ shared_examples 'is_embargoable' do
2
+
3
+ it "has an embargo_release_date attribute" do
4
+ expect(subject).to respond_to(:embargo_release_date)
5
+ expect(subject).to respond_to(:embargo_release_date=)
6
+ end
7
+
8
+ end
@@ -0,0 +1,63 @@
1
+ shared_examples 'with_access_rights' do
2
+
3
+ def prepare_subject_for_access_rights_visibility_test!
4
+ # I am doing this because the actual persistence of the objects requires
5
+ # so much more and I don't know for certain if it has happened.
6
+ allow(subject).to receive(:persisted?).and_return(true)
7
+ end
8
+
9
+ it "has an under_embargo?" do
10
+ expect {
11
+ subject.under_embargo?
12
+ }.to_not raise_error
13
+ end
14
+
15
+ it "has a visibility attribute" do
16
+ expect(subject).to respond_to(:visibility)
17
+ expect(subject).to respond_to(:visibility=)
18
+ end
19
+
20
+ describe 'open access' do
21
+ it "has an open_access?" do
22
+ expect {
23
+ subject.open_access?
24
+ }.to_not raise_error
25
+ end
26
+
27
+ it 'sets visibility' do
28
+ prepare_subject_for_access_rights_visibility_test!
29
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
30
+ expect(subject).to be_open_access
31
+ end
32
+ end
33
+
34
+ describe 'authenticated access' do
35
+ it 'sets visibility' do
36
+ prepare_subject_for_access_rights_visibility_test!
37
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED
38
+ expect(subject).to be_authenticated_only_access
39
+ end
40
+
41
+ it "has an authenticated_only_access?" do
42
+ expect {
43
+ subject.authenticated_only_access?
44
+ }.to_not raise_error
45
+ end
46
+ end
47
+
48
+ describe 'private access' do
49
+ it 'sets visibility' do
50
+ prepare_subject_for_access_rights_visibility_test!
51
+ subject.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
52
+ expect(subject).to be_private_access
53
+ end
54
+
55
+
56
+ it "has an private_access?" do
57
+ expect {
58
+ subject.private_access?
59
+ }.to_not raise_error
60
+ end
61
+ end
62
+
63
+ end
@@ -3,39 +3,18 @@ require 'rails/generators'
3
3
  class TestAppGenerator < Rails::Generators::Base
4
4
  source_root "../../spec/test_app_templates"
5
5
 
6
- def add_gems
7
- gem 'sufia-models', github: 'projecthydra/sufia', branch: 'dce_dev'
8
- # gem 'blacklight', ">= 5.4.0.rc1", "<6"
9
- # gem "blacklight-gallery", :github => 'projectblacklight/blacklight-gallery'
10
- # gem 'sir-trevor-rails', :github => 'sul-dlss/sir-trevor-rails'
11
- # gem 'openseadragon', :github => 'sul-dlss/openseadragon-rails'
12
- # gem "jettywrapper"
13
- Bundler.with_clean_env do
14
- run "bundle install"
15
- end
16
- end
17
-
18
- def run_blacklight_generator
19
- say_status("warning", "GENERATING BL", :yellow)
6
+ # def add_gems
7
+ # gem 'sufia-models', github: 'projecthydra/sufia'
8
+ # Bundler.with_clean_env do
9
+ # run "bundle install"
10
+ # end
11
+ # end
20
12
 
21
- generate 'blacklight:install', '--devise'
22
- say_status("warning", "GENERATING HYDRA-HEAD", :yellow)
23
- generate "hydra:head -f"
24
- say_status("warning", "GENERATING SUFIA", :yellow)
25
- generate "sufia:models:install#{options[:force] ? ' -f' : ''}"
13
+ def run_generator
14
+ generate 'worthwhile:install'
26
15
  end
27
16
 
28
17
  def run_migrations
29
- # rake "spotlight:install:migrations"
30
18
  rake "db:migrate"
31
19
  end
32
-
33
- # def add_spotlight_routes_and_assets
34
- # generate 'spotlight:install'
35
- # end
36
-
37
- # def add_mailer_defaults
38
- # mail_config = " config.action_mailer.default_url_options = { host: \"localhost:3000\", from: \"noreply@example.com\" }\n"
39
- # insert_into_file 'config/application.rb', mail_config, after: "< Rails::Application\n"
40
- # end
41
20
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'curation_concern/base/_attributes.html.erb' do
4
+
5
+ let(:creator) { 'Bilbo' }
6
+ let(:contributor) { 'Frodo' }
7
+ let(:subject) { 'history' }
8
+
9
+ let(:curation_concern) { double(creator: [creator],
10
+ contributor: [contributor],
11
+ subject: [subject]) }
12
+
13
+ before do
14
+ view.stub(:dom_class) { '' }
15
+ view.stub(:permission_badge_for) { '' }
16
+
17
+ render partial: 'attributes', locals: { curation_concern: curation_concern }
18
+ end
19
+
20
+ it 'has links to search for other objects with the same metadata' do
21
+ expect(rendered).to have_link(creator, href: catalog_index_path(search_field: 'creator', q: creator))
22
+ expect(rendered).to have_link(contributor, href: catalog_index_path(search_field: 'contributor', q: contributor))
23
+ expect(rendered).to have_link(subject, href: catalog_index_path(search_field: 'subject', q: subject))
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'curation_concern/base/show.html.erb' do
4
+
5
+ let!(:curation_concern) { FactoryGirl.create(:private_generic_work) }
6
+
7
+ context "for editors" do
8
+ it 'has links to edit and add to collections' do
9
+ allow(view).to receive(:can?).and_return(true)
10
+ render file: 'curation_concern/base/show', locals: { curation_concern: curation_concern }
11
+ expect(view.content_for(:second_row)).to have_link("Edit This Generic Work", href: edit_polymorphic_path([:curation_concern, curation_concern]))
12
+ expect(view.content_for(:second_row)).to have_link("Add to a Collection", href: add_member_form_collections_path(collectible_id:curation_concern.pid))
13
+ end
14
+ end
15
+ context "for non-editors" do
16
+ it 'does not have links to edit' do
17
+ render file: 'curation_concern/base/show', locals: { curation_concern: curation_concern }
18
+ expect(view.content_for(:second_row)).not_to have_content("Edit this Generic Work")
19
+ end
20
+ it 'has link to add to a collection' do
21
+ render file: 'curation_concern/base/show', locals: { curation_concern: curation_concern }
22
+ expect(view.content_for(:second_row)).to have_link("Add to a Collection", href: add_member_form_collections_path(collectible_id:curation_concern.pid))
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'shared/_add_content.html.erb' do
4
+
5
+ context "for people who can create Works and Collections" do
6
+ it 'has links to create works and collections' do
7
+ allow(view).to receive(:current_user).and_return(FactoryGirl.create(:admin))
8
+ allow(view).to receive(:can?).and_return(true)
9
+ render partial: 'shared/add_content'
10
+ Worthwhile.configuration.curation_concerns.each do |curation_concern_type|
11
+ expect(rendered).to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path([:curation_concern, curation_concern_type]))
12
+ end
13
+ expect(rendered).to have_link("Add a Collection", href: collections.new_collection_path)
14
+ end
15
+ end
16
+ context "for people who can only create Collections" do
17
+ it 'has links to add collections but not to add works' do
18
+ allow(view).to receive(:current_user).and_return(FactoryGirl.create(:admin))
19
+ allow(view).to receive(:can?).and_return(true)
20
+ allow(view).to receive(:can_ever_create_works?).and_return(false)
21
+ render partial: 'shared/add_content'
22
+ Worthwhile.configuration.curation_concerns.each do |curation_concern_type|
23
+ expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path([:curation_concern, curation_concern_type]))
24
+ end
25
+ expect(rendered).to have_link("Add a Collection", href: collections.new_collection_path)
26
+ end
27
+ end
28
+
29
+ context "for people who cannot create anything" do
30
+ it 'does not have links to add works or collections' do
31
+ allow(view).to receive(:current_user).and_return(FactoryGirl.create(:user))
32
+ allow(view).to receive(:can?).and_return(false)
33
+ render partial: 'shared/add_content'
34
+ expect(rendered).not_to have_text("Add")
35
+ expect(rendered).not_to have_text("Admin")
36
+ Worthwhile.configuration.curation_concerns.each do |curation_concern_type|
37
+ expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path([:curation_concern, curation_concern_type]))
38
+ end
39
+ expect(rendered).not_to have_link("Add a Collection", href: collections.new_collection_path)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'shared/_my_actions.html.erb' do
4
+ include Worthwhile::SearchPathsHelper
5
+ context "for admins" do
6
+ it 'has links to edit and add to collections' do
7
+ allow(view).to receive(:current_user).and_return(FactoryGirl.create(:user))
8
+ allow(view).to receive(:can?).and_return(true)
9
+ render partial: 'shared/my_actions'
10
+ expect(rendered).to have_link("My Works", href: search_path_for_my_works)
11
+ expect(rendered).to have_link("My Collections", href: search_path_for_my_collections)
12
+ end
13
+ end
14
+ context "for non-admins" do
15
+ it 'does not have links to edit' do
16
+ allow(view).to receive(:current_user).and_return(FactoryGirl.create(:user))
17
+ allow(view).to receive(:can?).and_return(false)
18
+ render partial: 'shared/my_actions'
19
+ expect(rendered).not_to have_text("My Works")
20
+ expect(rendered).not_to have_text("My Collections")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+
3
+ describe VisibilityCopyWorker do
4
+
5
+ describe "an open access work" do
6
+ let(:work) { FactoryGirl.create(:work_with_files) }
7
+ subject { VisibilityCopyWorker.new(work.id) }
8
+
9
+ it "should have no content at the outset" do
10
+ expect(work.generic_files.first.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE
11
+ end
12
+
13
+ it "should copy visibility to its contained files" do
14
+ work.visibility = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC
15
+ work.save
16
+ subject.run
17
+ work.reload.generic_files.each do |file|
18
+ expect(file.visibility).to eq 'open'
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "an embargoed work" do
24
+ let(:work) { FactoryGirl.create(:embargoed_work_with_files) }
25
+ subject { VisibilityCopyWorker.new(work.id) }
26
+
27
+ before do
28
+ expect(work.visibility).to eq 'restricted'
29
+ expect(work).to be_under_embargo
30
+ expect(work.generic_files.first).to_not be_under_embargo
31
+ end
32
+
33
+ context "when run" do
34
+ before do
35
+ subject.run
36
+ work.reload
37
+ end
38
+ let(:file) { work.generic_files.first }
39
+
40
+ it "should copy visibility to its contained files" do
41
+ expect(file).to be_under_embargo
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "an leased work" do
47
+ let(:work) { FactoryGirl.create(:leased_work_with_files) }
48
+ subject { VisibilityCopyWorker.new(work.id) }
49
+
50
+ before do
51
+ expect(work.visibility).to eq 'open'
52
+ expect(work).to be_active_lease
53
+ expect(work.generic_files.first).to_not be_active_lease
54
+ end
55
+
56
+ context "when run" do
57
+ before do
58
+ subject.run
59
+ work.reload
60
+ end
61
+ let(:file) { work.generic_files.first }
62
+
63
+ it "should copy visibility to its contained files" do
64
+ expect(file).to be_active_lease
65
+ end
66
+ end
67
+ end
68
+ end