active-fedora 13.1.2 → 13.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github_changelog_generator +2 -0
  3. data/CHANGELOG.md +3362 -0
  4. data/CONTRIBUTING.md +23 -1
  5. data/README.md +4 -0
  6. data/active-fedora.gemspec +14 -13
  7. data/lib/active_fedora/version.rb +1 -1
  8. metadata +104 -206
  9. data/spec/config_helper.rb +0 -17
  10. data/spec/fixtures/dino.jpg +0 -0
  11. data/spec/fixtures/dino_jpg_no_file_ext +0 -0
  12. data/spec/fixtures/minivan.jpg +0 -0
  13. data/spec/fixtures/rails_root/config/fake_fedora.yml +0 -7
  14. data/spec/fixtures/rails_root/config/fedora.yml +0 -12
  15. data/spec/fixtures/rails_root/config/solr.yml +0 -15
  16. data/spec/fixtures/rails_root/config/solr_mappings.yml +0 -16
  17. data/spec/fixtures/rails_root/config/solr_mappings_af_0.1.yml +0 -9
  18. data/spec/fixtures/rails_root/config/solr_mappings_bl_2.4.yml +0 -17
  19. data/spec/integration/associations/rdf_spec.rb +0 -61
  20. data/spec/integration/associations_spec.rb +0 -680
  21. data/spec/integration/attached_files_spec.rb +0 -146
  22. data/spec/integration/attributes_spec.rb +0 -73
  23. data/spec/integration/autosave_association_spec.rb +0 -24
  24. data/spec/integration/base_spec.rb +0 -184
  25. data/spec/integration/basic_contains_association_spec.rb +0 -121
  26. data/spec/integration/belongs_to_association_spec.rb +0 -260
  27. data/spec/integration/caching_spec.rb +0 -59
  28. data/spec/integration/clean_connection_spec.rb +0 -21
  29. data/spec/integration/collection_association_spec.rb +0 -166
  30. data/spec/integration/date_time_properties_spec.rb +0 -41
  31. data/spec/integration/delete_all_spec.rb +0 -64
  32. data/spec/integration/direct_container_spec.rb +0 -250
  33. data/spec/integration/directly_contains_one_association_spec.rb +0 -96
  34. data/spec/integration/eradicate_spec.rb +0 -52
  35. data/spec/integration/fedora_solr_sync_spec.rb +0 -30
  36. data/spec/integration/file_fixity_spec.rb +0 -36
  37. data/spec/integration/file_spec.rb +0 -221
  38. data/spec/integration/generators/fedora_generator_spec.rb +0 -26
  39. data/spec/integration/generators/solr_generator_spec.rb +0 -23
  40. data/spec/integration/gone_spec.rb +0 -41
  41. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +0 -414
  42. data/spec/integration/has_many_associations_spec.rb +0 -436
  43. data/spec/integration/has_subresource_spec.rb +0 -34
  44. data/spec/integration/indexing/descendant_fetcher_spec.rb +0 -64
  45. data/spec/integration/indexing_spec.rb +0 -110
  46. data/spec/integration/indirect_container_spec.rb +0 -290
  47. data/spec/integration/json_serialization_spec.rb +0 -32
  48. data/spec/integration/marshal_spec.rb +0 -39
  49. data/spec/integration/nested_attribute_spec.rb +0 -177
  50. data/spec/integration/nested_hash_resources_spec.rb +0 -43
  51. data/spec/integration/persistence_spec.rb +0 -37
  52. data/spec/integration/query_result_builder_spec.rb +0 -37
  53. data/spec/integration/rdf_nested_attributes_spec.rb +0 -85
  54. data/spec/integration/relation_delegation_spec.rb +0 -52
  55. data/spec/integration/relation_spec.rb +0 -117
  56. data/spec/integration/scoped_query_spec.rb +0 -134
  57. data/spec/integration/scoping_spec.rb +0 -48
  58. data/spec/integration/solr_hit_spec.rb +0 -32
  59. data/spec/integration/versionable_spec.rb +0 -256
  60. data/spec/integration/with_metadata_spec.rb +0 -111
  61. data/spec/lib/active_fedora/null_logger_spec.rb +0 -10
  62. data/spec/rcov.opts +0 -2
  63. data/spec/spec.opts +0 -5
  64. data/spec/spec_helper.rb +0 -106
  65. data/spec/support/an_active_model.rb +0 -29
  66. data/spec/unit/active_fedora/indexing/inserter_spec.rb +0 -35
  67. data/spec/unit/active_fedora_spec.rb +0 -118
  68. data/spec/unit/aggregation/list_source_spec.rb +0 -134
  69. data/spec/unit/aggregation/ordered_reader_spec.rb +0 -43
  70. data/spec/unit/association_hash_spec.rb +0 -64
  71. data/spec/unit/attached_files_spec.rb +0 -218
  72. data/spec/unit/attributes_spec.rb +0 -146
  73. data/spec/unit/base_active_model_spec.rb +0 -28
  74. data/spec/unit/base_cma_spec.rb +0 -15
  75. data/spec/unit/base_extra_spec.rb +0 -33
  76. data/spec/unit/base_spec.rb +0 -328
  77. data/spec/unit/builder/has_and_belongs_to_many_spec.rb +0 -8
  78. data/spec/unit/callback_spec.rb +0 -65
  79. data/spec/unit/change_set_spec.rb +0 -60
  80. data/spec/unit/checksum_spec.rb +0 -25
  81. data/spec/unit/code_configurator_spec.rb +0 -41
  82. data/spec/unit/collection_proxy_spec.rb +0 -25
  83. data/spec/unit/config_spec.rb +0 -18
  84. data/spec/unit/core/fedora_id_translator_spec.rb +0 -29
  85. data/spec/unit/core/fedora_uri_translator_spec.rb +0 -19
  86. data/spec/unit/core/logger_spec.rb +0 -18
  87. data/spec/unit/core_spec.rb +0 -242
  88. data/spec/unit/default_model_mapper_spec.rb +0 -39
  89. data/spec/unit/fedora_spec.rb +0 -31
  90. data/spec/unit/file/streaming_spec.rb +0 -33
  91. data/spec/unit/file_configurator_spec.rb +0 -295
  92. data/spec/unit/file_io_spec.rb +0 -137
  93. data/spec/unit/file_path_builder_spec.rb +0 -18
  94. data/spec/unit/file_spec.rb +0 -489
  95. data/spec/unit/files_hash_spec.rb +0 -52
  96. data/spec/unit/filter_spec.rb +0 -133
  97. data/spec/unit/finder_methods_spec.rb +0 -154
  98. data/spec/unit/fixity_service_spec.rb +0 -128
  99. data/spec/unit/forbidden_attributes_protection_spec.rb +0 -50
  100. data/spec/unit/has_and_belongs_to_many_association_spec.rb +0 -125
  101. data/spec/unit/has_many_association_spec.rb +0 -131
  102. data/spec/unit/indexers/global_indexer_spec.rb +0 -41
  103. data/spec/unit/indexing/map/index_object_spec.rb +0 -25
  104. data/spec/unit/indexing/map_spec.rb +0 -27
  105. data/spec/unit/indexing_service_spec.rb +0 -28
  106. data/spec/unit/indexing_spec.rb +0 -86
  107. data/spec/unit/inheritance_spec.rb +0 -60
  108. data/spec/unit/ldp_resource_spec.rb +0 -15
  109. data/spec/unit/loadable_from_json_spec.rb +0 -40
  110. data/spec/unit/logger_spec.rb +0 -19
  111. data/spec/unit/model_classifier_spec.rb +0 -49
  112. data/spec/unit/ordered_spec.rb +0 -367
  113. data/spec/unit/orders/list_node_spec.rb +0 -151
  114. data/spec/unit/orders/ordered_list_spec.rb +0 -335
  115. data/spec/unit/orders/reflection_spec.rb +0 -22
  116. data/spec/unit/pathing_spec.rb +0 -35
  117. data/spec/unit/persistence_spec.rb +0 -115
  118. data/spec/unit/property_predicate_spec.rb +0 -35
  119. data/spec/unit/property_spec.rb +0 -25
  120. data/spec/unit/query_result_builder_spec.rb +0 -31
  121. data/spec/unit/query_spec.rb +0 -307
  122. data/spec/unit/querying_spec.rb +0 -24
  123. data/spec/unit/rdf/indexing_service_spec.rb +0 -114
  124. data/spec/unit/rdf_vocab_spec.rb +0 -30
  125. data/spec/unit/readonly_spec.rb +0 -24
  126. data/spec/unit/reflection_spec.rb +0 -42
  127. data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +0 -37
  128. data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +0 -38
  129. data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +0 -38
  130. data/spec/unit/schema_indexing_strategy_spec.rb +0 -68
  131. data/spec/unit/scoping_spec.rb +0 -67
  132. data/spec/unit/serializers_spec.rb +0 -19
  133. data/spec/unit/solr_config_options_spec.rb +0 -57
  134. data/spec/unit/solr_hit_spec.rb +0 -57
  135. data/spec/unit/solr_query_builder_spec.rb +0 -18
  136. data/spec/unit/solr_service_spec.rb +0 -165
  137. data/spec/unit/sparql_insert_spec.rb +0 -31
  138. data/spec/unit/validations_spec.rb +0 -92
  139. data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +0 -29
  140. data/spec/unit/with_metadata/metadata_node_spec.rb +0 -69
@@ -1,52 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- before(:all) do
5
- class TestClass < ActiveFedora::Base
6
- property :foo, predicate: ::RDF::URI('http://example.com/foo')
7
- property :bar, predicate: ::RDF::URI('http://example.com/bar') do |index|
8
- index.as :stored_searchable
9
- end
10
-
11
- def to_solr(doc = {})
12
- doc = super
13
- doc[ActiveFedora.index_field_mapper.solr_name('foo', :sortable)] = doc[ActiveFedora.index_field_mapper.solr_name('foo', type: :string)]
14
- doc
15
- end
16
- end
17
- end
18
-
19
- after(:all) do
20
- Object.send(:remove_const, :TestClass)
21
- end
22
-
23
- describe "with multiple objects" do
24
- let!(:instance1) { TestClass.create!(foo: ['Beta'], bar: ['Chips']) }
25
- let!(:instance2) { TestClass.create!(foo: ['Alpha'], bar: ['Peanuts']) }
26
- let!(:instance3) { TestClass.create!(foo: ['Sigma'], bar: ['Peanuts']) }
27
-
28
- subject(:peanuts) { TestClass.where(bar: 'Peanuts') }
29
-
30
- it "maps" do
31
- expect(peanuts.map(&:id)).to contain_exactly instance2.id, instance3.id
32
- end
33
-
34
- it "collects" do
35
- expect(peanuts.collect(&:id)).to contain_exactly instance2.id, instance3.id
36
- end
37
-
38
- it "has each" do
39
- expect(peanuts.each.to_a.length).to eq 2
40
- end
41
-
42
- it "has all?" do
43
- expect(peanuts.all? { |t| t.foo == ['Alpha'] }).to be false
44
- expect(peanuts.all? { |t| t.bar == ['Peanuts'] }).to be true
45
- end
46
-
47
- it "has include?" do
48
- expect(peanuts.include?(instance1)).to be false
49
- expect(peanuts.include?(instance2)).to be true
50
- end
51
- end
52
- end
@@ -1,117 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- before :all do
5
- class Library < ActiveFedora::Base
6
- has_many :books
7
- end
8
- class Book < ActiveFedora::Base
9
- belongs_to :library, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf
10
- end
11
- end
12
-
13
- after :all do
14
- Object.send(:remove_const, :Library)
15
- Object.send(:remove_const, :Book)
16
- end
17
-
18
- subject(:libraries) { Library.all }
19
-
20
- it "is a relation" do
21
- expect(libraries.class).to be ActiveFedora::Relation
22
- end
23
-
24
- it { is_expected.to respond_to(:each_with_index) }
25
- it { expect(libraries.any?).to eq false }
26
- it { is_expected.to be_blank }
27
- it { is_expected.to be_empty }
28
- it { is_expected.not_to be_present }
29
-
30
- context "when some records exist" do
31
- before do
32
- Library.create
33
- end
34
-
35
- let!(:library1) { Library.create }
36
-
37
- describe "is cached" do
38
- before do
39
- libraries.to_a # trigger initial load
40
- end
41
-
42
- it { is_expected.to be_loaded }
43
-
44
- it "does not reload" do
45
- expect_any_instance_of(ActiveFedora::Relation).to_not receive :find_each
46
- libraries[0]
47
- end
48
-
49
- it "does not reload" do
50
- expect_any_instance_of(ActiveFedora::Relation).to_not receive :find_each
51
- libraries.each { |l| l.id }
52
- end
53
- end
54
-
55
- it { expect(libraries.any?).to eq true }
56
- it { is_expected.not_to be_blank }
57
- it { is_expected.not_to be_empty }
58
- it { is_expected.to be_present }
59
-
60
- describe '#each' do
61
- before { Book.create }
62
-
63
- it 'returns an enumerator' do
64
- expect(libraries.each).to be_a Enumerator
65
- end
66
-
67
- it 'yields the items' do
68
- expect { |b| libraries.each(&b) }
69
- .to yield_successive_args(*Library.all.to_a)
70
- end
71
-
72
- it 'when called from Base yields all items' do
73
- expect { |b| ActiveFedora::Base.all.each(&b) }
74
- .to yield_successive_args(*(Library.all.to_a + Book.all.to_a))
75
- end
76
-
77
- context 'when cached' do
78
- it 'returns an enumerator' do
79
- expect(libraries.each).to be_a Enumerator
80
- end
81
-
82
- it 'yields the items' do
83
- expect { |b| libraries.each(&b) }
84
- .to yield_successive_args(*Library.all.to_a)
85
- end
86
- end
87
- end
88
-
89
- describe "#find" do
90
- it "finds one of them" do
91
- expect(libraries.find(library1.id)).to eq library1
92
- end
93
- it "finds with a block" do
94
- expect(libraries.find { |l| l.id == library1.id }).to eq library1
95
- end
96
- end
97
-
98
- describe "#select" do
99
- it "finds with a block" do
100
- expect(libraries.select { |l| l.id == library1.id }).to eq [library1]
101
- end
102
- end
103
-
104
- context "unpermitted methods" do
105
- it "excludes them" do
106
- expect { libraries.sort! }.to raise_error NoMethodError
107
- end
108
- end
109
-
110
- context "when limit is applied" do
111
- subject(:libraries) { Library.create books: [Book.create, Book.create] }
112
- it "limits the number of books" do
113
- expect(libraries.books.limit(1).size).to eq 1
114
- end
115
- end
116
- end
117
- end
@@ -1,134 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Querying do
4
- before do
5
- module ModelIntegrationSpec
6
- class Basic < ActiveFedora::Base
7
- property :foo, predicate: ::RDF::URI('http://example.com/foo') do |index|
8
- index.as :stored_searchable
9
- end
10
- property :bar, predicate: ::RDF::URI('http://example.com/bar') do |index|
11
- index.as :stored_searchable
12
- end
13
- property :baz, predicate: ::RDF::URI('http://example.com/baz')
14
-
15
- def to_solr(doc = {})
16
- doc = super
17
- doc[ActiveFedora.index_field_mapper.solr_name('foo', :sortable)] = doc[ActiveFedora.index_field_mapper.solr_name('foo', type: :string)]
18
- doc
19
- end
20
- end
21
- end
22
- end
23
-
24
- after do
25
- Object.send(:remove_const, :ModelIntegrationSpec)
26
- end
27
-
28
- describe "When there is one object in the store" do
29
- let!(:test_instance) { ModelIntegrationSpec::Basic.create! }
30
-
31
- after do
32
- test_instance.delete
33
- end
34
-
35
- describe ".all" do
36
- it "returns an array of instances of the calling Class" do
37
- result = ModelIntegrationSpec::Basic.all.to_a
38
- expect(result).to be_instance_of(Array)
39
- # this test is meaningless if the array length is zero
40
- expect(result.length).to be > 0
41
- expect(result).to all(be_an(ModelIntegrationSpec::Basic))
42
- end
43
- end
44
-
45
- describe ".first" do
46
- it "returns one instance of the calling class" do
47
- expect(ModelIntegrationSpec::Basic.first).to eq test_instance
48
- end
49
- end
50
- end
51
-
52
- describe "with multiple objects" do
53
- let!(:test_instance1) { ModelIntegrationSpec::Basic.create!(foo: ['Beta'], bar: ['Chips']) }
54
- let!(:test_instance2) { ModelIntegrationSpec::Basic.create!(foo: ['Alpha'], bar: ['Peanuts']) }
55
- let!(:test_instance3) { ModelIntegrationSpec::Basic.create!(foo: ['Sigma'], bar: ['Peanuts']) }
56
-
57
- describe "when the objects are in fedora" do
58
- after do
59
- test_instance1.delete
60
- test_instance2.delete
61
- test_instance3.delete
62
- end
63
-
64
- it "queries" do
65
- field = ActiveFedora.index_field_mapper.solr_name('foo', type: :string)
66
- expect(ModelIntegrationSpec::Basic.where(field => 'Beta')).to eq [test_instance1]
67
- expect(ModelIntegrationSpec::Basic.where('foo' => 'Beta')).to eq [test_instance1]
68
- expect(ModelIntegrationSpec::Basic.where('foo' => ['Beta', 'Alpha'])).to eq [test_instance1, test_instance2]
69
- end
70
- it "orders" do
71
- expect(ModelIntegrationSpec::Basic.order(ActiveFedora.index_field_mapper.solr_name('foo', :sortable) + ' asc')).to contain_exactly test_instance2, test_instance1, test_instance3
72
- end
73
- it "limits" do
74
- expect(ModelIntegrationSpec::Basic.limit(1)).to eq [test_instance1]
75
- end
76
- it "offsets" do
77
- expect(ModelIntegrationSpec::Basic.offset(1)).to contain_exactly test_instance2, test_instance3
78
- end
79
-
80
- it "chains queries" do
81
- expect(ModelIntegrationSpec::Basic.where(ActiveFedora.index_field_mapper.solr_name('bar', type: :string) => 'Peanuts').order(ActiveFedora.index_field_mapper.solr_name('foo', :sortable) + ' asc').limit(1)).to eq [test_instance2]
82
- end
83
-
84
- it "wraps string conditions with parentheses" do
85
- expect(ModelIntegrationSpec::Basic.where("foo:bar OR bar:baz").where_values).to eq ["(foo:bar OR bar:baz)"]
86
- end
87
-
88
- it "chains where queries" do
89
- first_condition = { ActiveFedora.index_field_mapper.solr_name('bar', type: :string) => 'Peanuts' }
90
- second_condition = "foo_tesim:bar"
91
- where_values = ModelIntegrationSpec::Basic.where(first_condition)
92
- .where(second_condition).where_values
93
- expect(where_values).to eq ["_query_:\"{!field f=bar_tesim}Peanuts\"",
94
- "(foo_tesim:bar)"]
95
- end
96
-
97
- it "chains count" do
98
- expect(ModelIntegrationSpec::Basic.where(ActiveFedora.index_field_mapper.solr_name('bar', type: :string) => 'Peanuts').count).to eq 2
99
- end
100
-
101
- it "calling first should not affect the relation's ability to get all results later" do
102
- relation = ModelIntegrationSpec::Basic.where(ActiveFedora.index_field_mapper.solr_name('bar', type: :string) => 'Peanuts')
103
- expect { relation.first }.not_to change { relation.to_a.size }
104
- end
105
-
106
- it "calling where should not affect the relation's ability to get all results later" do
107
- relation = ModelIntegrationSpec::Basic.where(ActiveFedora.index_field_mapper.solr_name('bar', type: :string) => 'Peanuts')
108
- expect { relation.where(ActiveFedora.index_field_mapper.solr_name('foo', type: :string) => 'bar') }.not_to change { relation.to_a.size }
109
- end
110
-
111
- it "calling order should not affect the original order of the relation later" do
112
- relation = ModelIntegrationSpec::Basic.order(ActiveFedora.index_field_mapper.solr_name('foo', :sortable) + ' asc')
113
- expect { relation.order(ActiveFedora.index_field_mapper.solr_name('foo', :sortable) + ' desc') }.not_to change { relation.to_a }
114
- end
115
- end
116
-
117
- describe "when one of the objects in solr isn't in fedora" do
118
- let!(:id) { test_instance2.id }
119
- before { Ldp::Resource::RdfSource.new(ActiveFedora.fedora.connection, test_instance2.uri).delete }
120
- after do
121
- ActiveFedora::SolrService.instance.conn.tap do |conn|
122
- conn.delete_by_query "id:\"#{id}\""
123
- conn.commit
124
- end
125
- test_instance1.delete
126
- test_instance3.delete
127
- end
128
- it "logs an error" do
129
- expect(ActiveFedora::Base.logger).to receive(:error).with("Although #{id} was found in Solr, it doesn't seem to exist in Fedora. The index is out of synch.")
130
- expect(ModelIntegrationSpec::Basic.all).to contain_exactly test_instance1, test_instance3
131
- end
132
- end
133
- end
134
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Scoping::Named do
4
- before(:all) do
5
- class TestClass < ActiveFedora::Base; end
6
- class OtherClass < ActiveFedora::Base; end
7
- end
8
- after(:all) do
9
- Object.send(:remove_const, :TestClass)
10
- Object.send(:remove_const, :OtherClass)
11
- end
12
-
13
- let!(:test_instance) { TestClass.create! }
14
- after { test_instance.delete }
15
-
16
- describe "#all" do
17
- it "returns an array of instances of the calling Class" do
18
- result = TestClass.all.to_a
19
- expect(result).to be_instance_of(Array)
20
- # this test is meaningless if the array length is zero
21
- expect(result).to_not be_empty
22
- result.each do |obj|
23
- expect(obj.class).to eq TestClass
24
- end
25
- end
26
- end
27
-
28
- describe '#find' do
29
- describe "a valid id without cast" do
30
- subject { ActiveFedora::Base.find(test_instance.id) }
31
- it { is_expected.to be_instance_of TestClass }
32
- end
33
- describe "a valid id with cast of false" do
34
- subject { ActiveFedora::Base.find(test_instance.id, cast: false) }
35
- it { is_expected.to be_instance_of ActiveFedora::Base }
36
- end
37
- describe "a valid id without cast on a model extending Base" do
38
- subject { TestClass.find(test_instance.id) }
39
- it { is_expected.to be_instance_of TestClass }
40
- end
41
- it "a valid id on an incompatible class raises ModelMismatch" do
42
- expect { OtherClass.find(test_instance.id) }.to raise_error(ActiveFedora::ModelMismatch)
43
- end
44
- it "invalid id raises ObjectNotFoundError" do
45
- expect { TestClass.find('some_unused_identifier') }.to raise_error(ActiveFedora::ObjectNotFoundError)
46
- end
47
- end
48
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::SolrHit do
4
- before do
5
- class Foo < ActiveFedora::Base
6
- property :title, predicate: ::RDF::Vocab::DC.title, multiple: false
7
- end
8
- end
9
-
10
- after do
11
- Object.send(:remove_const, :Foo)
12
- end
13
-
14
- subject(:solr_hit) { described_class.new(doc) }
15
- let(:another) { Foo.create }
16
-
17
- let!(:obj) { Foo.create!(
18
- id: 'test-123',
19
- title: 'My Title'
20
- ) }
21
-
22
- let(:doc) { obj.to_solr }
23
-
24
- describe "#reify" do
25
- let(:solr_reified) { solr_hit.reify }
26
-
27
- it "finds the document in solr" do
28
- expect(solr_reified).to be_instance_of Foo
29
- expect(solr_reified.title).to eq 'My Title'
30
- end
31
- end
32
- end
@@ -1,256 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Versionable do
4
- context "For ActiveFedora::Base" do
5
- before do
6
- class WithVersions < ActiveFedora::Base
7
- property :title, predicate: ::RDF::Vocab::DC.title
8
- end
9
- end
10
-
11
- after do
12
- Object.send(:remove_const, :WithVersions)
13
- end
14
-
15
- subject(:object) { WithVersions.new }
16
-
17
- let(:current_year) { DateTime.now.year.to_s }
18
-
19
- context "saved with no versions" do
20
- it "does not have versions" do
21
- object.update(title: ["Greetings Earthlings"])
22
- expect(object).not_to have_versions
23
- end
24
- end
25
-
26
- context "saved with versions" do
27
- it "has versions" do
28
- object.update(title: ["Greetings Earthlings"])
29
- object.create_version
30
- expect(object).to have_versions
31
- end
32
- end
33
-
34
- describe 'sorting versions' do
35
- subject(:graph) { ActiveFedora::VersionsGraph.new }
36
-
37
- before do
38
- allow(graph).to receive(:fedora_versions) { versions }
39
- end
40
-
41
- let(:version1) { instance_double(ActiveFedora::VersionsGraph::ResourceVersion, uri: 'http://localhost:8983/fedora/rest/test/84/61/63/98/84616398-f63a-4572-ba01-0689339e4fcb/fcr:versions/87a0a8c317f1e711aa993d-e1d2-4a65-93ee-3a12fc9541ab', label: 'version1', created: '2015-04-02T19:54:45.962Z') }
42
- let(:version2) { instance_double(ActiveFedora::VersionsGraph::ResourceVersion, uri: 'http://localhost:8983/fedora/rest/test/84/61/63/98/84616398-f63a-4572-ba01-0689339e4fcb/fcr:versions/87a0a8c317f1e790373a67-c9ee-447d-b740-4faa882b1a1f', label: 'version2', created: '2015-04-02T19:54:45.96Z') }
43
- let(:versions) { [version1, version2] }
44
-
45
- it 'sorts by DateTime' do
46
- expect(graph.first).to eq version2
47
- end
48
-
49
- context 'with an unparseable created date' do
50
- let(:version2) { instance_double(ActiveFedora::VersionsGraph::ResourceVersion, uri: 'http://localhost:8983/fedora/rest/test/84/61/63/98/84616398-f63a-4572-ba01-0689339e4fcb/fcr:versions/87a0a8c317f1e790373a67-c9ee-447d-b740-4faa882b1a1f', label: 'version2', created: '') }
51
-
52
- it 'raises an exception' do
53
- expect { graph.first }.to raise_error(ActiveFedora::VersionLacksCreateDate)
54
- end
55
- end
56
-
57
- context 'with a missing created date' do
58
- before do
59
- # Because mocks raise RSpec::Mocks::MockExpectationError instead
60
- allow(version2).to receive(:created) { raise NoMethodError }
61
- end
62
-
63
- let(:version2) { instance_double(ActiveFedora::VersionsGraph::ResourceVersion, uri: 'http://localhost:8983/fedora/rest/test/84/61/63/98/84616398-f63a-4572-ba01-0689339e4fcb/fcr:versions/87a0a8c317f1e790373a67-c9ee-447d-b740-4faa882b1a1f', label: 'version2') }
64
-
65
- it 'raises an exception' do
66
- expect { graph.first }.to raise_error(ActiveFedora::VersionLacksCreateDate)
67
- end
68
- end
69
- end
70
-
71
- context "after saving" do
72
- before do
73
- object.title = ["Greetings Earthlings"]
74
- object.save
75
- object.create_version
76
- end
77
-
78
- it { is_expected.to have_versions }
79
-
80
- it "has one version" do
81
- expect(object.versions).to be_kind_of ActiveFedora::VersionsGraph
82
- expect(object.versions.all.first).to be_kind_of ActiveFedora::VersionsGraph::ResourceVersion
83
- expect(object.versions.all.first.label).to eql "version1"
84
- expect(object.versions.all.first.created).to start_with current_year
85
- end
86
-
87
- context "two times" do
88
- before do
89
- object.title = ["Surrender and prepare to be boarded"]
90
- object.save
91
- object.create_version
92
- end
93
-
94
- it "has two versions" do
95
- expect(object.versions.all.size).to eq 2
96
- object.versions.all.each_index do |index|
97
- expect(object.versions.all[index].label).to end_with "version" + (index + 1).to_s
98
- expect(object.versions.all[index].created).to start_with current_year
99
- end
100
- end
101
-
102
- context "then restoring" do
103
- let(:first_version) { "version1" }
104
- before do
105
- object.restore_version(first_version)
106
- end
107
-
108
- it "will return to the first version's values" do
109
- expect(object.title).to eq(["Greetings Earthlings"])
110
- end
111
-
112
- context "and creating additional versions" do
113
- before do
114
- object.title = ["Now, surrender and prepare to be boarded"]
115
- object.save!
116
- object.create_version
117
- end
118
-
119
- it "has three versions" do
120
- expect(object.versions.all.size).to eq 3
121
- expect(object.title).to eq(["Now, surrender and prepare to be boarded"])
122
- end
123
- end
124
- end
125
- end
126
- end
127
- end
128
-
129
- describe ActiveFedora::File do
130
- before(:all) do
131
- class BinaryDatastream < ActiveFedora::File
132
- end
133
-
134
- class MockAFBase < ActiveFedora::Base
135
- has_subresource "content", class_name: 'BinaryDatastream', autocreate: true
136
- end
137
- end
138
-
139
- after(:all) do
140
- Object.send(:remove_const, :MockAFBase)
141
- Object.send(:remove_const, :BinaryDatastream)
142
- end
143
-
144
- let(:content) { test_object.content }
145
-
146
- let(:current_year) { DateTime.now.year.to_s }
147
-
148
- context "that exists in the repository" do
149
- let(:test_object) { MockAFBase.create }
150
-
151
- context "before creating the file" do
152
- it "does not have versions" do
153
- expect(content.versions).to be_empty
154
- end
155
- end
156
-
157
- context "after creating the file" do
158
- let(:first_file) { File.new(File.join(File.dirname(__FILE__), "../fixtures/dino.jpg")) }
159
- let(:first_name) { "dino.jpg" }
160
- before do
161
- content.content = first_file
162
- content.original_name = first_name
163
- content.save
164
- content.create_version
165
- end
166
-
167
- it "links to versions endpoint" do
168
- expect(content.metadata.ldp_source.graph.query(predicate: ::RDF::Vocab::Fcrepo4.hasVersions).objects).to_not be_empty
169
- end
170
-
171
- it "has one version" do
172
- expect(content.versions.all.size).to eq 1
173
- expect(content.original_name).to eql(first_name)
174
- expect(content.content.size).to eq first_file.size
175
- expect(content.versions.first.label).to eql "version1"
176
- expect(content.versions.first.created).to start_with current_year
177
- end
178
-
179
- context "two times" do
180
- let(:second_file) { File.new(File.join(File.dirname(__FILE__), "../fixtures/minivan.jpg")) }
181
- let(:second_name) { "minivan.jpg" }
182
- before do
183
- content.content = second_file
184
- content.original_name = second_name
185
- content.save
186
- content.create_version
187
- end
188
-
189
- it "has two unique versions" do
190
- expect(content.versions.all.size).to eq 2
191
- expect(content.original_name).to eql(second_name)
192
- expect(content.content.size).to eq second_file.size
193
- content.versions.all.each_index do |index|
194
- expect(content.versions.all[index].label).to end_with "version" + (index + 1).to_s
195
- expect(content.versions.all[index].created).to start_with current_year
196
- end
197
- end
198
-
199
- context "with fixity checking" do
200
- let(:results) do
201
- results = []
202
- content.versions.all.each do |version|
203
- results << ActiveFedora::FixityService.new(version.uri).check
204
- end
205
- return results
206
- end
207
-
208
- it "reports on the fixity of each version" do
209
- results.each do |result|
210
- expect(result).to be true
211
- end
212
- end
213
- end
214
-
215
- context "then restoring" do
216
- let(:first_version) { "version1" }
217
- before do
218
- content.restore_version(first_version)
219
- end
220
-
221
- it "stills have two unique versions" do
222
- expect(content.versions.all.size).to eq 2
223
- end
224
-
225
- it "loads the restored file's content" do
226
- expect(content.content.size).to eq first_file.size
227
- end
228
-
229
- it "loads the restored file's original name" do
230
- expect(content.original_name).to eql(first_name)
231
- end
232
-
233
- context "and creating additional versions" do
234
- before do
235
- content.content = first_file
236
- content.original_name = first_name
237
- content.save
238
- content.create_version
239
- end
240
-
241
- it "has three unique versions" do
242
- expect(content.versions.all.size).to eq 3
243
- expect(content.original_name).to eql(first_name)
244
- expect(content.content.size).to eq first_file.size
245
- content.versions.all.each_index do |index|
246
- expect(content.versions.all[index].label).to end_with "version" + (index + 1).to_s
247
- expect(content.versions.all[index].created).to start_with current_year
248
- end
249
- end
250
- end
251
- end
252
- end
253
- end
254
- end
255
- end
256
- end