ddr-models 3.0.0.beta.18 → 3.0.0.beta.20

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16f19bb0a9c0d7569797de024db2638a3e1b4e2a
4
- data.tar.gz: 1e83fcc5c343aeed276d1a36de4d99f9b95dc125
3
+ metadata.gz: 83e427c337952549de62787a1e38025b6a41153e
4
+ data.tar.gz: 57656751812c73a3360e5122eddf22bc317f02f1
5
5
  SHA512:
6
- metadata.gz: 4abaf0450a6f928fc6c3c52da7c4a570028c82dcd58fedeff07bf24262bdce23d6a4b6c7ee30f49894120c52381d6d93c174515f2ea49ec726ae8ac8de347c34
7
- data.tar.gz: 6975b9bf6181df4407f480b44f21f4d697fef2c989fc2f878c63c1d524f247210239042e751572530028af6b2deab2bc9c4f8827cc5054d777ef1f38423b0511
6
+ metadata.gz: f27a59cee19c3b97e19a36347ee37aabd216d0a566cbb0cf840a998e80053d29d0a088e753d08fd8f6a3107be4be714ca30e9ae8542ce2db81a110253dc89089
7
+ data.tar.gz: cbe43fb12c173fc4c0eff9727d033ed60eea022b0a8d827cdae305a4a76995f7582e5fc61268ddcc2496b81f251526dcca482e625e3f25f4afd2dd74bb104a78
@@ -29,6 +29,7 @@ module Ddr::Index
29
29
  EAD_ID = Field.new :ead_id, :stored_sortable
30
30
  EXTRACTED_TEXT = Field.new :extracted_text, solr_name: "extracted_text_tsm"
31
31
  FCREPO3_PID = Field.new :fcrepo3_pid, :stored_sortable
32
+ FORMAT_FACET = Field.new :format_facet, :facetable
32
33
  HAS_MODEL = Field.new :has_model, :symbol
33
34
  IDENTIFIER_ALL = Field.new :identifier_all, :symbol
34
35
  IS_ATTACHED_TO = Field.new :is_attached_to, solr_name: "isAttachedTo_ssim"
@@ -51,6 +51,7 @@ module Ddr
51
51
  autoload :Indexing
52
52
  autoload :NotFoundError, 'ddr/models/error'
53
53
  autoload :ObjectApi
54
+ autoload :Relation
54
55
  autoload :SolrDocument
55
56
  autoload :StructDiv
56
57
  autoload :Structure
@@ -5,7 +5,7 @@ module Ddr::Models
5
5
  include ActiveModel::Serializers::JSON
6
6
 
7
7
  def attributes
8
- { "size" => nil }
8
+ { "size" => nil, "mime_type" => nil }
9
9
  end
10
10
 
11
11
  end
@@ -11,6 +11,7 @@ module Ddr::Models
11
11
  include Hydra::Validations
12
12
  include HasAdminMetadata
13
13
  extend AutoVersion
14
+ extend Relation
14
15
 
15
16
  after_destroy do
16
17
  notify_event :deletion
@@ -22,7 +22,7 @@ module Ddr
22
22
  ASPACE_ID => aspace_id,
23
23
  ATTACHED_FILES => attached_files_profile.to_json,
24
24
  BOX_NUMBER_FACET => desc_metadata.values('box_number'),
25
- CONTRIBUTOR_FACET => desc_metadata.values('contributor'),
25
+ CONTRIBUTOR_FACET => desc_metadata.contributor,
26
26
  CREATOR_FACET => desc_metadata.creator,
27
27
  DATE_FACET => desc_metadata.date,
28
28
  ATTACHED_FILES_HAVING_CONTENT => attached_files_having_content.keys,
@@ -32,6 +32,7 @@ module Ddr
32
32
  DOI => doi,
33
33
  EAD_ID => ead_id,
34
34
  FCREPO3_PID => fcrepo3_pid,
35
+ FORMAT_FACET => desc_metadata.format,
35
36
  IDENTIFIER_ALL => all_identifiers,
36
37
  LICENSE => license,
37
38
  LOCAL_ID => local_id,
@@ -43,7 +44,7 @@ module Ddr
43
44
  RESOURCE_ROLE => roles.in_resource_scope.agents,
44
45
  SERIES_FACET => desc_metadata.values('series'),
45
46
  SPATIAL_FACET => desc_metadata.values('spatial'),
46
- SUBJECT_FACET => desc_metadata.values('subject'),
47
+ SUBJECT_FACET => desc_metadata.subject,
47
48
  TITLE => title_display,
48
49
  TYPE_FACET => desc_metadata.type,
49
50
  UNIQUE_ID => unique_ids,
@@ -0,0 +1,18 @@
1
+ module Ddr::Models
2
+ #
3
+ # Since ActiveFedora does not yet (as of at least v9.9.1)
4
+ # have named scopes, this module extends Base and is
5
+ # included in AF::Relation for chainability.
6
+ #
7
+ module Relation
8
+ def having_local_id(local_id)
9
+ where(Ddr::Index::Fields::LOCAL_ID => local_id)
10
+ end
11
+
12
+ def in_collection(coll)
13
+ where(Ddr::Index::Fields::IS_MEMBER_OF_COLLECTION => coll.respond_to?(:id) ? coll.id : coll)
14
+ end
15
+ end
16
+ end
17
+
18
+ ActiveFedora::Relation.include(Ddr::Models::Relation)
@@ -151,7 +151,7 @@ module Ddr::Models
151
151
  end
152
152
 
153
153
  def content_mime_type
154
- content_ds["dsMIME"] rescue nil
154
+ content_ds["mime_type"] rescue nil
155
155
  end
156
156
  # For duck-typing with Ddr::Models::HasContent
157
157
  alias_method :content_type, :content_mime_type
@@ -1,5 +1,5 @@
1
1
  module Ddr
2
2
  module Models
3
- VERSION = "3.0.0.beta.18"
3
+ VERSION = "3.0.0.beta.20"
4
4
  end
5
5
  end
@@ -1,6 +1,7 @@
1
1
  require 'openssl'
2
2
 
3
3
  module Ddr::Utils
4
+ extend Deprecation
4
5
 
5
6
  DEFAULT_MIME_TYPE = "application/octet-stream"
6
7
 
@@ -90,6 +91,7 @@ module Ddr::Utils
90
91
  # direct children of that collection (i.e., effectively searches a collection and its
91
92
  # items for an object with the given identifier)
92
93
  def self.pid_for_identifier(identifier, opts={})
94
+ Deprecation.warn(self, "`Ddr::Utils.pid_for_identifier` is deprecated. Use .having_local_id model class method and get id from result object(s). (#{caller.first})")
93
95
  model = opts.fetch(:model, nil)
94
96
  collection = opts.fetch(:collection, nil)
95
97
  objs = []
@@ -6,6 +6,27 @@ RSpec.describe Item, type: :model do
6
6
  it_behaves_like "a non-collection model"
7
7
  it_behaves_like "a potentially publishable object"
8
8
 
9
+ describe ".in_collection scope" do
10
+ let(:coll) { FactoryGirl.create(:collection) }
11
+ let(:item1) { FactoryGirl.create(:item) }
12
+ let(:item2) { FactoryGirl.build(:item) }
13
+ before {
14
+ item2.parent = coll
15
+ item2.local_id = "item2"
16
+ item2.save
17
+ }
18
+ specify {
19
+ expect(Item.in_collection(coll)).not_to include(item1)
20
+ expect(Item.in_collection(coll)).to include(item2)
21
+ }
22
+ describe "chainability with .having_local_id" do
23
+ specify {
24
+ expect(Item.in_collection(coll).having_local_id("item2")).to include(item2)
25
+ expect(Item.in_collection(coll).having_local_id("item1")).not_to include(item2)
26
+ }
27
+ end
28
+ end
29
+
9
30
  describe "indexing text" do
10
31
  let(:children) { FactoryGirl.build_list(:component, 5) }
11
32
 
@@ -1,10 +1,57 @@
1
1
  RSpec.shared_examples "a DDR model" do
2
-
3
- it_behaves_like "a describable object"
4
- it_behaves_like "a governable object"
5
- it_behaves_like "an object that has a display title"
6
- it_behaves_like "an object that has identifiers"
7
- it_behaves_like "a fixity checkable object"
2
+ describe "#desc_metadata_terms" do
3
+ it "should have a default value" do
4
+ expect(subject.desc_metadata_terms).to match_array(Ddr::Models::DescriptiveMetadata.unqualified_names)
5
+ end
6
+ describe "arguments" do
7
+ it "with fixed results" do
8
+ expect(subject.desc_metadata_terms(:dcterms))
9
+ .to eq(Ddr::Models::MetadataMapping.dc11.unqualified_names + (Ddr::Models::MetadataMapping.dcterms.unqualified_names - Ddr::Models::MetadataMapping.dc11.unqualified_names))
10
+ expect(subject.desc_metadata_terms(:dcterms))
11
+ .to match_array(Ddr::Models::MetadataMapping.dcterms.unqualified_names)
12
+ expect(subject.desc_metadata_terms(:duke)).to eq Ddr::Vocab::Vocabulary.term_names(Ddr::Vocab::DukeTerms)
13
+ expect(subject.desc_metadata_terms(:dcterms_elements11)).to eq Ddr::Vocab::Vocabulary.term_names(RDF::DC11)
14
+ expect(subject.desc_metadata_terms(:defined_attributes)).to match_array Ddr::Vocab::Vocabulary.term_names(RDF::DC11)
15
+ end
16
+ context "with variable results" do
17
+ before do
18
+ subject.desc_metadata.title = ["Object Title"]
19
+ subject.desc_metadata.creator = ["Duke University Libraries"]
20
+ subject.desc_metadata.identifier = ["id001"]
21
+ subject.save
22
+ end
23
+ it "should accept an :empty argument" do
24
+ expect(subject.desc_metadata_terms(:empty)).to eq(subject.desc_metadata_terms - [:title, :creator, :identifier])
25
+ end
26
+ it "should accept a :present argument" do
27
+ expect(subject.desc_metadata_terms(:present)).to match_array [:title, :creator, :identifier]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ describe "#set_desc_metadata" do
33
+ let(:term_values_hash) { subject.desc_metadata_terms.each_with_object({}) {|t, memo| memo[t] = ["Value"]} }
34
+ it "should set the desc_metadata terms to the values of the matching keys in the hash" do
35
+ subject.desc_metadata_terms.each do |t|
36
+ expect(subject.desc_metadata).to receive(:set_values).with(t, ["Value"])
37
+ end
38
+ subject.set_desc_metadata(term_values_hash)
39
+ end
40
+ end
41
+ describe "#set_desc_metadata_values" do
42
+ context "when values == nil" do
43
+ it "should set the term to an empty value" do
44
+ subject.set_desc_metadata_values(:title, nil)
45
+ expect(subject.desc_metadata.title).to be_empty
46
+ end
47
+ end
48
+ context "when values is an array" do
49
+ it "should reject empty values from the array" do
50
+ subject.set_desc_metadata_values(:title, ["Object Title", nil, "Alternative Title", ""])
51
+ expect(subject.desc_metadata.title).to eq ["Object Title", "Alternative Title"]
52
+ end
53
+ end
54
+ end
8
55
 
9
56
  describe "#to_param" do
10
57
  before {
@@ -25,6 +72,68 @@ RSpec.shared_examples "a DDR model" do
25
72
  end
26
73
  end
27
74
 
75
+ describe "#title_display" do
76
+ context "when it has a title" do
77
+ before { subject.desc_metadata.title = [ 'Title' ] }
78
+ its(:title_display) { is_expected.to eq('Title') }
79
+ end
80
+ context "when it has no title, but has an identifier" do
81
+ before { subject.desc_metadata.identifier = [ 'id001' ] }
82
+ its(:title_display) { is_expected.to eq('id001') }
83
+ end
84
+ # Only objects with content implement :original_filename
85
+ # This test worked before b/c allowing rspec to stub methods
86
+ # that aren't defined on object. This rspec-mocks config setting prevents that:
87
+ #
88
+ # verify_partial_doubles = true
89
+ #
90
+ # context "has no title, no identifier, has original_filename" do
91
+ # before { allow(object).to receive(:original_filename) { "file.txt" } }
92
+ # it "should return original_filename" do
93
+ # expect(subject).to eq "file.txt"
94
+ # end
95
+ # end
96
+ context "when it has no title, no identifier, and no original_filename" do
97
+ subject { described_class.new(id: 'duke-test') }
98
+ its(:title_display) { is_expected.to eq "[duke-test]" }
99
+ end
100
+ end
101
+
102
+ describe "#all_identifiers" do
103
+ subject { described_class.new(id: 'test-3') }
104
+ context "when it has descriptive identifiers, local ID, permanent ID, and id" do
105
+ before do
106
+ subject.desc_metadata.identifier = [ 'ID001', 'ID002' ]
107
+ subject.local_id = 'LOCAL_ID_A'
108
+ subject.permanent_id = 'ark:/999999/cd3'
109
+ end
110
+ its(:all_identifiers) {
111
+ is_expected.to match_array([ 'ID001', 'ID002', 'LOCAL_ID_A', 'ark:/999999/cd3', 'test-3' ])
112
+ }
113
+ end
114
+ context "when it has no descriptive identifiers or local ID" do
115
+ before { subject.permanent_id = 'ark:/999999/cd3' }
116
+ its(:all_identifiers) {
117
+ is_expected.to match_array([ 'ark:/999999/cd3', 'test-3' ])
118
+ }
119
+ end
120
+ end
121
+
122
+ describe ".having_local_id" do
123
+ let(:obj1) {
124
+ described_class.new(local_id: "obj1").tap { |obj| obj.save(validate: false) }
125
+ }
126
+ let(:obj2) {
127
+ described_class.new(local_id: "obj2").tap { |obj| obj.save(validate: false) }
128
+ }
129
+ specify {
130
+ expect(described_class.having_local_id("obj1")).to include(obj1)
131
+ expect(described_class.having_local_id("obj1")).not_to include(obj2)
132
+ expect(described_class.having_local_id("obj2")).not_to include(obj1)
133
+ expect(described_class.having_local_id("obj2")).to include(obj2)
134
+ }
135
+ end
136
+
28
137
  describe ".find_by_unique_id" do
29
138
  before {
30
139
  subject.permanent_id = "ark:/99999/fk4rx95k8w"
@@ -77,4 +186,30 @@ RSpec.shared_examples "a DDR model" do
77
186
  end
78
187
  end
79
188
 
189
+ describe "fixity check" do
190
+ before do
191
+ subject.thumbnail.content = '1234567890'
192
+ subject.save(validate: false)
193
+ end
194
+ specify {
195
+ expect { subject.check_fixity }.to change(subject.fixity_checks, :count).from(0).to(1)
196
+ }
197
+ describe "results" do
198
+ let(:results) { subject.check_fixity }
199
+ specify {
200
+ expect(results).to be_success
201
+ }
202
+ specify {
203
+ expect(results[:thumbnail]).to be true
204
+ }
205
+ describe "failure" do
206
+ before {
207
+ allow(subject.thumbnail).to receive(:check_fixity) { false }
208
+ }
209
+ specify {
210
+ expect(results).not_to be_success
211
+ }
212
+ end
213
+ end
214
+ end
80
215
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddr-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta.18
4
+ version: 3.0.0.beta.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Coble
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-11 00:00:00.000000000 Z
12
+ date: 2016-03-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -554,6 +554,7 @@ files:
554
554
  - lib/ddr/models/metadata/metadata_vocabularies.rb
555
555
  - lib/ddr/models/metadata/metadata_vocabulary.rb
556
556
  - lib/ddr/models/object_api.rb
557
+ - lib/ddr/models/relation.rb
557
558
  - lib/ddr/models/search/catalog.rb
558
559
  - lib/ddr/models/search/search_builder.rb
559
560
  - lib/ddr/models/solr_document.rb
@@ -718,12 +719,8 @@ files:
718
719
  - spec/support/ezid_mock_identifier.rb
719
720
  - spec/support/shared_examples_for_auth_contexts.rb
720
721
  - spec/support/shared_examples_for_ddr_models.rb
721
- - spec/support/shared_examples_for_describables.rb
722
722
  - spec/support/shared_examples_for_events.rb
723
- - spec/support/shared_examples_for_fixity_checkable_spec.rb
724
- - spec/support/shared_examples_for_governables.rb
725
723
  - spec/support/shared_examples_for_has_content.rb
726
- - spec/support/shared_examples_for_indexing.rb
727
724
  - spec/support/shared_examples_for_non_collection_models.rb
728
725
  - spec/support/shared_examples_for_publication.rb
729
726
  - spec/support/shared_examples_for_role_sets.rb
@@ -896,12 +893,8 @@ test_files:
896
893
  - spec/support/ezid_mock_identifier.rb
897
894
  - spec/support/shared_examples_for_auth_contexts.rb
898
895
  - spec/support/shared_examples_for_ddr_models.rb
899
- - spec/support/shared_examples_for_describables.rb
900
896
  - spec/support/shared_examples_for_events.rb
901
- - spec/support/shared_examples_for_fixity_checkable_spec.rb
902
- - spec/support/shared_examples_for_governables.rb
903
897
  - spec/support/shared_examples_for_has_content.rb
904
- - spec/support/shared_examples_for_indexing.rb
905
898
  - spec/support/shared_examples_for_non_collection_models.rb
906
899
  - spec/support/shared_examples_for_publication.rb
907
900
  - spec/support/shared_examples_for_role_sets.rb
@@ -1,58 +0,0 @@
1
- RSpec.shared_examples "a describable object" do
2
-
3
- let(:object) { described_class.new }
4
-
5
- describe "#desc_metadata_terms" do
6
- it "should have a default value" do
7
- expect(object.desc_metadata_terms).to match_array(Ddr::Models::DescriptiveMetadata.unqualified_names)
8
- end
9
- describe "arguments" do
10
- it "with fixed results" do
11
- expect(object.desc_metadata_terms(:dcterms))
12
- .to eq(Ddr::Models::MetadataMapping.dc11.unqualified_names + (Ddr::Models::MetadataMapping.dcterms.unqualified_names - Ddr::Models::MetadataMapping.dc11.unqualified_names))
13
- expect(object.desc_metadata_terms(:dcterms))
14
- .to match_array(Ddr::Models::MetadataMapping.dcterms.unqualified_names)
15
- expect(object.desc_metadata_terms(:duke)).to eq Ddr::Vocab::Vocabulary.term_names(Ddr::Vocab::DukeTerms)
16
- expect(object.desc_metadata_terms(:dcterms_elements11)).to eq Ddr::Vocab::Vocabulary.term_names(RDF::DC11)
17
- expect(object.desc_metadata_terms(:defined_attributes)).to match_array Ddr::Vocab::Vocabulary.term_names(RDF::DC11)
18
- end
19
- context "with variable results" do
20
- before do
21
- object.desc_metadata.title = ["Object Title"]
22
- object.desc_metadata.creator = ["Duke University Libraries"]
23
- object.desc_metadata.identifier = ["id001"]
24
- object.save
25
- end
26
- it "should accept an :empty argument" do
27
- expect(object.desc_metadata_terms(:empty)).to eq(object.desc_metadata_terms - [:title, :creator, :identifier])
28
- end
29
- it "should accept a :present argument" do
30
- expect(object.desc_metadata_terms(:present)).to match_array [:title, :creator, :identifier]
31
- end
32
- end
33
- end
34
- end
35
- describe "#set_desc_metadata" do
36
- let(:term_values_hash) { object.desc_metadata_terms.each_with_object({}) {|t, memo| memo[t] = ["Value"]} }
37
- it "should set the desc_metadata terms to the values of the matching keys in the hash" do
38
- object.desc_metadata_terms.each do |t|
39
- expect(object.desc_metadata).to receive(:set_values).with(t, ["Value"])
40
- end
41
- object.set_desc_metadata(term_values_hash)
42
- end
43
- end
44
- describe "#set_desc_metadata_values" do
45
- context "when values == nil" do
46
- it "should set the term to an empty value" do
47
- object.set_desc_metadata_values(:title, nil)
48
- expect(object.desc_metadata.title).to be_empty
49
- end
50
- end
51
- context "when values is an array" do
52
- it "should reject empty values from the array" do
53
- object.set_desc_metadata_values(:title, ["Object Title", nil, "Alternative Title", ""])
54
- expect(object.desc_metadata.title).to eq ["Object Title", "Alternative Title"]
55
- end
56
- end
57
- end
58
- end
@@ -1,30 +0,0 @@
1
- RSpec.shared_examples "a fixity checkable object" do
2
-
3
- describe "fixity check" do
4
- before do
5
- subject.thumbnail.content = '1234567890'
6
- subject.save(validate: false)
7
- end
8
- specify {
9
- expect { subject.check_fixity }.to change(subject.fixity_checks, :count).from(0).to(1)
10
- }
11
- describe "results" do
12
- let(:results) { subject.check_fixity }
13
- specify {
14
- expect(results).to be_success
15
- }
16
- specify {
17
- expect(results[:thumbnail]).to be true
18
- }
19
- describe "failure" do
20
- before {
21
- allow(subject.thumbnail).to receive(:check_fixity) { false }
22
- }
23
- specify {
24
- expect(results).not_to be_success
25
- }
26
- end
27
- end
28
- end
29
-
30
- end
@@ -1,17 +0,0 @@
1
- RSpec.shared_examples "a governable object" do
2
- let(:object) do
3
- described_class.new.tap do |obj|
4
- obj.desc_metadata.title = [ 'Describable' ]
5
- obj.desc_metadata.identifier = [ 'id001' ]
6
- obj.save(validate: false)
7
- end
8
- end
9
- describe "can have an admin policy" do
10
- let(:coll) { FactoryGirl.create(:collection) }
11
- it "should set its admin policy with #admin_policy= and get with #admin_policy" do
12
- object.admin_policy = coll
13
- object.save(validate: false)
14
- expect(ActiveFedora::Base.find(object.id).admin_policy).to eq(coll)
15
- end
16
- end
17
- end
@@ -1,59 +0,0 @@
1
- RSpec.shared_examples "an object that has a display title" do
2
- describe "#title_display" do
3
- let(:object) { described_class.new }
4
- subject { object.title_display }
5
- context "has title" do
6
- before { object.desc_metadata.title = [ 'Title' ] }
7
- it "should return the first title" do
8
- expect(subject).to eq('Title')
9
- end
10
- end
11
- context "has no title, has identifier" do
12
- before { object.desc_metadata.identifier = [ 'id001' ] }
13
- it "should return the first identifier" do
14
- expect(subject).to eq('id001')
15
- end
16
- end
17
- # Only objects with content implement :original_filename
18
- # This test worked before b/c allowing rspec to stub methods
19
- # that aren't defined on object. This rspec-mocks config setting prevents that:
20
- #
21
- # verify_partial_doubles = true
22
- #
23
- # context "has no title, no identifier, has original_filename" do
24
- # before { allow(object).to receive(:original_filename) { "file.txt" } }
25
- # it "should return original_filename" do
26
- # expect(subject).to eq "file.txt"
27
- # end
28
- # end
29
- context "has no title, no identifier, no original_filename" do
30
- let(:object) { described_class.new(id: 'duke-test') }
31
- it "should return the id in square brackets" do
32
- expect(subject).to eq "[duke-test]"
33
- end
34
- end
35
- end
36
- end
37
-
38
- RSpec.shared_examples "an object that has identifiers" do
39
- describe "#all_identifiers" do
40
- let(:object) { described_class.new(id: 'test-3') }
41
- subject { object.all_identifiers }
42
- context "has descriptive identifiers, local ID, permanent ID, and id" do
43
- before do
44
- object.desc_metadata.identifier = [ 'ID001', 'ID002' ]
45
- object.local_id = 'LOCAL_ID_A'
46
- object.permanent_id = 'ark:/999999/cd3'
47
- end
48
- it "should return all the identifiers" do
49
- expect(subject).to match_array([ 'ID001', 'ID002', 'LOCAL_ID_A', 'ark:/999999/cd3', 'test-3' ])
50
- end
51
- end
52
- context "no descriptive identifiers or local ID" do
53
- before { object.permanent_id = 'ark:/999999/cd3' }
54
- it "should return the permanent ID and PID" do
55
- expect(subject).to match_array([ 'ark:/999999/cd3', 'test-3' ])
56
- end
57
- end
58
- end
59
- end