curation_concerns 1.3.3 → 1.4.0

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -1
  3. data/Gemfile +5 -0
  4. data/app/actors/curation_concerns/actors/actor_stack.rb +20 -4
  5. data/app/actors/curation_concerns/actors/base_actor.rb +1 -1
  6. data/app/assets/javascripts/curation_concerns/boot.es6 +6 -0
  7. data/app/assets/javascripts/curation_concerns/curation_concerns.js +5 -5
  8. data/app/assets/javascripts/curation_concerns/file_manager.es6 +41 -0
  9. data/app/assets/javascripts/curation_concerns/file_manager/member.es6 +2 -8
  10. data/app/assets/javascripts/curation_concerns/file_manager/save_manager.es6 +1 -3
  11. data/app/assets/javascripts/curation_concerns/file_manager/sorting.es6 +69 -75
  12. data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +1 -1
  13. data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +3 -3
  14. data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +5 -7
  15. data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +6 -5
  16. data/app/models/concerns/curation_concerns/solr_document_behavior.rb +23 -4
  17. data/app/services/curation_concerns/time_service.rb +2 -1
  18. data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -1
  19. data/curation_concerns.gemspec +2 -1
  20. data/lib/curation_concerns/engine.rb +1 -0
  21. data/lib/curation_concerns/version.rb +1 -1
  22. data/solr/config/solrconfig.xml +26 -4
  23. data/spec/actors/curation_concerns/apply_order_actor_spec.rb +6 -4
  24. data/spec/actors/curation_concerns/file_set_actor_spec.rb +3 -3
  25. data/spec/actors/curation_concerns/work_actor_spec.rb +8 -7
  26. data/spec/controllers/catalog_controller_spec.rb +1 -1
  27. data/spec/controllers/curation_concerns/collections_controller_spec.rb +1 -1
  28. data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +29 -5
  29. data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +20 -4
  30. data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +3 -2
  31. data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +6 -1
  32. data/spec/factories/generic_works.rb +2 -2
  33. data/spec/features/create_work_spec.rb +1 -1
  34. data/spec/features/update_file_spec.rb +7 -0
  35. data/spec/features/work_generator_spec.rb +1 -1
  36. data/spec/models/collection_spec.rb +3 -3
  37. data/spec/models/curation_concerns/work_behavior_spec.rb +2 -1
  38. data/spec/models/file_set_spec.rb +2 -1
  39. data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +0 -1
  40. data/spec/services/file_set_audit_service_spec.rb +14 -0
  41. data/spec/services/graph_exporter_spec.rb +1 -1
  42. data/spec/spec_helper.rb +13 -0
  43. data/spec/support/helpers/controller_level_helpers.rb +27 -0
  44. data/spec/support/views/test_view_helpers.rb +10 -0
  45. data/spec/test_app_templates/Gemfile.extra +2 -0
  46. data/spec/views/catalog/index.html.erb_spec.rb +0 -3
  47. data/spec/views/curation_concerns/base/_form_rights_spec.rb +9 -7
  48. data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +6 -6
  49. metadata +24 -11
  50. data/app/assets/javascripts/curation_concerns/file_manager/affix.es6 +0 -13
@@ -5,6 +5,13 @@ feature 'Editing attached files' do
5
5
  let!(:parent) { create(:work_with_one_file, user: user) }
6
6
  let!(:file_set) { parent.file_sets.first }
7
7
 
8
+ around do |example|
9
+ original_adapter = ActiveJob::Base.queue_adapter
10
+ ActiveJob::Base.queue_adapter = :inline
11
+ example.run
12
+ ActiveJob::Base.queue_adapter = original_adapter
13
+ end
14
+
8
15
  before do
9
16
  sign_in user
10
17
 
@@ -24,7 +24,7 @@ feature 'Creating a new Work' do
24
24
  sign_in user
25
25
 
26
26
  # stub out characterization. Travis doesn't have fits installed, and it's not relevant to the test.
27
- expect(CharacterizeJob).to receive(:perform_later)
27
+ allow(CharacterizeJob).to receive(:perform_later)
28
28
  redlock_client_stub
29
29
  end
30
30
 
@@ -65,7 +65,7 @@ describe Collection, type: :model do
65
65
  subject { described_class.create!(title: ['Some title'], members: [gf1, gf2]) { |c| c.apply_depositor_metadata(user) } }
66
66
 
67
67
  it "has many files" do
68
- expect(subject.reload.members).to eq [gf1, gf2]
68
+ expect(subject.reload.members).to match_array [gf1, gf2]
69
69
  end
70
70
  end
71
71
 
@@ -78,14 +78,14 @@ describe Collection, type: :model do
78
78
  subject.reload
79
79
  subject.members << gf2
80
80
  subject.save
81
- expect(subject.reload.members).to eq [gf1, gf2]
81
+ expect(subject.reload.members).to match_array [gf1, gf2]
82
82
  end
83
83
 
84
84
  it "allows multiple files to be added" do
85
85
  subject.reload
86
86
  subject.add_members [gf2.id, gf3.id]
87
87
  subject.save
88
- expect(subject.reload.members).to eq [gf1, gf2, gf3]
88
+ expect(subject.reload.members).to match_array [gf1, gf2, gf3]
89
89
  end
90
90
  end
91
91
  end
@@ -19,7 +19,8 @@ describe CurationConcerns::WorkBehavior do
19
19
  end
20
20
  describe '#to_s' do
21
21
  it 'uses the provided titles' do
22
- subject.title = %w(Hello World)
22
+ # The title property would return the terms in random order, so stub the behavior:
23
+ allow(subject).to receive(:title).and_return(%w(Hello World))
23
24
  expect(subject.to_s).to eq('Hello | World')
24
25
  end
25
26
  end
@@ -442,7 +442,8 @@ describe FileSet do
442
442
 
443
443
  describe '#to_s' do
444
444
  it 'uses the provided titles' do
445
- subject.title = %w(Hello World)
445
+ # The title property would return the terms in random order, so stub the behavior:
446
+ allow(subject).to receive(:title).and_return(%w(Hello World))
446
447
  expect(subject.to_s).to eq('Hello | World')
447
448
  end
448
449
 
@@ -77,7 +77,6 @@ describe CurationConcerns::WorkShowPresenter do
77
77
  let(:attributes) { obj.to_solr }
78
78
 
79
79
  it "displays them in order" do
80
- expect(obj.ordered_member_ids).not_to eq obj.member_ids
81
80
  expect(presenter.file_set_presenters.map(&:id)).to eq obj.ordered_member_ids
82
81
  end
83
82
 
@@ -42,6 +42,13 @@ describe CurationConcerns::FileSetAuditService do
42
42
  end
43
43
 
44
44
  context 'when no audit is pasing' do
45
+ around do |example|
46
+ original_adapter = ActiveJob::Base.queue_adapter
47
+ ActiveJob::Base.queue_adapter = :inline
48
+ example.run
49
+ ActiveJob::Base.queue_adapter = original_adapter
50
+ end
51
+
45
52
  before do
46
53
  CurationConcerns::VersioningService.create(f.original_file)
47
54
  ChecksumAuditLog.create!(pass: 1, file_set_id: f.id, version: f.original_file.versions.first.uri, file_id: 'original_file')
@@ -54,6 +61,13 @@ describe CurationConcerns::FileSetAuditService do
54
61
  end
55
62
 
56
63
  describe '#human_readable_audit_status' do
64
+ around do |example|
65
+ original_adapter = ActiveJob::Base.queue_adapter
66
+ ActiveJob::Base.queue_adapter = :inline
67
+ example.run
68
+ ActiveJob::Base.queue_adapter = original_adapter
69
+ end
70
+
57
71
  before do
58
72
  CurationConcerns::VersioningService.create(f.original_file)
59
73
  ChecksumAuditLog.create!(pass: 1, file_set_id: f.id, version: f.original_file.versions.first.uri, file_id: 'original_file')
@@ -10,7 +10,7 @@ RSpec.describe CurationConcerns::GraphExporter do
10
10
  subject { service.fetch }
11
11
  let(:ttl) { subject.dump(:ttl) }
12
12
  it "transforms suburis to hashcodes" do
13
- expect(ttl).to match %r{<http://localhost/concern/generic_works/#{work.id}> a <http://projecthydra\.org/works/models#Work>,}
13
+ expect(ttl).to match %r{<http://localhost/concern/generic_works/#{work.id}> a ([^;]*)<http://projecthydra\.org/works/models#Work>}
14
14
  expect(ttl).to match %r{<http://purl\.org/dc/terms/title> "Test title";}
15
15
  expect(ttl).to match %r{<http://www\.w3\.org/ns/auth/acl#accessControl> <http://localhost/catalog/}
16
16
 
@@ -81,9 +81,22 @@ RSpec.configure do |config|
81
81
  config.include Devise::TestHelpers, type: :controller
82
82
  config.include Devise::TestHelpers, type: :view
83
83
  end
84
+
85
+ config.include TestViewHelpers, type: :view
86
+
84
87
  config.include Warden::Test::Helpers, type: :feature
85
88
  config.after(:each, type: :feature) { Warden.test_reset! }
89
+
90
+ config.include(ControllerLevelHelpers, type: :helper)
91
+ config.before(:each, type: :helper) { initialize_controller_helpers(helper) }
92
+
93
+ config.include(ControllerLevelHelpers, type: :view)
94
+ config.before(:each, type: :view) { initialize_controller_helpers(view) }
95
+
86
96
  config.include Controllers::EngineHelpers, type: :controller
97
+ config.include Controllers::EngineHelpers, type: :helper
98
+ config.include ::Rails.application.routes.url_helpers
99
+
87
100
  config.include Rails.application.routes.url_helpers, type: :routing
88
101
  config.include Capybara::DSL
89
102
  config.include InputSupport, type: :input
@@ -0,0 +1,27 @@
1
+ module ControllerLevelHelpers
2
+ extend ActiveSupport::Concern
3
+ # def search_state
4
+ # @search_state ||= Blacklight::SearchState.new(params, blacklight_config)
5
+ # end
6
+
7
+ # def blacklight_configuration_context
8
+ # @blacklight_configuration_context ||= Blacklight::Configuration::Context.new(controller)
9
+ # end
10
+ #
11
+ included do
12
+ # fix for anonymous controllers (https://github.com/rspec/rspec-rails/issues/1321#issuecomment-239157093)
13
+ before { allow(controller).to receive(:_routes).and_return(Rails.application.routes) }
14
+ end
15
+
16
+ def initialize_controller_helpers(helper)
17
+ helper.extend ControllerLevelHelpers
18
+ initialize_routing_helpers(helper)
19
+ end
20
+
21
+ def initialize_routing_helpers(helper)
22
+ return unless Rails::VERSION::MAJOR >= 5
23
+
24
+ helper.class.include ::Rails.application.routes.url_helpers
25
+ helper.class.include ::Rails.application.routes.mounted_helpers if ::Rails.application.routes.respond_to?(:mounted_helpers)
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module TestViewHelpers
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before do
6
+ view.send(:extend, CurationConcerns::MainAppHelpers)
7
+ view.send(:extend, CatalogHelper)
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,7 @@
1
1
  # placeholder to use for pinning against specific gem commit references
2
2
 
3
+ gem 'breadcrumbs_on_rails', git: 'https://github.com/weppos/breadcrumbs_on_rails.git'
4
+
3
5
  group :development do
4
6
  gem 'better_errors'
5
7
  gem 'binding_of_caller'
@@ -34,9 +34,6 @@ describe 'catalog/index.html.erb' do
34
34
  allow(resp).to receive(:limit_value).and_return(10)
35
35
  allow(resp).to receive(:empty?).and_return(false)
36
36
 
37
- # This stubs out the SolrDocument#to_model
38
- allow(ActiveFedora::Base).to receive(:load_instance_from_solr).with('abc123', doc).and_return(collection)
39
-
40
37
  assign(:document_list, [doc])
41
38
  end
42
39
 
@@ -23,14 +23,16 @@ describe 'curation_concerns/base/_form_rights.html.erb' do
23
23
  render inline: form_template, locals: { curation_concern: curation_concern }
24
24
  end
25
25
 
26
- it 'will only include active values if the current value is active' do
27
- expect(rendered).not_to have_xpath('//div/ul/li[1]/select/option[@value="demo_id_04"]')
28
- expect(rendered).not_to have_xpath('//div/ul/li[1]/select/option[text()="Fourth is an Inactive Term"]')
29
- end
26
+ it 'will only include inactive values if the current value is inactive' do
27
+ # only one of the select boxes will have the inactive rights statement
28
+ expect(rendered).to have_xpath('//option[@value="demo_id_04"]', count: 1)
29
+ # and it will be the selected option.
30
+ expect(rendered).to have_xpath('//option[@value="demo_id_04" and @selected]', count: 1)
30
31
 
31
- it 'will always include the current value as an option' do
32
- expect(rendered).to have_xpath('//div/ul/li[2]/select/option[@value="demo_id_04" and @selected="selected"]')
33
- expect(rendered).to have_xpath('//div/ul/li[2]/select/option[text()="Fourth is an Inactive Term"]')
32
+ # the active values will be available in each select box
33
+ expect(rendered).to have_xpath('//option[@value="demo_id_01"]', count: 3)
34
+ # and one will be selected
35
+ expect(rendered).to have_xpath('//option[@value="demo_id_01" and @selected]', count: 1)
34
36
  end
35
37
 
36
38
  it 'only offers active values to add to a work' do
@@ -2,9 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe 'curation_concerns/file_sets/show.json.jbuilder' do
4
4
  let(:file_set) { create(:file_set) }
5
+ let(:solr_doc) { SolrDocument.new(file_set.to_solr) }
6
+ let(:presenter) { CurationConcerns::FileSetPresenter.new(solr_doc, nil) }
5
7
 
6
8
  before do
7
- assign(:file_set, file_set)
9
+ assign(:presenter, presenter)
8
10
  render
9
11
  end
10
12
 
@@ -12,10 +14,8 @@ describe 'curation_concerns/file_sets/show.json.jbuilder' do
12
14
  json = JSON.parse(rendered)
13
15
  expect(json['id']).to eq file_set.id
14
16
  expect(json['title']).to eq file_set.title
15
- expected_fields = file_set.class.fields.select { |f| ![:has_model, :create_date].include? f }
16
- expected_fields << :date_created
17
- expected_fields.each do |field_symbol|
18
- expect(json).to have_key(field_symbol.to_s)
19
- end
17
+ expect(json).to have_key('label')
18
+ expect(json).to have_key('description')
19
+ expect(json).to have_key('creator')
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curation_concerns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Zumwalt
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-08-11 00:00:00.000000000 Z
13
+ date: 2016-08-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: hydra-head
@@ -38,20 +38,14 @@ dependencies:
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 10.0.0
42
- - - "<"
43
- - !ruby/object:Gem::Version
44
- version: 11.a
41
+ version: 11.0.0.rc6
45
42
  type: :runtime
46
43
  prerelease: false
47
44
  version_requirements: !ruby/object:Gem::Requirement
48
45
  requirements:
49
46
  - - ">="
50
47
  - !ruby/object:Gem::Version
51
- version: 10.0.0
52
- - - "<"
53
- - !ruby/object:Gem::Version
54
- version: 11.a
48
+ version: 11.0.0.rc6
55
49
  - !ruby/object:Gem::Dependency
56
50
  name: blacklight
57
51
  requirement: !ruby/object:Gem::Requirement
@@ -496,6 +490,20 @@ dependencies:
496
490
  - - ">="
497
491
  - !ruby/object:Gem::Version
498
492
  version: '0'
493
+ - !ruby/object:Gem::Dependency
494
+ name: equivalent-xml
495
+ requirement: !ruby/object:Gem::Requirement
496
+ requirements:
497
+ - - ">="
498
+ - !ruby/object:Gem::Version
499
+ version: '0'
500
+ type: :development
501
+ prerelease: false
502
+ version_requirements: !ruby/object:Gem::Requirement
503
+ requirements:
504
+ - - ">="
505
+ - !ruby/object:Gem::Version
506
+ version: '0'
499
507
  - !ruby/object:Gem::Dependency
500
508
  name: rspec-activemodel-mocks
501
509
  requirement: !ruby/object:Gem::Requirement
@@ -681,12 +689,13 @@ files:
681
689
  - app/assets/javascripts/curation_concerns/.gitkeep
682
690
  - app/assets/javascripts/curation_concerns/application.js
683
691
  - app/assets/javascripts/curation_concerns/batch_select.js
692
+ - app/assets/javascripts/curation_concerns/boot.es6
684
693
  - app/assets/javascripts/curation_concerns/browse_everything_implement.js
685
694
  - app/assets/javascripts/curation_concerns/collections.js
686
695
  - app/assets/javascripts/curation_concerns/curation_concerns.js
687
696
  - app/assets/javascripts/curation_concerns/embargoes.js
688
697
  - app/assets/javascripts/curation_concerns/facet_mine.js
689
- - app/assets/javascripts/curation_concerns/file_manager/affix.es6
698
+ - app/assets/javascripts/curation_concerns/file_manager.es6
690
699
  - app/assets/javascripts/curation_concerns/file_manager/member.es6
691
700
  - app/assets/javascripts/curation_concerns/file_manager/save_manager.es6
692
701
  - app/assets/javascripts/curation_concerns/file_manager/sorting.es6
@@ -1240,12 +1249,14 @@ files:
1240
1249
  - spec/support/features.rb
1241
1250
  - spec/support/features/fixture_file_upload.rb
1242
1251
  - spec/support/features/session_helpers.rb
1252
+ - spec/support/helpers/controller_level_helpers.rb
1243
1253
  - spec/support/input_support.rb
1244
1254
  - spec/support/matchers/api_responses.rb
1245
1255
  - spec/support/rake_support.rb
1246
1256
  - spec/support/shared/shared_examples_has_dc_metadata.rb
1247
1257
  - spec/support/shared/shared_examples_is_embargoable.rb
1248
1258
  - spec/support/shared/shared_examples_with_access_rights.rb
1259
+ - spec/support/views/test_view_helpers.rb
1249
1260
  - spec/test_app_templates/Gemfile.extra
1250
1261
  - spec/test_app_templates/lib/generators/test_app_generator.rb
1251
1262
  - spec/views/catalog/_action_menu_partials/_default.html.erb_spec.rb
@@ -1450,12 +1461,14 @@ test_files:
1450
1461
  - spec/support/features.rb
1451
1462
  - spec/support/features/fixture_file_upload.rb
1452
1463
  - spec/support/features/session_helpers.rb
1464
+ - spec/support/helpers/controller_level_helpers.rb
1453
1465
  - spec/support/input_support.rb
1454
1466
  - spec/support/matchers/api_responses.rb
1455
1467
  - spec/support/rake_support.rb
1456
1468
  - spec/support/shared/shared_examples_has_dc_metadata.rb
1457
1469
  - spec/support/shared/shared_examples_is_embargoable.rb
1458
1470
  - spec/support/shared/shared_examples_with_access_rights.rb
1471
+ - spec/support/views/test_view_helpers.rb
1459
1472
  - spec/test_app_templates/Gemfile.extra
1460
1473
  - spec/test_app_templates/lib/generators/test_app_generator.rb
1461
1474
  - spec/views/catalog/_action_menu_partials/_default.html.erb_spec.rb
@@ -1,13 +0,0 @@
1
- Blacklight.onLoad(function() {
2
- let tools = $("#file-manager-tools")
3
- if(tools.length > 0) {
4
- tools.affix({
5
- offset: {
6
- top: $("#file-manager-tools .actions").offset().top,
7
- bottom: function() {
8
- return $("#file-manager-extra-tools").outerHeight(true) + $("footer").outerHeight(true)
9
- }
10
- }
11
- })
12
- }
13
- })