curation_concerns 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +1 -2
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/app/assets/javascripts/curation_concerns/curation_concerns.js +2 -0
- data/app/assets/javascripts/curation_concerns/uploader.js +4 -4
- data/app/assets/stylesheets/curation_concerns/_modules.scss +1 -0
- data/app/assets/stylesheets/curation_concerns/_positioning.scss +3 -0
- data/app/assets/stylesheets/curation_concerns/modules/icons.scss +11 -0
- data/app/controllers/concerns/curation_concerns/api.rb +1 -12
- data/app/controllers/concerns/curation_concerns/application_controller_behavior.rb +20 -6
- data/app/controllers/concerns/curation_concerns/curation_concern_controller.rb +44 -25
- data/app/controllers/concerns/curation_concerns/file_sets_controller_behavior.rb +32 -23
- data/app/controllers/concerns/curation_concerns/parent_container.rb +0 -11
- data/app/controllers/concerns/curation_concerns/single_use_links_controller_behavior.rb +1 -1
- data/app/controllers/concerns/curation_concerns/single_use_links_viewer_controller_behavior.rb +7 -1
- data/app/controllers/concerns/curation_concerns/upload_sets_controller_behavior.rb +19 -7
- data/app/controllers/curation_concerns/permissions_controller.rb +1 -1
- data/app/forms/curation_concerns/forms/collection_edit_form.rb +6 -2
- data/app/forms/curation_concerns/forms/work_form.rb +14 -3
- data/app/forms/curation_concerns/upload_set_form.rb +43 -0
- data/app/helpers/curation_concerns/ability_helper.rb +12 -18
- data/app/helpers/curation_concerns/file_set_helper.rb +1 -1
- data/app/helpers/curation_concerns/main_app_helpers.rb +1 -0
- data/app/helpers/curation_concerns/permissions_helper.rb +20 -0
- data/app/helpers/curation_concerns/url_helper.rb +3 -11
- data/app/inputs/multi_value_with_help_input.rb +8 -0
- data/app/inputs/select_with_help_input.rb +3 -0
- data/app/inputs/select_with_modal_help_input.rb +36 -0
- data/app/inputs/with_help_icon.rb +34 -0
- data/app/presenters/curation_concerns/collection_presenter.rb +9 -0
- data/app/presenters/curation_concerns/file_set_presenter.rb +2 -1
- data/app/presenters/curation_concerns/presents_attributes.rb +16 -0
- data/app/presenters/curation_concerns/work_show_presenter.rb +3 -2
- data/app/renderers/curation_concerns/attribute_renderer.rb +22 -4
- data/app/renderers/curation_concerns/configured_microdata.rb +40 -0
- data/app/services/curation_concerns/parent_service.rb +1 -1
- data/app/views/catalog/_action_menu_partials/_default.html.erb +2 -2
- data/app/views/collections/_form.html.erb +8 -9
- data/app/views/collections/_sort_and_per_page.html.erb +25 -23
- data/app/views/collections/show.html.erb +1 -1
- data/app/views/curation_concerns/base/_attributes.html.erb +1 -1
- data/app/views/curation_concerns/base/_form.html.erb +6 -7
- data/app/views/curation_concerns/base/_form_permission.html.erb +3 -0
- data/app/views/curation_concerns/base/_multiple_upload.html.erb +3 -0
- data/app/views/curation_concerns/base/_show_actions.html.erb +2 -2
- data/app/views/curation_concerns/base/_versioning.html.erb +1 -1
- data/app/views/curation_concerns/base/_visibility.html.erb +17 -0
- data/app/views/curation_concerns/base/show.html.erb +1 -1
- data/app/views/curation_concerns/classify_concerns/new.html.erb +1 -1
- data/app/views/curation_concerns/file_sets/_actions.html.erb +2 -2
- data/app/views/curation_concerns/file_sets/_form.html.erb +1 -1
- data/app/views/curation_concerns/file_sets/_rights_modal.html.erb +41 -0
- data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +4 -1
- data/app/views/curation_concerns/file_sets/media_display/_image.html.erb +9 -8
- data/app/views/curation_concerns/file_sets/media_display/_office_document.html.erb +9 -7
- data/app/views/curation_concerns/file_sets/media_display/_pdf.html.erb +7 -5
- data/app/views/curation_concerns/file_sets/show.html.erb +2 -2
- data/app/views/curation_concerns/file_sets/upload/_alerts.html.erb +3 -3
- data/app/views/curation_concerns/file_sets/upload/_form.html.erb +1 -1
- data/app/views/curation_concerns/file_sets/upload/_script_templates.html.erb +1 -1
- data/app/views/curation_concerns/permissions/confirm.html.erb +1 -1
- data/app/views/curation_concerns/single_use_links_viewer/show.html.erb +1 -1
- data/app/views/embargoes/edit.html.erb +4 -4
- data/app/views/layouts/curation_concerns.html.erb +1 -1
- data/app/views/leases/edit.html.erb +3 -3
- data/app/views/shared/_add_works.html.erb +6 -3
- data/app/views/upload_sets/_base_metadata.html.erb +12 -0
- data/app/views/upload_sets/_metadata.html.erb +3 -13
- data/app/views/upload_sets/edit.html.erb +1 -1
- data/config/locales/curation_concerns.en.yml +46 -0
- data/curation_concerns.gemspec +5 -4
- data/lib/curation_concerns/engine.rb +5 -0
- data/lib/curation_concerns/form_builder.rb +16 -0
- data/lib/curation_concerns/rails/routes.rb +7 -5
- data/lib/generators/curation_concerns/install_generator.rb +1 -1
- data/lib/generators/curation_concerns/work/work_generator.rb +1 -1
- data/spec/actors/curation_concerns/file_set_actor_spec.rb +26 -16
- data/spec/controllers/curation_concerns/file_sets_controller_json_spec.rb +14 -4
- data/spec/controllers/curation_concerns/file_sets_controller_spec.rb +3 -3
- data/spec/controllers/curation_concerns/generic_works_controller_json_spec.rb +4 -4
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +21 -0
- data/spec/controllers/curation_concerns/single_use_links_controller_spec.rb +2 -2
- data/spec/controllers/curation_concerns/single_use_links_viewer_controller_spec.rb +1 -1
- data/spec/controllers/upload_sets_controller_spec.rb +20 -27
- data/spec/factories/file_sets.rb +1 -0
- data/spec/factories/generic_works.rb +1 -0
- data/spec/factories/users.rb +0 -12
- data/spec/features/collection_spec.rb +1 -3
- data/spec/forms/collection_edit_form_spec.rb +16 -1
- data/spec/forms/upload_set_form_spec.rb +55 -0
- data/spec/forms/work_form_spec.rb +68 -3
- data/spec/helpers/curation_concerns/ability_helper_spec.rb +45 -0
- data/spec/helpers/curation_concerns/permissions_helper_spec.rb +12 -0
- data/spec/helpers/url_helper_spec.rb +0 -3
- data/spec/indexers/collection_indexer_spec.rb +5 -0
- data/spec/indexers/{file_set_indexing_service_spec.rb → file_set_indexer_spec.rb} +40 -2
- data/spec/indexers/{generic_work_indexing_service_spec.rb → work_indexer_spec.rb} +1 -1
- data/spec/inputs/multi_value_with_help_input_spec.rb +32 -0
- data/spec/inputs/select_with_help_input_spec.rb +43 -0
- data/spec/inputs/select_with_modal_help_input_spec.rb +21 -0
- data/spec/jobs/import_url_job_spec.rb +33 -1
- data/spec/jobs/ingest_file_job_spec.rb +29 -16
- data/spec/jobs/upload_set_update_job_spec.rb +24 -11
- data/spec/lib/curation_concerns/messages_spec.rb +2 -2
- data/spec/lib/curation_concerns/name_spec.rb +20 -0
- data/spec/lib/curation_concerns/null_logger_spec.rb +10 -0
- data/spec/models/curation_concerns/collection_behavior_spec.rb +41 -10
- data/spec/models/curation_concerns/work_behavior_spec.rb +1 -13
- data/spec/models/file_set_spec.rb +19 -4
- data/spec/models/generic_work_spec.rb +7 -2
- data/spec/models/quick_classification_query_spec.rb +35 -0
- data/spec/models/upload_set_spec.rb +5 -7
- data/spec/presenters/curation_concerns/collection_presenter_spec.rb +20 -0
- data/spec/presenters/curation_concerns/file_set_presenter_spec.rb +10 -3
- data/spec/presenters/curation_concerns/work_show_presenter_spec.rb +13 -1
- data/spec/renderers/curation_concerns/attribute_renderer_spec.rb +41 -8
- data/spec/routing/curation_concerns/routes_spec.rb +2 -2
- data/spec/routing/route_spec.rb +1 -1
- data/spec/services/file_set_audit_service_spec.rb +46 -4
- data/spec/spec_helper.rb +5 -7
- data/spec/views/collections/_sort_and_per_page.html.erb_spec.rb +32 -0
- data/spec/views/curation_concerns/base/_attributes.html.erb_spec.rb +8 -1
- data/spec/views/curation_concerns/base/show.html.erb_spec.rb +36 -2
- data/spec/views/curation_concerns/file_sets/_file_set.html.erb_spec.rb +3 -2
- data/spec/views/curation_concerns/file_sets/show.html.erb_spec.rb +56 -0
- data/spec/views/curation_concerns/single_use_links_viewer/show.html.erb_spec.rb +19 -0
- data/spec/views/shared/_add_content.html.erb_spec.rb +3 -3
- data/spec/views/single_use_links/new_download.html.erb_spec.rb +1 -1
- data/spec/views/upload_sets/_metadata.html.erb_spec.rb +28 -0
- metadata +80 -50
- data/app/assets/stylesheets/curation_concerns/help_requests.scss +0 -3
- data/app/controllers/concerns/curation_concerns/without_namespace.rb +0 -16
- data/app/controllers/registrations_controller.rb +0 -19
- data/app/controllers/sessions_controller.rb +0 -4
- data/app/views/curation_concerns/file_sets/_multiple_upload.html.erb +0 -3
- data/spec/fixtures/Example.ogg +0 -0
- data/spec/fixtures/charter.docx +0 -0
- data/spec/fixtures/countdown.avi +0 -0
- data/spec/fixtures/curation_concerns_generic_stub.txt +0 -1
- data/spec/fixtures/empty_file.txt +0 -0
- data/spec/fixtures/files/image.png +0 -0
- data/spec/fixtures/image.jp2 +0 -0
- data/spec/fixtures/image.jpg +0 -0
- data/spec/fixtures/piano_note.wav +0 -0
- data/spec/fixtures/sample_mpeg4.mp4 +0 -0
- data/spec/fixtures/small_file.txt +0 -1
- data/spec/fixtures/spoken-text.m4a +0 -0
- data/spec/fixtures/test.pdf +0 -0
- data/spec/fixtures/test4.pdf +0 -0
- data/spec/fixtures/test5.mp3 +0 -0
- data/spec/fixtures/world.png +0 -0
@@ -1,28 +1,26 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe UploadSet do
|
4
|
-
let(:user) {
|
5
|
-
let(:upload_set) { described_class.create(title: ["test collection"]
|
4
|
+
let(:user) { create(:user) }
|
5
|
+
let(:upload_set) { described_class.create(title: ["test collection"]) }
|
6
6
|
subject { upload_set }
|
7
7
|
|
8
8
|
it "has dc metadata" do
|
9
|
-
expect(subject.creator).to eq [user.user_key]
|
10
9
|
expect(subject.title).to eq ["test collection"]
|
11
10
|
end
|
12
11
|
|
13
|
-
it "responds to
|
14
|
-
expect(subject).to respond_to(:
|
12
|
+
it "responds to #works" do
|
13
|
+
expect(subject).to respond_to(:works)
|
15
14
|
end
|
16
15
|
|
17
16
|
it "supports to_solr" do
|
18
17
|
expect(subject.to_solr).to_not be_nil
|
19
18
|
expect(subject.to_solr["upload_set__title_t"]).to be_nil
|
20
|
-
expect(subject.to_solr["upload_set__creator_t"]).to be_nil
|
21
19
|
end
|
22
20
|
|
23
21
|
describe "find_or_create" do
|
24
22
|
describe "when the object exists" do
|
25
|
-
let!(:upload_set) { described_class.create(title: ["test collection"]
|
23
|
+
let!(:upload_set) { described_class.create(title: ["test collection"]) }
|
26
24
|
it "finds upload_set instead of creating" do
|
27
25
|
expect(described_class).to_not receive(:create)
|
28
26
|
described_class.find_or_create(subject.id)
|
@@ -2,10 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe CurationConcerns::CollectionPresenter do
|
4
4
|
let(:collection) { Collection.new(id: 'adc12v', description: 'a nice collection', title: 'A clever title') }
|
5
|
+
let(:work) { FactoryGirl.build(:work, title: ['unimaginitive title']) }
|
5
6
|
let(:solr_document) { SolrDocument.new(collection.to_solr) }
|
6
7
|
let(:ability) { double }
|
7
8
|
let(:presenter) { described_class.new(solr_document, ability) }
|
8
9
|
|
10
|
+
# Mock bytes so collection does not have to be saved.
|
11
|
+
before { allow(collection).to receive(:bytes).and_return(0) }
|
12
|
+
|
9
13
|
describe '#title' do
|
10
14
|
subject { presenter.title }
|
11
15
|
it { is_expected.to eq 'A clever title' }
|
@@ -15,4 +19,20 @@ describe CurationConcerns::CollectionPresenter do
|
|
15
19
|
subject { presenter.to_key }
|
16
20
|
it { is_expected.to eq ['adc12v'] }
|
17
21
|
end
|
22
|
+
|
23
|
+
describe "#size" do
|
24
|
+
subject { presenter.size }
|
25
|
+
it { is_expected.to eq '0 Bytes' }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#total_items" do
|
29
|
+
subject { presenter.total_items }
|
30
|
+
context "empty collection" do
|
31
|
+
it { is_expected.to eq 0 }
|
32
|
+
end
|
33
|
+
context "collection with work" do
|
34
|
+
before { collection.members << work }
|
35
|
+
it { is_expected.to eq 1 }
|
36
|
+
end
|
37
|
+
end
|
18
38
|
end
|
@@ -43,10 +43,17 @@ describe CurationConcerns::FileSetPresenter do
|
|
43
43
|
it { is_expected.to eq 'File Set' }
|
44
44
|
end
|
45
45
|
|
46
|
-
describe "
|
46
|
+
describe "properties delegated to solr_document" do
|
47
|
+
let(:solr_properties) do
|
48
|
+
["date_uploaded", "depositor", "tags", "title_or_label",
|
49
|
+
"contributor", "creator", "title", "description", "publisher",
|
50
|
+
"subject", "language", "rights"]
|
51
|
+
end
|
47
52
|
it "delegates to the solr_document" do
|
48
|
-
|
49
|
-
|
53
|
+
solr_properties.each do |property|
|
54
|
+
expect(solr_document).to receive(property.to_sym)
|
55
|
+
presenter.send(property)
|
56
|
+
end
|
50
57
|
end
|
51
58
|
end
|
52
59
|
|
@@ -2,10 +2,15 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe CurationConcerns::WorkShowPresenter do
|
4
4
|
let(:solr_document) { SolrDocument.new(attributes) }
|
5
|
+
let(:date_value) { Date.today }
|
6
|
+
let(:date_index) { date_value.to_s }
|
5
7
|
let(:attributes) do
|
6
8
|
{ "title_tesim" => ["foo bar"],
|
7
9
|
"human_readable_type_tesim" => ["Generic Work"],
|
8
|
-
"has_model_ssim" => ["GenericWork"]
|
10
|
+
"has_model_ssim" => ["GenericWork"],
|
11
|
+
"date_created_dtsi" => date_index,
|
12
|
+
"date_modified_dtsi" => date_index,
|
13
|
+
"date_uploaded_dtsi" => date_index }
|
9
14
|
end
|
10
15
|
|
11
16
|
let(:ability) { nil }
|
@@ -26,6 +31,13 @@ describe CurationConcerns::WorkShowPresenter do
|
|
26
31
|
it { is_expected.to be_kind_of ActiveModel::Name }
|
27
32
|
end
|
28
33
|
|
34
|
+
[:date_created, :date_modified, :date_uploaded].each do |date_field|
|
35
|
+
describe "##{date_field}" do
|
36
|
+
subject { presenter.send date_field }
|
37
|
+
it { is_expected.to eq date_value.to_formatted_s(:standard) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
29
41
|
describe "#permission_badge" do
|
30
42
|
it "calls the PermissionBadge object" do
|
31
43
|
expect_any_instance_of(CurationConcerns::PermissionBadge).to receive(:render)
|
@@ -1,14 +1,47 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe CurationConcerns::AttributeRenderer do
|
4
|
-
let(:
|
5
|
-
|
4
|
+
let(:field) { :name }
|
5
|
+
let(:renderer) { described_class.new(field, ['Bob', 'Jessica']) }
|
6
|
+
let(:yml_path) { File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'locales', '*.{rb,yml}') }
|
7
|
+
before do
|
8
|
+
I18n.load_path += Dir[File.join(yml_path)]
|
9
|
+
I18n.reload!
|
10
|
+
end
|
11
|
+
after do
|
12
|
+
I18n.load_path -= Dir[File.join(yml_path)]
|
13
|
+
I18n.reload!
|
14
|
+
end
|
6
15
|
describe "#attribute_to_html" do
|
7
|
-
subject { renderer.render }
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
subject { Nokogiri::HTML(renderer.render) }
|
17
|
+
let(:expected) { Nokogiri::HTML(tr_content) }
|
18
|
+
context 'without microdata enabled' do
|
19
|
+
before do
|
20
|
+
CurationConcerns.config.display_microdata = false
|
21
|
+
end
|
22
|
+
let(:tr_content) {
|
23
|
+
"<tr><th>Name</th>\n" \
|
24
|
+
"<td><ul class='tabular'><li class=\"attribute name\"><span>Bob</span></li>\n" \
|
25
|
+
"<li class=\"attribute name\"><span>Jessica</span></li>\n" \
|
26
|
+
"</ul></td></tr>"
|
27
|
+
}
|
28
|
+
it { expect(renderer).not_to be_microdata(field) }
|
29
|
+
it { expect(subject).to be_equivalent_to(expected) }
|
30
|
+
end
|
31
|
+
context 'with microdata enabled' do
|
32
|
+
before do
|
33
|
+
CurationConcerns.config.display_microdata = true
|
34
|
+
end
|
35
|
+
let(:tr_content) {
|
36
|
+
"<tr><th>Name</th>\n" \
|
37
|
+
"<td><ul class='tabular'><li class=\"attribute name\" itemscope itemtype=\"http://schema.org/Person\" itemprop=\"name\">" \
|
38
|
+
"<span itemprop=\"firstName\">Bob</span></li>\n" \
|
39
|
+
"<li class=\"attribute name\" itemscope itemtype=\"http://schema.org/Person\" itemprop=\"name\">" \
|
40
|
+
"<span itemprop=\"firstName\">Jessica</span></li>\n" \
|
41
|
+
"</ul></td></tr>"
|
42
|
+
}
|
43
|
+
it { expect(renderer).to be_microdata(field) }
|
44
|
+
it { expect(subject).to be_equivalent_to(expected) }
|
45
|
+
end
|
13
46
|
end
|
14
47
|
end
|
@@ -50,12 +50,12 @@ module CurationConcerns
|
|
50
50
|
it 'routes to #show' do
|
51
51
|
expect(curation_concerns_generic_work_path(generic_work)).to eq "/concern/generic_works/#{generic_work.id}"
|
52
52
|
expect(get("/concern/generic_works/#{generic_work.id}")).to route_to(controller: 'curation_concerns/generic_works', action: 'show', id: generic_work.id)
|
53
|
-
expect(url_for([
|
53
|
+
expect(url_for([generic_work, only_path: true])).to eq "/concern/generic_works/#{generic_work.id}"
|
54
54
|
end
|
55
55
|
it 'routes to #edit' do
|
56
56
|
expect(edit_curation_concerns_generic_work_path(generic_work)).to eq "/concern/generic_works/#{generic_work.id}/edit"
|
57
57
|
expect(get("/concern/generic_works/#{generic_work.id}/edit")).to route_to(controller: 'curation_concerns/generic_works', action: 'edit', id: generic_work.id)
|
58
|
-
expect(url_for([:edit,
|
58
|
+
expect(url_for([:edit, generic_work, only_path: true])).to eq "/concern/generic_works/#{generic_work.id}/edit"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
data/spec/routing/route_spec.rb
CHANGED
@@ -47,7 +47,7 @@ describe 'Routes', type: :routing do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
describe '
|
50
|
+
describe 'FileSet' do
|
51
51
|
it 'routes to create' do
|
52
52
|
expect(post: 'concern/container/1/file_sets').to route_to(controller: 'curation_concerns/file_sets', action: 'create', parent_id: '1')
|
53
53
|
end
|
@@ -53,19 +53,61 @@ describe CurationConcerns::FileSetAuditService do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
describe '#human_readable_audit_status' do
|
56
|
+
before do
|
57
|
+
CurationConcerns::VersioningService.create(f.original_file)
|
58
|
+
ChecksumAuditLog.create!(pass: 1, file_set_id: f.id, version: f.original_file.versions.first.uri, file_id: 'original_file')
|
59
|
+
end
|
60
|
+
subject { service.human_readable_audit_status }
|
61
|
+
it { is_expected.to eq 'Some audits have not been run, but the ones run were passing.' }
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#logged_audit_status' do
|
65
|
+
subject { service.logged_audit_status }
|
66
|
+
|
67
|
+
it "doesn't trigger audits" do
|
68
|
+
expect(service).not_to receive(:audit_file)
|
69
|
+
expect(subject).to eq "Audits have not yet been run on this file."
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when no audit is passing" do
|
73
|
+
before do
|
74
|
+
ChecksumAuditLog.create!(pass: 1, file_set_id: f.id, version: f.original_file.versions.first.label, file_id: 'original_file')
|
75
|
+
end
|
76
|
+
|
77
|
+
it "reports the audit result" do
|
78
|
+
expect(subject).to eq 'passing'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "when one audit is passing" do
|
83
|
+
before do
|
84
|
+
ChecksumAuditLog.create!(pass: 0, file_set_id: f.id, version: f.original_file.versions.first.label, file_id: 'original_file')
|
85
|
+
ChecksumAuditLog.create!(pass: 1, file_set_id: f.id, version: f.original_file.versions.first.label, file_id: 'original_file')
|
86
|
+
end
|
87
|
+
|
88
|
+
it "reports the audit result" do
|
89
|
+
expect(subject).to eq 'failing'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '#stat_to_string' do
|
95
|
+
subject { service.send(:stat_to_string, val) }
|
56
96
|
context 'when audit_stat is 0' do
|
57
|
-
|
97
|
+
let(:val) { 0 }
|
58
98
|
it { is_expected.to eq 'failing' }
|
59
99
|
end
|
60
100
|
|
61
101
|
context 'when audit_stat is 1' do
|
62
|
-
|
102
|
+
let(:val) { 1 }
|
63
103
|
it { is_expected.to eq 'passing' }
|
64
104
|
end
|
65
105
|
|
66
106
|
context 'when audit_stat is something else' do
|
67
|
-
|
68
|
-
it
|
107
|
+
let(:val) { 'something else' }
|
108
|
+
it "fails" do
|
109
|
+
expect { subject }.to raise_error ArgumentError, "Unknown status `something else'"
|
110
|
+
end
|
69
111
|
end
|
70
112
|
end
|
71
113
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,7 +10,10 @@ require 'database_cleaner'
|
|
10
10
|
require 'engine_cart'
|
11
11
|
EngineCart.load_application!
|
12
12
|
require 'devise'
|
13
|
+
require 'mida'
|
13
14
|
|
15
|
+
require 'rspec/matchers'
|
16
|
+
require 'equivalent-xml/rspec_matchers'
|
14
17
|
require 'rspec/its'
|
15
18
|
require 'rspec/rails'
|
16
19
|
require 'rspec/active_model/mocks'
|
@@ -29,6 +32,8 @@ if ENV['COVERAGE'] || $in_travis
|
|
29
32
|
SimpleCov.formatter = Coveralls::SimpleCov::Formatter
|
30
33
|
SimpleCov.start('rails') do
|
31
34
|
add_filter '/spec'
|
35
|
+
add_filter '/lib/generators/curation_concerns/templates'
|
36
|
+
add_filter '/.internal_test_app'
|
32
37
|
end
|
33
38
|
SimpleCov.command_name('spec')
|
34
39
|
end
|
@@ -79,13 +84,6 @@ RSpec.configure do |config|
|
|
79
84
|
config.deprecation_stream
|
80
85
|
end
|
81
86
|
|
82
|
-
module FactoryGirl
|
83
|
-
def self.find_or_create(handle, by = :email)
|
84
|
-
tmpl = FactoryGirl.build(handle)
|
85
|
-
tmpl.class.send("find_by_#{by}".to_sym, tmpl.send(by)) || FactoryGirl.create(handle)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
87
|
if defined?(ClamAV)
|
90
88
|
ClamAV.instance.loaddb
|
91
89
|
else
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'collections/_sort_and_per_page.html.erb' do
|
4
|
+
let(:collection) { double }
|
5
|
+
let(:response) { double(response: { 'numFound' => 3 }) }
|
6
|
+
|
7
|
+
before do
|
8
|
+
allow(view).to receive(:sort_fields).and_return(['title_sort', 'date_sort'])
|
9
|
+
allow(view).to receive(:document_index_views).and_return(list: Blacklight::Configuration::ViewConfig.new)
|
10
|
+
assign(:response, response)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when the action is edit" do
|
14
|
+
before do
|
15
|
+
controller.action_name = "edit"
|
16
|
+
end
|
17
|
+
it "renders the form with a button" do
|
18
|
+
expect(view).to receive(:button_for_remove_selected_from_collection).with(collection)
|
19
|
+
render 'collections/sort_and_per_page', collection: collection
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when the action is show" do
|
24
|
+
before do
|
25
|
+
controller.action_name = "show"
|
26
|
+
end
|
27
|
+
it "renders the form without a button" do
|
28
|
+
expect(view).not_to receive(:button_for_remove_selected_from_collection)
|
29
|
+
render 'collections/sort_and_per_page', collection: collection
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -4,14 +4,17 @@ describe 'curation_concerns/base/_attributes.html.erb' do
|
|
4
4
|
let(:creator) { 'Bilbo' }
|
5
5
|
let(:contributor) { 'Frodo' }
|
6
6
|
let(:subject) { 'history' }
|
7
|
+
let(:description) { ['Lorem ipsum lorem ipsum. http://my.link.com'] }
|
7
8
|
|
8
9
|
let(:solr_document) { SolrDocument.new(subject_tesim: subject,
|
9
10
|
contributor_tesim: contributor,
|
10
|
-
creator_tesim: creator
|
11
|
+
creator_tesim: creator,
|
12
|
+
description_tesim: description) }
|
11
13
|
let(:ability) { nil }
|
12
14
|
let(:presenter) do
|
13
15
|
CurationConcerns::WorkShowPresenter.new(solr_document, ability)
|
14
16
|
end
|
17
|
+
let(:doc) { Nokogiri::HTML(rendered) }
|
15
18
|
|
16
19
|
before do
|
17
20
|
allow(view).to receive(:dom_class) { '' }
|
@@ -25,4 +28,8 @@ describe 'curation_concerns/base/_attributes.html.erb' do
|
|
25
28
|
expect(rendered).to have_link(contributor, href: catalog_index_path(search_field: 'contributor', q: contributor))
|
26
29
|
expect(rendered).to have_link(subject, href: catalog_index_path(search_field: 'subject', q: subject))
|
27
30
|
end
|
31
|
+
it 'shows links in the description' do
|
32
|
+
a1 = doc.xpath("//li[@class='attribute description']/span/a").text
|
33
|
+
expect(a1).to start_with 'http://my.link.com'
|
34
|
+
end
|
28
35
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'curation_concerns/base/show.html.erb' do
|
4
4
|
let(:object_profile) { ["{\"id\":\"999\"}"] }
|
5
|
-
let(:contributor) { 'Frodo' }
|
5
|
+
let(:contributor) { ['Frodo', 'Sam'] }
|
6
6
|
let(:creator) { 'Bilbo' }
|
7
7
|
let(:solr_document) {
|
8
8
|
SolrDocument.new(
|
@@ -12,6 +12,7 @@ describe 'curation_concerns/base/show.html.erb' do
|
|
12
12
|
human_readable_type_tesim: ['Generic Work'],
|
13
13
|
contributor_tesim: contributor,
|
14
14
|
creator_tesim: creator,
|
15
|
+
language_tesim: 'Hobbish',
|
15
16
|
rights_tesim: ['http://creativecommons.org/licenses/by/3.0/us/']
|
16
17
|
)
|
17
18
|
}
|
@@ -31,7 +32,7 @@ describe 'curation_concerns/base/show.html.erb' do
|
|
31
32
|
|
32
33
|
it 'draws the page' do
|
33
34
|
expect(rendered).to have_link 'Attribution 3.0 United States', href: 'http://creativecommons.org/licenses/by/3.0/us/'
|
34
|
-
expect(rendered).to have_link 'Edit This Generic Work', href: edit_polymorphic_path(
|
35
|
+
expect(rendered).to have_link 'Edit This Generic Work', href: edit_polymorphic_path(presenter)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
@@ -46,4 +47,37 @@ describe 'curation_concerns/base/show.html.erb' do
|
|
46
47
|
expect(rendered).not_to have_content('Edit this Generic Work')
|
47
48
|
end
|
48
49
|
end
|
50
|
+
|
51
|
+
describe 'schema.org' do
|
52
|
+
before do
|
53
|
+
assign(:presenter, presenter)
|
54
|
+
allow(view).to receive(:can?).with(:edit, String).and_return(false)
|
55
|
+
allow(view).to receive(:can?).with(:collect, String).and_return(false)
|
56
|
+
render
|
57
|
+
end
|
58
|
+
let(:item) { Mida::Document.new("<html>#{rendered}</html>").items.first }
|
59
|
+
describe 'descriptive metadata' do
|
60
|
+
it 'draws schema.org fields' do
|
61
|
+
# default itemtype to CreativeWork
|
62
|
+
expect(item.type).to eq('http://schema.org/CreativeWork')
|
63
|
+
|
64
|
+
contributors = item.properties['contributor']
|
65
|
+
expect(contributors.count).to eq(2)
|
66
|
+
contributor = contributors.last
|
67
|
+
expect(contributor.type).to eq('http://schema.org/Person')
|
68
|
+
expect(contributor.properties['name'].first).to eq('Sam')
|
69
|
+
|
70
|
+
creators = item.properties['creator']
|
71
|
+
expect(creators.count).to eq(1)
|
72
|
+
creator = creators.first
|
73
|
+
expect(creator.type).to eq('http://schema.org/Person')
|
74
|
+
expect(creator.properties['name'].first).to eq('Bilbo')
|
75
|
+
|
76
|
+
languages = item.properties['inLanguage']
|
77
|
+
expect(languages.count).to eq(1)
|
78
|
+
language = languages.first
|
79
|
+
expect(language).to eq('Hobbish')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
49
83
|
end
|
@@ -3,6 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe 'curation_concerns/file_sets/_file_set.html.erb' do
|
4
4
|
let(:solr_document) { SolrDocument.new(id: '999',
|
5
5
|
has_model_ssim: ['FileSet'],
|
6
|
+
active_fedora_model_ssi: 'FileSet',
|
6
7
|
thumbnail_path_ss: '/downloads/999?file=thumbnail',
|
7
8
|
representative_tesim: ["999"],
|
8
9
|
title_tesim: ["My File"]) }
|
@@ -28,9 +29,9 @@ describe 'curation_concerns/file_sets/_file_set.html.erb' do
|
|
28
29
|
expect(rendered).to have_selector ".thumbnail img[src='#{download_path(presenter, file: 'thumbnail')}']"
|
29
30
|
|
30
31
|
# Action buttons
|
31
|
-
expect(rendered).to have_selector "a[title=\"Edit My File\"][href='#{edit_polymorphic_path(
|
32
|
+
expect(rendered).to have_selector "a[title=\"Edit My File\"][href='#{edit_polymorphic_path(presenter)}']", text: 'Edit'
|
32
33
|
expect(rendered).to have_selector "a[title=\"Rollback to previous version\"][href='#{versions_curation_concerns_file_set_path(presenter)}']", text: 'Rollback'
|
33
|
-
expect(rendered).to have_selector "a[title=\"Delete My File\"][data-method='delete'][href='#{polymorphic_path(
|
34
|
+
expect(rendered).to have_selector "a[title=\"Delete My File\"][data-method='delete'][href='#{polymorphic_path(presenter)}']", text: 'Delete'
|
34
35
|
expect(rendered).to have_link('Download')
|
35
36
|
expect(rendered).to have_selector "a[title='Download \"My File\"'][href='#{download_path(presenter)}']", text: 'Download'
|
36
37
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'curation_concerns/file_sets/show.html.erb', type: :view do
|
4
|
+
before do
|
5
|
+
allow(view).to receive(:parent).and_return(parent)
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:parent) { stub_model(GenericWork) }
|
9
|
+
|
10
|
+
let(:depositor) do
|
11
|
+
stub_model(User,
|
12
|
+
user_key: 'bob',
|
13
|
+
twitter_handle: 'bot4lib')
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:content) do
|
17
|
+
double('content', versions: [], mimeType: 'application/pdf')
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:file_set) do
|
21
|
+
stub_model(FileSet, id: '123',
|
22
|
+
depositor: depositor.user_key,
|
23
|
+
audit_stat: 1,
|
24
|
+
title: ['My Title'],
|
25
|
+
description: ['Lorem ipsum lorem ipsum. http://my.link.com']
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:ability) { double }
|
30
|
+
let(:solr_doc) { SolrDocument.new(file_set.to_solr) }
|
31
|
+
let(:presenter) { CurationConcerns::FileSetPresenter.new(solr_doc, ability) }
|
32
|
+
|
33
|
+
before do
|
34
|
+
view.lookup_context.view_paths.push CurationConcerns::Engine.root + 'app/views/curation_concerns/base'
|
35
|
+
allow(view).to receive(:can?).with(:edit, String).and_return(true)
|
36
|
+
assign(:presenter, presenter)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'title heading' do
|
40
|
+
before do
|
41
|
+
stub_template 'shared/_title_bar.html.erb' => 'Title Bar'
|
42
|
+
render template: 'curation_concerns/file_sets/show.html.erb', layout: 'layouts/curation_concerns'
|
43
|
+
end
|
44
|
+
it 'shows the title' do
|
45
|
+
expect(rendered).to have_selector 'h1 > small', text: 'My Title'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'attributes' do
|
50
|
+
before { render }
|
51
|
+
|
52
|
+
it 'shows the description' do
|
53
|
+
expect(rendered).to have_selector '.attribute.description', text: 'Lorem ipsum'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'curation_concerns/single_use_links_viewer/show.html.erb' do
|
4
|
+
let(:ability) { double }
|
5
|
+
let(:model) { stub_model(FileSet, title: ['world.png']) }
|
6
|
+
let(:solr_document) { SolrDocument.new(model.to_solr) }
|
7
|
+
let(:presenter) { CurationConcerns::FileSetPresenter.new(solr_document, ability) }
|
8
|
+
let(:download_link) { '/a_path' }
|
9
|
+
before do
|
10
|
+
assign(:presenter, presenter)
|
11
|
+
assign(:download_link, download_link)
|
12
|
+
view.lookup_context.view_paths.push 'app/views/curation_concerns/base'
|
13
|
+
render
|
14
|
+
end
|
15
|
+
|
16
|
+
it "renders the page" do
|
17
|
+
expect(rendered).to have_selector 'h1', text: 'world.png'
|
18
|
+
end
|
19
|
+
end
|
@@ -14,7 +14,7 @@ describe 'shared/_add_content.html.erb' do
|
|
14
14
|
|
15
15
|
it 'has links to create works and collections' do
|
16
16
|
CurationConcerns.config.curation_concerns.each do |curation_concern_type|
|
17
|
-
expect(rendered).to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(
|
17
|
+
expect(rendered).to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(curation_concern_type))
|
18
18
|
end
|
19
19
|
expect(rendered).to have_link('Add a Collection', href: collections.new_collection_path)
|
20
20
|
end
|
@@ -30,7 +30,7 @@ describe 'shared/_add_content.html.erb' do
|
|
30
30
|
|
31
31
|
it 'has links to add collections but not to add works' do
|
32
32
|
CurationConcerns.config.curation_concerns.each do |curation_concern_type|
|
33
|
-
expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(
|
33
|
+
expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(curation_concern_type))
|
34
34
|
end
|
35
35
|
expect(rendered).to have_link('Add a Collection', href: collections.new_collection_path)
|
36
36
|
end
|
@@ -47,7 +47,7 @@ describe 'shared/_add_content.html.erb' do
|
|
47
47
|
expect(rendered).not_to have_text('Add')
|
48
48
|
expect(rendered).not_to have_text('Admin')
|
49
49
|
CurationConcerns.config.curation_concerns.each do |curation_concern_type|
|
50
|
-
expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(
|
50
|
+
expect(rendered).not_to have_link("New #{curation_concern_type.human_readable_type}", href: new_polymorphic_path(curation_concern_type))
|
51
51
|
end
|
52
52
|
expect(rendered).not_to have_link('Add a Collection', href: collections.new_collection_path)
|
53
53
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'upload_sets/_metadata.html.erb' do
|
4
|
+
let(:user) { build(:user) }
|
5
|
+
let(:ability) { Ability.new(user) }
|
6
|
+
let(:upload_set) { UploadSet.create }
|
7
|
+
let(:form) { CurationConcerns::UploadSetForm.new(upload_set, ability) }
|
8
|
+
let(:work1) { build(:work, id: 'work1', title: ['First work']) }
|
9
|
+
let(:work2) { build(:work, id: 'work2', title: ['Second work']) }
|
10
|
+
|
11
|
+
let(:f) do
|
12
|
+
allow(upload_set).to receive(:works).and_return([work1, work2])
|
13
|
+
view.simple_form_for(form, url: '/update', builder: CurationConcerns::FormBuilder) do |fs_form|
|
14
|
+
return fs_form
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
before do
|
19
|
+
allow(view).to receive(:f).and_return(f)
|
20
|
+
render
|
21
|
+
end
|
22
|
+
|
23
|
+
it "draws the form" do
|
24
|
+
expect(rendered).to have_text 'Applies to all files just uploaded'
|
25
|
+
expect(rendered).to have_css 'input[name="title[work1][]"][value="First work"]'
|
26
|
+
expect(rendered).to have_css 'input[name="title[work2][]"][value="Second work"]'
|
27
|
+
end
|
28
|
+
end
|