curation_concerns 1.3.3 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -1
- data/Gemfile +5 -0
- data/app/actors/curation_concerns/actors/actor_stack.rb +20 -4
- data/app/actors/curation_concerns/actors/base_actor.rb +1 -1
- data/app/assets/javascripts/curation_concerns/boot.es6 +6 -0
- data/app/assets/javascripts/curation_concerns/curation_concerns.js +5 -5
- data/app/assets/javascripts/curation_concerns/file_manager.es6 +41 -0
- data/app/assets/javascripts/curation_concerns/file_manager/member.es6 +2 -8
- data/app/assets/javascripts/curation_concerns/file_manager/save_manager.es6 +1 -3
- data/app/assets/javascripts/curation_concerns/file_manager/sorting.es6 +69 -75
- data/app/controllers/concerns/curation_concerns/collections_controller_behavior.rb +1 -1
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +3 -3
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +5 -7
- data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +6 -5
- data/app/models/concerns/curation_concerns/solr_document_behavior.rb +23 -4
- data/app/services/curation_concerns/time_service.rb +2 -1
- data/app/views/curation_concerns/file_sets/show.json.jbuilder +1 -1
- data/curation_concerns.gemspec +2 -1
- data/lib/curation_concerns/engine.rb +1 -0
- data/lib/curation_concerns/version.rb +1 -1
- data/solr/config/solrconfig.xml +26 -4
- data/spec/actors/curation_concerns/apply_order_actor_spec.rb +6 -4
- data/spec/actors/curation_concerns/file_set_actor_spec.rb +3 -3
- data/spec/actors/curation_concerns/work_actor_spec.rb +8 -7
- data/spec/controllers/catalog_controller_spec.rb +1 -1
- data/spec/controllers/curation_concerns/collections_controller_spec.rb +1 -1
- data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +29 -5
- data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +20 -4
- data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +3 -2
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +6 -1
- data/spec/factories/generic_works.rb +2 -2
- data/spec/features/create_work_spec.rb +1 -1
- data/spec/features/update_file_spec.rb +7 -0
- data/spec/features/work_generator_spec.rb +1 -1
- data/spec/models/collection_spec.rb +3 -3
- data/spec/models/curation_concerns/work_behavior_spec.rb +2 -1
- data/spec/models/file_set_spec.rb +2 -1
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +0 -1
- data/spec/services/file_set_audit_service_spec.rb +14 -0
- data/spec/services/graph_exporter_spec.rb +1 -1
- data/spec/spec_helper.rb +13 -0
- data/spec/support/helpers/controller_level_helpers.rb +27 -0
- data/spec/support/views/test_view_helpers.rb +10 -0
- data/spec/test_app_templates/Gemfile.extra +2 -0
- data/spec/views/catalog/index.html.erb_spec.rb +0 -3
- data/spec/views/curation_concerns/base/_form_rights_spec.rb +9 -7
- data/spec/views/curation_concerns/file_sets/show.json.jbuilder_spec.rb +6 -6
- metadata +24 -11
- 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
|
-
|
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
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
@@ -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
|
27
|
-
|
28
|
-
expect(rendered).
|
29
|
-
|
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
|
-
|
32
|
-
expect(rendered).to have_xpath('//
|
33
|
-
|
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(:
|
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
|
-
|
16
|
-
|
17
|
-
|
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.
|
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-
|
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:
|
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:
|
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
|
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
|
-
})
|