active-fedora 11.1.3 → 11.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +3 -2
  3. data/.rubocop_todo.yml +73 -18
  4. data/.travis.yml +4 -4
  5. data/History.txt +6 -0
  6. data/README.md +1 -1
  7. data/active-fedora.gemspec +5 -4
  8. data/lib/active_fedora.rb +3 -3
  9. data/lib/active_fedora/aggregation/list_source.rb +1 -1
  10. data/lib/active_fedora/associations/association.rb +1 -2
  11. data/lib/active_fedora/associations/basic_contains_association.rb +3 -1
  12. data/lib/active_fedora/associations/builder/association.rb +1 -2
  13. data/lib/active_fedora/associations/null_validator.rb +1 -2
  14. data/lib/active_fedora/attached_files.rb +4 -0
  15. data/lib/active_fedora/attributes/property_builder.rb +3 -3
  16. data/lib/active_fedora/containers/container.rb +1 -2
  17. data/lib/active_fedora/file.rb +2 -3
  18. data/lib/active_fedora/file_configurator.rb +2 -2
  19. data/lib/active_fedora/fixity_service.rb +36 -5
  20. data/lib/active_fedora/indexers/null_indexer.rb +1 -2
  21. data/lib/active_fedora/indexing.rb +34 -15
  22. data/lib/active_fedora/indexing/descendant_fetcher.rb +101 -0
  23. data/lib/active_fedora/indexing/map.rb +11 -3
  24. data/lib/active_fedora/indexing_service.rb +6 -1
  25. data/lib/active_fedora/inheritance.rb +1 -1
  26. data/lib/active_fedora/null_logger.rb +2 -4
  27. data/lib/active_fedora/persistence.rb +2 -2
  28. data/lib/active_fedora/property.rb +1 -2
  29. data/lib/active_fedora/rake_support.rb +1 -1
  30. data/lib/active_fedora/rdf/field_map.rb +2 -2
  31. data/lib/active_fedora/rdf/field_map_entry.rb +7 -5
  32. data/lib/active_fedora/rdf/indexing_service.rb +9 -7
  33. data/lib/active_fedora/relation/finder_methods.rb +2 -1
  34. data/lib/active_fedora/solr_service.rb +2 -1
  35. data/lib/active_fedora/type/value.rb +2 -4
  36. data/lib/active_fedora/version.rb +1 -1
  37. data/lib/active_fedora/with_metadata/metadata_node.rb +2 -0
  38. data/spec/integration/associations_spec.rb +8 -8
  39. data/spec/integration/attached_files_spec.rb +1 -2
  40. data/spec/integration/collection_association_spec.rb +1 -1
  41. data/spec/integration/direct_container_spec.rb +2 -2
  42. data/spec/integration/fedora_solr_sync_spec.rb +1 -1
  43. data/spec/integration/generators/fedora_generator_spec.rb +1 -1
  44. data/spec/integration/generators/solr_generator_spec.rb +1 -1
  45. data/spec/integration/has_many_associations_spec.rb +4 -5
  46. data/spec/integration/indexing_spec.rb +21 -1
  47. data/spec/integration/indirect_container_spec.rb +2 -2
  48. data/spec/integration/solr_hit_spec.rb +1 -1
  49. data/spec/integration/versionable_spec.rb +2 -2
  50. data/spec/unit/attached_files_spec.rb +36 -8
  51. data/spec/unit/attributes_spec.rb +5 -13
  52. data/spec/unit/base_spec.rb +2 -2
  53. data/spec/unit/callback_spec.rb +2 -2
  54. data/spec/unit/change_set_spec.rb +1 -2
  55. data/spec/unit/collection_proxy_spec.rb +2 -1
  56. data/spec/unit/core_spec.rb +3 -3
  57. data/spec/unit/default_model_mapper_spec.rb +1 -1
  58. data/spec/unit/file_path_builder_spec.rb +1 -1
  59. data/spec/unit/file_spec.rb +23 -25
  60. data/spec/unit/files_hash_spec.rb +1 -2
  61. data/spec/unit/filter_spec.rb +2 -2
  62. data/spec/unit/fixity_service_spec.rb +65 -5
  63. data/spec/unit/has_and_belongs_to_many_association_spec.rb +1 -2
  64. data/spec/unit/has_many_association_spec.rb +2 -2
  65. data/spec/unit/indexing/map/index_object_spec.rb +25 -0
  66. data/spec/unit/indexing/map_spec.rb +27 -0
  67. data/spec/unit/indexing_spec.rb +1 -2
  68. data/spec/unit/inheritance_spec.rb +28 -1
  69. data/spec/unit/model_classifier_spec.rb +1 -1
  70. data/spec/unit/pathing_spec.rb +1 -2
  71. data/spec/unit/query_result_builder_spec.rb +1 -2
  72. data/spec/unit/query_spec.rb +1 -1
  73. data/spec/unit/rdf/indexing_service_spec.rb +17 -3
  74. data/spec/unit/reflection_spec.rb +2 -2
  75. data/spec/unit/solr_hit_spec.rb +1 -2
  76. data/spec/unit/solr_service_spec.rb +6 -0
  77. data/spec/unit/sparql_insert_spec.rb +1 -1
  78. data/spec/unit/with_metadata/metadata_node_spec.rb +26 -1
  79. metadata +28 -12
@@ -1,29 +1,27 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActiveFedora::File do
4
- let(:file) { described_class.new }
5
-
6
- subject(:af_file) { file }
4
+ subject(:af_file) { described_class.new }
7
5
 
8
6
  it { is_expected.not_to be_metadata }
9
7
 
10
8
  describe "#save!" do
11
9
  context "when updating metadata" do
12
10
  before do
13
- file.content = 'foo'
14
- file.save!
15
- file.mime_type = 'application/pdf'
11
+ af_file.content = 'foo'
12
+ af_file.save!
13
+ af_file.mime_type = 'application/pdf'
16
14
  end
17
15
 
18
16
  it "Updates metadata" do
19
- expect(file.metadata).to receive(:save)
20
- file.save!
17
+ expect(af_file.metadata).to receive(:save)
18
+ af_file.save!
21
19
  end
22
20
  end
23
21
  end
24
22
 
25
23
  describe "#behaves_like_io?" do
26
- subject { file.send(:behaves_like_io?, object) }
24
+ subject { af_file.send(:behaves_like_io?, object) }
27
25
 
28
26
  context "with a File" do
29
27
  let(:object) { File.new __FILE__ }
@@ -43,20 +41,20 @@ describe ActiveFedora::File do
43
41
  end
44
42
 
45
43
  describe "#uri" do
46
- subject(:uri) { file.uri }
44
+ subject(:uri) { af_file.uri }
47
45
 
48
46
  context "when the file is in an ldp:BasicContainer" do
49
47
  let(:parent) { ActiveFedora::Base.new(id: '1234') }
50
48
 
51
49
  context "and it's initialized with the URI" do
52
- let(:file) { described_class.new(parent.uri + "/FOO1") }
50
+ let(:af_file) { described_class.new(parent.uri + "/FOO1") }
53
51
  it "works" do
54
52
  expect(uri.to_s).to eq "#{ActiveFedora.fedora.base_uri}/1234/FOO1"
55
53
  end
56
54
  end
57
55
 
58
56
  context "and it's initialized with an ID" do
59
- let(:file) { described_class.new(parent.id + "/FOO1") }
57
+ let(:af_file) { described_class.new(parent.id + "/FOO1") }
60
58
  it "works" do
61
59
  expect(uri.to_s).to eq "#{ActiveFedora.fedora.base_uri}/1234/FOO1"
62
60
  end
@@ -184,12 +182,12 @@ describe ActiveFedora::File do
184
182
 
185
183
  context "when the file has local content" do
186
184
  before do
187
- file.uri = "http://localhost:8983/fedora/rest/test/1234/abcd"
188
- file.content = "hi there"
185
+ af_file.uri = "http://localhost:8983/fedora/rest/test/1234/abcd"
186
+ af_file.content = "hi there"
189
187
  end
190
188
 
191
189
  describe "#inspect" do
192
- subject { file.inspect }
190
+ subject { af_file.inspect }
193
191
  it { is_expected.to eq "#<ActiveFedora::File uri=\"http://localhost:8983/fedora/rest/test/1234/abcd\" >" }
194
192
  end
195
193
  end
@@ -214,11 +212,11 @@ describe ActiveFedora::File do
214
212
  end
215
213
 
216
214
  context "original_name" do
217
- subject { file.original_name }
215
+ subject { af_file.original_name }
218
216
 
219
217
  context "on a new file" do
220
218
  context "that has a name set locally" do
221
- before { file.original_name = "my_image.png" }
219
+ before { af_file.original_name = "my_image.png" }
222
220
  it { is_expected.to eq "my_image.png" }
223
221
  end
224
222
 
@@ -252,7 +250,7 @@ describe ActiveFedora::File do
252
250
  end
253
251
 
254
252
  context "digest" do
255
- subject { file.digest }
253
+ subject(:digest) { af_file.digest }
256
254
 
257
255
  context "on a new file" do
258
256
  it { is_expected.to be_empty }
@@ -274,11 +272,11 @@ describe ActiveFedora::File do
274
272
  predicate = ::RDF::URI("http://fedora.info/definitions/v4/repository#digest")
275
273
  object = RDF::URI.new("urn:sha1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15")
276
274
  graph = ActiveTriples::Resource.new
277
- graph << RDF::Statement.new(file.uri, predicate, object)
278
- allow(file).to receive_message_chain(:metadata, :ldp_source, :graph).and_return(graph)
275
+ graph << RDF::Statement.new(af_file.uri, predicate, object)
276
+ allow(af_file).to receive_message_chain(:metadata, :ldp_source, :graph).and_return(graph)
279
277
  end
280
278
  it "falls back on fedora:digest if premis:hasMessageDigest is not present" do
281
- expect(file.digest.first).to be_kind_of RDF::URI
279
+ expect(digest.first).to be_kind_of RDF::URI
282
280
  end
283
281
  end
284
282
  end
@@ -308,14 +306,14 @@ describe ActiveFedora::File do
308
306
  end
309
307
 
310
308
  describe "#create_date" do
311
- subject { file.create_date }
309
+ subject { af_file.create_date }
312
310
  describe "when new record" do
313
311
  it { is_expected.to be_nil }
314
312
  end
315
313
  describe "when persisted" do
316
314
  before do
317
- file.content = "foo"
318
- file.save!
315
+ af_file.content = "foo"
316
+ af_file.save!
319
317
  end
320
318
  it { is_expected.to be_a(DateTime) }
321
319
  end
@@ -453,7 +451,7 @@ describe ActiveFedora::File do
453
451
 
454
452
  context "when Array passed to new" do
455
453
  it "raises an expection" do
456
- expect { described_class.new([]) }.to raise_error
454
+ expect { described_class.new([]) }.to raise_error(RuntimeError)
457
455
  end
458
456
  end
459
457
  end
@@ -10,13 +10,12 @@ describe ActiveFedora::FilesHash do
10
10
 
11
11
  after { Object.send(:remove_const, :FilesContainer) }
12
12
 
13
+ subject(:file_hash) { described_class.new(container) }
13
14
  let(:reflection) { instance_double(ActiveFedora::Reflection::MacroReflection) }
14
15
  let(:association) { instance_double(ActiveFedora::Associations::SingularAssociation, reader: object) }
15
16
  let(:object) { double('object') }
16
17
  let(:container) { FilesContainer.new }
17
18
 
18
- subject(:file_hash) { described_class.new(container) }
19
-
20
19
  describe "#key?" do
21
20
  context 'when the key is present' do
22
21
  it "is true" do
@@ -120,14 +120,14 @@ describe ActiveFedora::Associations::FilterAssociation do
120
120
  end
121
121
 
122
122
  describe "#delete" do
123
+ subject { image.members }
124
+
123
125
  let(:another_object) { TestObject.new }
124
126
  before do
125
127
  image.members = [test_object, test_collection, another_object]
126
128
  image.child_objects.delete(test_object)
127
129
  end
128
130
 
129
- subject { image.members }
130
-
131
131
  it { is_expected.to contain_exactly test_collection, another_object }
132
132
  end
133
133
  end
@@ -4,6 +4,32 @@ describe ActiveFedora::FixityService do
4
4
  let(:service) { described_class.new(uri) }
5
5
  let(:uri) { RDF::URI("http://path/to/resource") }
6
6
 
7
+ let(:passing_fedora44_response_body) {
8
+ <<-EOF
9
+ @prefix premis: <http://www.loc.gov/premis/rdf/v1#> .
10
+
11
+ <http://127.0.0.1:8080/rest/dev/0k/22/5b/04/0k225b04p/files/9f296a1f-10e7-44a3-83eb-4811d611edc6/fcr:versions/version1> premis:hasFixity <http://127.0.0.1:8080/rest/dev/0k/22/5b/04/0k225b04p/files/9f296a1f-10e7-44a3-83eb-4811d611edc6/fcr:versions/version1#fixity/1493843767961> .
12
+
13
+ <http://127.0.0.1:8080/rest/dev/0k/22/5b/04/0k225b04p/files/9f296a1f-10e7-44a3-83eb-4811d611edc6/fcr:versions/version1#fixity/1493843767961> a premis:Fixity , premis:EventOutcomeDetail ;
14
+ premis:hasEventOutcome "SUCCESS"^^<http://www.w3.org/2001/XMLSchema#string> ;
15
+ premis:hasMessageDigest <urn:sha1:b995eef5262dd1c74f0ed9c96be1f404394d45dc> ;
16
+ premis:hasSize "103945"^^<http://www.w3.org/2001/XMLSchema#long> .
17
+ EOF
18
+ }
19
+
20
+ let(:failing_fedora44_response_body) {
21
+ <<-EOF
22
+ @prefix premis: <http://www.loc.gov/premis/rdf/v1#> .
23
+
24
+ <http://127.0.0.1:8080/rest/dev/ks/65/hc/20/ks65hc20t/files/e316b4b5-4627-44f8-9fdb-d2016e0e7380/fcr:versions/version3> premis:hasFixity <http://127.0.0.1:8080/rest/dev/ks/65/hc/20/ks65hc20t/files/e316b4b5-4627-44f8-9fdb-d2016e0e7380/fcr:versions/version3#fixity/1493844791463> .
25
+
26
+ <http://127.0.0.1:8080/rest/dev/ks/65/hc/20/ks65hc20t/files/e316b4b5-4627-44f8-9fdb-d2016e0e7380/fcr:versions/version3#fixity/1493844791463> a premis:Fixity , premis:EventOutcomeDetail ;
27
+ premis:hasEventOutcome "BAD_CHECKSUM"^^<http://www.w3.org/2001/XMLSchema#string> , "BAD_SIZE"^^<http://www.w3.org/2001/XMLSchema#string> ;
28
+ premis:hasMessageDigest <urn:sha1:1a89571e25dd372563a10740a883e93f8af2d146> ;
29
+ premis:hasSize "1878582"^^<http://www.w3.org/2001/XMLSchema#long> .
30
+ EOF
31
+ }
32
+
7
33
  describe "the instance" do
8
34
  subject { described_class.new(uri) }
9
35
  it { is_expected.to respond_to(:response) }
@@ -11,8 +37,8 @@ describe ActiveFedora::FixityService do
11
37
 
12
38
  describe "initialize" do
13
39
  context "with a string" do
14
- let(:uri) { 'http://path/to/resource' }
15
40
  subject { service.target }
41
+ let(:uri) { 'http://path/to/resource' }
16
42
  it { is_expected.to eq 'http://path/to/resource' }
17
43
  end
18
44
 
@@ -22,21 +48,21 @@ describe ActiveFedora::FixityService do
22
48
  end
23
49
  end
24
50
 
25
- describe "#check" do
51
+ describe "#verified?" do
26
52
  before { allow(service).to receive(:fixity_response_from_fedora).and_return(response) }
27
- subject { service.check }
53
+ subject { service.verified? }
28
54
 
29
55
  context "with Fedora version >= 4.4.0" do
30
56
  context "with a passing result" do
31
57
  let(:response) do
32
- instance_double("Response", body: '<subject> <http://www.loc.gov/premis/rdf/v1#hasEventOutcome> "SUCCESS"^^<http://www.w3.org/2001/XMLSchema#string> .')
58
+ instance_double("Response", body: passing_fedora44_response_body)
33
59
  end
34
60
  it { is_expected.to be true }
35
61
  end
36
62
 
37
63
  context "with a failing result" do
38
64
  let(:response) do
39
- instance_double("Response", body: '<subject> <http://www.loc.gov/premis/rdf/v1#hasEventOutcome> "BAD_CHECKSUM"^^<http://www.w3.org/2001/XMLSchema#string> .')
65
+ instance_double("Response", body: failing_fedora44_response_body)
40
66
  end
41
67
  it { is_expected.to be false }
42
68
  end
@@ -65,4 +91,38 @@ describe ActiveFedora::FixityService do
65
91
  it { is_expected.to be false }
66
92
  end
67
93
  end
94
+
95
+ describe "expected_message_digest" do
96
+ before { allow(service).to receive(:fixity_response_from_fedora).and_return(response) }
97
+ subject { service.expected_message_digest }
98
+ context "with success response" do
99
+ let(:response) do
100
+ instance_double("Response", body: passing_fedora44_response_body)
101
+ end
102
+ it { is_expected.to match(/urn:sha1:[a-f0-9]+/) }
103
+ end
104
+ context "with failure response" do
105
+ let(:response) do
106
+ instance_double("Response", body: failing_fedora44_response_body)
107
+ end
108
+ it { is_expected.to match(/urn:sha1:[a-f0-9]+/) }
109
+ end
110
+ end
111
+
112
+ describe "expected_size" do
113
+ before { allow(service).to receive(:fixity_response_from_fedora).and_return(response) }
114
+ subject { service.expected_size }
115
+ context "with success response" do
116
+ let(:response) do
117
+ instance_double("Response", body: passing_fedora44_response_body)
118
+ end
119
+ it { is_expected.to be_kind_of Numeric }
120
+ end
121
+ context "with failure response" do
122
+ let(:response) do
123
+ instance_double("Response", body: failing_fedora44_response_body)
124
+ end
125
+ it { is_expected.to be_kind_of Numeric }
126
+ end
127
+ end
68
128
  end
@@ -77,8 +77,7 @@ describe ActiveFedora::Associations::HasAndBelongsToManyAssociation do
77
77
  before do
78
78
  class Collection < ActiveFedora::Base
79
79
  has_and_belongs_to_many :members, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, class_name: "ActiveFedora::Base", after_remove: :remove_member
80
- def remove_member(_m)
81
- end
80
+ def remove_member(_m); end
82
81
  end
83
82
 
84
83
  class Thing < ActiveFedora::Base
@@ -33,11 +33,11 @@ describe ActiveFedora::Associations::HasManyAssociation do
33
33
  end
34
34
 
35
35
  describe "#find_polymorphic_inverse" do
36
+ subject(:af_page) { association.send(:find_polymorphic_inverse, page) }
37
+
36
38
  let(:book_reflection) { ActiveFedora::Reflection.create(:has_many, 'pages', nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf }, Book) }
37
39
  let(:association) { described_class.new(book, book_reflection) }
38
40
 
39
- subject(:af_page) { association.send(:find_polymorphic_inverse, page) }
40
-
41
41
  context "when a has_many is present" do
42
42
  before do
43
43
  # :books must come first, so that we can test that is being passed over in favor of :contents
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActiveFedora::Indexing::Map::IndexObject do
4
+ describe "with a block" do
5
+ subject(:instance) do
6
+ described_class.new(:name) do |index|
7
+ index.as :stored_searchable, :facetable
8
+ end
9
+ end
10
+
11
+ it "can set behaviors" do
12
+ expect(instance.behaviors).to eq [:stored_searchable, :facetable]
13
+ end
14
+ end
15
+
16
+ describe "with an initializer parameters" do
17
+ subject(:instance) do
18
+ described_class.new(:name, behaviors: [:stored_searchable, :facetable])
19
+ end
20
+
21
+ it "can set behaviors" do
22
+ expect(instance.behaviors).to eq [:stored_searchable, :facetable]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActiveFedora::Indexing::Map do
4
+ describe ".merge" do
5
+ subject(:merged) { first_map.merge(extra) }
6
+ let(:index_object1) { instance_double(described_class::IndexObject) }
7
+ let(:index_object2) { instance_double(described_class::IndexObject) }
8
+ let(:index_object3) { instance_double(described_class::IndexObject) }
9
+ let(:first_map) { described_class.new(one: index_object1, two: index_object2) }
10
+
11
+ context "with a hash" do
12
+ let(:extra) { { three: index_object3 } }
13
+ it "merges with a hash" do
14
+ expect(merged).to be_instance_of described_class
15
+ expect(merged.keys).to match_array [:one, :two, :three]
16
+ end
17
+ end
18
+
19
+ context "with another Indexing::Map" do
20
+ let(:extra) { described_class.new(three: index_object3) }
21
+ it "merges with the other map" do
22
+ expect(merged).to be_instance_of described_class
23
+ expect(merged.keys).to match_array [:one, :two, :three]
24
+ end
25
+ end
26
+ end
27
+ end
@@ -53,9 +53,8 @@ describe ActiveFedora::Indexing do
53
53
  Object.send(:remove_const, :SpecNode)
54
54
  end
55
55
 
56
- let(:test_object) { SpecNode.new(title: ['first title'], abstract: 'The abstract') }
57
-
58
56
  subject(:solr_doc) { test_object.to_solr }
57
+ let(:test_object) { SpecNode.new(title: ['first title'], abstract: 'The abstract') }
59
58
 
60
59
  it "indexs the rdf properties" do
61
60
  expect(solr_doc).to include('title_tesim' => ['first title'], 'abstract_ssi' => 'The abstract')
@@ -8,6 +8,9 @@ describe ActiveFedora::Base do
8
8
  class MySample < ActiveFedora::File
9
9
  end
10
10
 
11
+ class MyDeepSample < MySample
12
+ end
13
+
11
14
  class Foo < ActiveFedora::Base
12
15
  has_subresource 'foostream', class_name: 'MyDS'
13
16
  has_subresource 'dcstream', class_name: 'MySample'
@@ -16,18 +19,42 @@ describe ActiveFedora::Base do
16
19
  class Bar < ActiveFedora::Base
17
20
  has_subresource 'barstream', class_name: 'MyDS'
18
21
  end
22
+
23
+ class Baz < Bar
24
+ end
19
25
  end
20
- let(:f) { Foo.new }
26
+
21
27
  subject(:attached_files) { f.attached_files }
28
+ let(:f) { Foo.new }
22
29
 
23
30
  it "doesn't overwrite stream specs" do
24
31
  expect(attached_files.values).to match_array [MyDS, MySample]
25
32
  end
26
33
 
34
+ context 'base_class' do
35
+ it 'shallow < Base' do
36
+ expect(Bar.base_class).to eq(Bar)
37
+ end
38
+
39
+ it 'deep < Base' do
40
+ expect(Baz.base_class).to eq(Bar)
41
+ end
42
+
43
+ it 'shallow < File' do
44
+ expect(MySample.base_class).to eq(ActiveFedora::File)
45
+ end
46
+
47
+ it 'deep < File' do
48
+ expect(MyDeepSample.base_class).to eq(ActiveFedora::File)
49
+ end
50
+ end
51
+
27
52
  after do
53
+ Object.send(:remove_const, :Baz)
28
54
  Object.send(:remove_const, :Bar)
29
55
  Object.send(:remove_const, :Foo)
30
56
  Object.send(:remove_const, :MyDS)
57
+ Object.send(:remove_const, :MyDeepSample)
31
58
  Object.send(:remove_const, :MySample)
32
59
  end
33
60
  end
@@ -10,8 +10,8 @@ describe ActiveFedora::ModelClassifier do
10
10
  end
11
11
  end
12
12
 
13
- let(:class_names) { ["ParentClass::SiblingClass", "ParentClass::OtherSiblingClass", "ParentClass::SubclassClass", "ParentClass::NoSuchClass"] }
14
13
  subject(:classifier) { described_class.new class_names }
14
+ let(:class_names) { ["ParentClass::SiblingClass", "ParentClass::OtherSiblingClass", "ParentClass::SubclassClass", "ParentClass::NoSuchClass"] }
15
15
 
16
16
  describe ".class_from_string" do
17
17
  it "returns class constants based on strings" do
@@ -2,8 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe ActiveFedora::Base do
4
4
  describe ".uri_prefix" do
5
- let(:path) { "foo" }
6
-
7
5
  before do
8
6
  class FooHistory < ActiveFedora::Base
9
7
  def uri_prefix
@@ -18,6 +16,7 @@ describe ActiveFedora::Base do
18
16
  end
19
17
 
20
18
  subject(:history) { FooHistory.new(title: ["Root foo"]) }
19
+ let(:path) { "foo" }
21
20
 
22
21
  it { is_expected.to have_uri_prefix }
23
22