active-fedora 13.1.2 → 13.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github_changelog_generator +2 -0
- data/CHANGELOG.md +3362 -0
- data/CONTRIBUTING.md +23 -1
- data/README.md +4 -0
- data/active-fedora.gemspec +14 -13
- data/lib/active_fedora/version.rb +1 -1
- metadata +104 -206
- data/spec/config_helper.rb +0 -17
- data/spec/fixtures/dino.jpg +0 -0
- data/spec/fixtures/dino_jpg_no_file_ext +0 -0
- data/spec/fixtures/minivan.jpg +0 -0
- data/spec/fixtures/rails_root/config/fake_fedora.yml +0 -7
- data/spec/fixtures/rails_root/config/fedora.yml +0 -12
- data/spec/fixtures/rails_root/config/solr.yml +0 -15
- data/spec/fixtures/rails_root/config/solr_mappings.yml +0 -16
- data/spec/fixtures/rails_root/config/solr_mappings_af_0.1.yml +0 -9
- data/spec/fixtures/rails_root/config/solr_mappings_bl_2.4.yml +0 -17
- data/spec/integration/associations/rdf_spec.rb +0 -61
- data/spec/integration/associations_spec.rb +0 -680
- data/spec/integration/attached_files_spec.rb +0 -146
- data/spec/integration/attributes_spec.rb +0 -73
- data/spec/integration/autosave_association_spec.rb +0 -24
- data/spec/integration/base_spec.rb +0 -184
- data/spec/integration/basic_contains_association_spec.rb +0 -121
- data/spec/integration/belongs_to_association_spec.rb +0 -260
- data/spec/integration/caching_spec.rb +0 -59
- data/spec/integration/clean_connection_spec.rb +0 -21
- data/spec/integration/collection_association_spec.rb +0 -166
- data/spec/integration/date_time_properties_spec.rb +0 -41
- data/spec/integration/delete_all_spec.rb +0 -64
- data/spec/integration/direct_container_spec.rb +0 -250
- data/spec/integration/directly_contains_one_association_spec.rb +0 -96
- data/spec/integration/eradicate_spec.rb +0 -52
- data/spec/integration/fedora_solr_sync_spec.rb +0 -30
- data/spec/integration/file_fixity_spec.rb +0 -36
- data/spec/integration/file_spec.rb +0 -221
- data/spec/integration/generators/fedora_generator_spec.rb +0 -26
- data/spec/integration/generators/solr_generator_spec.rb +0 -23
- data/spec/integration/gone_spec.rb +0 -41
- data/spec/integration/has_and_belongs_to_many_associations_spec.rb +0 -414
- data/spec/integration/has_many_associations_spec.rb +0 -436
- data/spec/integration/has_subresource_spec.rb +0 -34
- data/spec/integration/indexing/descendant_fetcher_spec.rb +0 -64
- data/spec/integration/indexing_spec.rb +0 -110
- data/spec/integration/indirect_container_spec.rb +0 -290
- data/spec/integration/json_serialization_spec.rb +0 -32
- data/spec/integration/marshal_spec.rb +0 -39
- data/spec/integration/nested_attribute_spec.rb +0 -177
- data/spec/integration/nested_hash_resources_spec.rb +0 -43
- data/spec/integration/persistence_spec.rb +0 -37
- data/spec/integration/query_result_builder_spec.rb +0 -37
- data/spec/integration/rdf_nested_attributes_spec.rb +0 -85
- data/spec/integration/relation_delegation_spec.rb +0 -52
- data/spec/integration/relation_spec.rb +0 -117
- data/spec/integration/scoped_query_spec.rb +0 -134
- data/spec/integration/scoping_spec.rb +0 -48
- data/spec/integration/solr_hit_spec.rb +0 -32
- data/spec/integration/versionable_spec.rb +0 -256
- data/spec/integration/with_metadata_spec.rb +0 -111
- data/spec/lib/active_fedora/null_logger_spec.rb +0 -10
- data/spec/rcov.opts +0 -2
- data/spec/spec.opts +0 -5
- data/spec/spec_helper.rb +0 -106
- data/spec/support/an_active_model.rb +0 -29
- data/spec/unit/active_fedora/indexing/inserter_spec.rb +0 -35
- data/spec/unit/active_fedora_spec.rb +0 -118
- data/spec/unit/aggregation/list_source_spec.rb +0 -134
- data/spec/unit/aggregation/ordered_reader_spec.rb +0 -43
- data/spec/unit/association_hash_spec.rb +0 -64
- data/spec/unit/attached_files_spec.rb +0 -218
- data/spec/unit/attributes_spec.rb +0 -146
- data/spec/unit/base_active_model_spec.rb +0 -28
- data/spec/unit/base_cma_spec.rb +0 -15
- data/spec/unit/base_extra_spec.rb +0 -33
- data/spec/unit/base_spec.rb +0 -328
- data/spec/unit/builder/has_and_belongs_to_many_spec.rb +0 -8
- data/spec/unit/callback_spec.rb +0 -65
- data/spec/unit/change_set_spec.rb +0 -60
- data/spec/unit/checksum_spec.rb +0 -25
- data/spec/unit/code_configurator_spec.rb +0 -41
- data/spec/unit/collection_proxy_spec.rb +0 -25
- data/spec/unit/config_spec.rb +0 -18
- data/spec/unit/core/fedora_id_translator_spec.rb +0 -29
- data/spec/unit/core/fedora_uri_translator_spec.rb +0 -19
- data/spec/unit/core/logger_spec.rb +0 -18
- data/spec/unit/core_spec.rb +0 -242
- data/spec/unit/default_model_mapper_spec.rb +0 -39
- data/spec/unit/fedora_spec.rb +0 -31
- data/spec/unit/file/streaming_spec.rb +0 -33
- data/spec/unit/file_configurator_spec.rb +0 -295
- data/spec/unit/file_io_spec.rb +0 -137
- data/spec/unit/file_path_builder_spec.rb +0 -18
- data/spec/unit/file_spec.rb +0 -489
- data/spec/unit/files_hash_spec.rb +0 -52
- data/spec/unit/filter_spec.rb +0 -133
- data/spec/unit/finder_methods_spec.rb +0 -154
- data/spec/unit/fixity_service_spec.rb +0 -128
- data/spec/unit/forbidden_attributes_protection_spec.rb +0 -50
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +0 -125
- data/spec/unit/has_many_association_spec.rb +0 -131
- data/spec/unit/indexers/global_indexer_spec.rb +0 -41
- data/spec/unit/indexing/map/index_object_spec.rb +0 -25
- data/spec/unit/indexing/map_spec.rb +0 -27
- data/spec/unit/indexing_service_spec.rb +0 -28
- data/spec/unit/indexing_spec.rb +0 -86
- data/spec/unit/inheritance_spec.rb +0 -60
- data/spec/unit/ldp_resource_spec.rb +0 -15
- data/spec/unit/loadable_from_json_spec.rb +0 -40
- data/spec/unit/logger_spec.rb +0 -19
- data/spec/unit/model_classifier_spec.rb +0 -49
- data/spec/unit/ordered_spec.rb +0 -367
- data/spec/unit/orders/list_node_spec.rb +0 -151
- data/spec/unit/orders/ordered_list_spec.rb +0 -335
- data/spec/unit/orders/reflection_spec.rb +0 -22
- data/spec/unit/pathing_spec.rb +0 -35
- data/spec/unit/persistence_spec.rb +0 -115
- data/spec/unit/property_predicate_spec.rb +0 -35
- data/spec/unit/property_spec.rb +0 -25
- data/spec/unit/query_result_builder_spec.rb +0 -31
- data/spec/unit/query_spec.rb +0 -307
- data/spec/unit/querying_spec.rb +0 -24
- data/spec/unit/rdf/indexing_service_spec.rb +0 -114
- data/spec/unit/rdf_vocab_spec.rb +0 -30
- data/spec/unit/readonly_spec.rb +0 -24
- data/spec/unit/reflection_spec.rb +0 -42
- data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +0 -37
- data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +0 -38
- data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +0 -38
- data/spec/unit/schema_indexing_strategy_spec.rb +0 -68
- data/spec/unit/scoping_spec.rb +0 -67
- data/spec/unit/serializers_spec.rb +0 -19
- data/spec/unit/solr_config_options_spec.rb +0 -57
- data/spec/unit/solr_hit_spec.rb +0 -57
- data/spec/unit/solr_query_builder_spec.rb +0 -18
- data/spec/unit/solr_service_spec.rb +0 -165
- data/spec/unit/sparql_insert_spec.rb +0 -31
- data/spec/unit/validations_spec.rb +0 -92
- data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +0 -29
- data/spec/unit/with_metadata/metadata_node_spec.rb +0 -69
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::Attributes, ".new" do
|
4
|
-
before(:all) do
|
5
|
-
class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
|
6
|
-
attr_accessor :permitted
|
7
|
-
alias permitted? permitted
|
8
|
-
|
9
|
-
def initialize(attributes)
|
10
|
-
super(attributes)
|
11
|
-
@permitted = false
|
12
|
-
end
|
13
|
-
|
14
|
-
def permit!
|
15
|
-
@permitted = true
|
16
|
-
self
|
17
|
-
end
|
18
|
-
|
19
|
-
def dup
|
20
|
-
super.tap do |duplicate|
|
21
|
-
duplicate.instance_variable_set :@permitted, @permitted
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class Person < ActiveFedora::Base
|
27
|
-
property :first_name, predicate: ::RDF::Vocab::FOAF.firstName, multiple: false
|
28
|
-
property :gender, predicate: ::RDF::Vocab::FOAF.gender, multiple: false
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
after(:all) do
|
33
|
-
Object.send(:remove_const, :ProtectedParams)
|
34
|
-
Object.send(:remove_const, :Person)
|
35
|
-
end
|
36
|
-
|
37
|
-
context "forbidden attributes" do
|
38
|
-
let(:params) { ProtectedParams.new(first_name: 'Guille', gender: 'm') }
|
39
|
-
it "cannot be used for mass assignment" do
|
40
|
-
expect { Person.new(params) }.to raise_error ActiveModel::ForbiddenAttributesError
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "permitted attributes" do
|
45
|
-
let(:params) { ProtectedParams.new(first_name: 'Guille', gender: 'm').permit! }
|
46
|
-
it "can be used for mass assignment" do
|
47
|
-
expect { Person.new(params) }.not_to raise_error
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::Associations::HasAndBelongsToManyAssociation do
|
4
|
-
context "creating the reflection" do
|
5
|
-
before do
|
6
|
-
class Book < ActiveFedora::Base
|
7
|
-
end
|
8
|
-
class Page < ActiveFedora::Base
|
9
|
-
end
|
10
|
-
|
11
|
-
allow(book).to receive(:new_record?).and_return(false)
|
12
|
-
allow(book).to receive(:save).and_return(true)
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
Object.send(:remove_const, :Book)
|
17
|
-
Object.send(:remove_const, :Page)
|
18
|
-
end
|
19
|
-
|
20
|
-
subject(:book) { Book.new(id: 'subject-a') }
|
21
|
-
|
22
|
-
context "a one way relationship " do
|
23
|
-
describe "adding memeber" do
|
24
|
-
it "sets the relationship attribute" do
|
25
|
-
reflection = ActiveFedora::Reflection.create(:has_and_belongs_to_many, :pages, nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection }, Book)
|
26
|
-
allow(ActiveFedora::SolrService).to receive(:query).and_return([])
|
27
|
-
ac = described_class.new(book, reflection)
|
28
|
-
expect(ac).to receive(:callback).twice
|
29
|
-
object = Page.new
|
30
|
-
allow(object).to receive(:new_record?).and_return(false)
|
31
|
-
allow(object).to receive(:save).and_return(true)
|
32
|
-
allow(object).to receive(:id).and_return('1234')
|
33
|
-
|
34
|
-
allow(book).to receive(:[]).with('page_ids').and_return([])
|
35
|
-
expect(book).to receive(:[]=).with('page_ids', ['1234'])
|
36
|
-
|
37
|
-
ac.concat object
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "finding member" do
|
42
|
-
let(:ids) { (0..15).map(&:to_s) }
|
43
|
-
let(:reflection) { ActiveFedora::Reflection.create(:has_and_belongs_to_many, :pages, nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection }, Book) }
|
44
|
-
let(:association) { described_class.new(book, reflection) }
|
45
|
-
it "calls ActiveFedora::Base.find" do
|
46
|
-
expect(book).to receive(:[]).with('page_ids').and_return(ids)
|
47
|
-
expect(ActiveFedora::Base).to receive(:find).with(ids)
|
48
|
-
association.send(:find_target)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context "with an inverse reflection" do
|
54
|
-
let!(:inverse) { ActiveFedora::Reflection.create(:has_and_belongs_to_many, :books, nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isMemberOfCollection }, Page) }
|
55
|
-
let(:reflection) { ActiveFedora::Reflection.create(:has_and_belongs_to_many, :pages, nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, inverse_of: 'books' }, Book) }
|
56
|
-
let(:ac) { described_class.new(book, reflection) }
|
57
|
-
let(:object) { Page.new }
|
58
|
-
|
59
|
-
it "sets the relationship attribute on subject and object when inverse_of is given" do
|
60
|
-
allow(ActiveFedora::SolrService).to receive(:query).and_return([])
|
61
|
-
expect(ac).to receive(:callback).twice
|
62
|
-
allow(object).to receive(:new_record?).and_return(false)
|
63
|
-
allow(object).to receive(:save).and_return(true)
|
64
|
-
|
65
|
-
allow(book).to receive(:[]).with('page_ids').and_return([])
|
66
|
-
expect(book).to receive(:[]=).with('page_ids', [object.id])
|
67
|
-
|
68
|
-
expect(object).to receive(:[]).with('book_ids').and_return([]).twice
|
69
|
-
expect(object).to receive(:[]=).with('book_ids', [book.id])
|
70
|
-
|
71
|
-
ac.concat object
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context "class with association" do
|
77
|
-
before do
|
78
|
-
class Collection < ActiveFedora::Base
|
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); end
|
81
|
-
end
|
82
|
-
|
83
|
-
class Thing < ActiveFedora::Base
|
84
|
-
has_many :collections, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, class_name: "ActiveFedora::Base"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
after do
|
89
|
-
Collection.destroy_all
|
90
|
-
Thing.destroy_all
|
91
|
-
|
92
|
-
Object.send(:remove_const, :Collection)
|
93
|
-
Object.send(:remove_const, :Thing)
|
94
|
-
end
|
95
|
-
|
96
|
-
context "with a new collection" do
|
97
|
-
let(:collection) { Collection.new }
|
98
|
-
it "has an empty list of collection members" do
|
99
|
-
expect(collection.member_ids).to eq []
|
100
|
-
expect(collection.members).to eq []
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "with a persisted collection" do
|
105
|
-
let(:collection) { Collection.create.tap { |c| c.members << thing } }
|
106
|
-
let(:thing) { Thing.create }
|
107
|
-
|
108
|
-
context "when the ids are set" do
|
109
|
-
let(:thing2) { Thing.create }
|
110
|
-
let(:thing3) { Thing.create }
|
111
|
-
|
112
|
-
it "clears the object set" do
|
113
|
-
expect(collection.members).to eq [thing]
|
114
|
-
collection.member_ids = [thing2.id, thing3.id]
|
115
|
-
expect(collection.members).to contain_exactly thing2, thing3
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
it "calls destroy" do
|
120
|
-
# this is a pretty weak test
|
121
|
-
expect { collection.destroy }.to_not raise_error
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,131 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::Associations::HasManyAssociation do
|
4
|
-
before do
|
5
|
-
class Book < ActiveFedora::Base
|
6
|
-
end
|
7
|
-
class Page < ActiveFedora::Base
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
Object.send(:remove_const, :Book)
|
13
|
-
Object.send(:remove_const, :Page)
|
14
|
-
end
|
15
|
-
let(:book) { Book.new(id: 'subject-a') }
|
16
|
-
let(:page) { Page.new(id: 'object-b') }
|
17
|
-
|
18
|
-
describe "setting the foreign key" do
|
19
|
-
before do
|
20
|
-
allow(book).to receive(:new_record?).and_return(false)
|
21
|
-
allow(page).to receive(:save).and_return(true)
|
22
|
-
allow(ActiveFedora::SolrService).to receive(:query).and_return([])
|
23
|
-
end
|
24
|
-
|
25
|
-
let(:reflection) { ActiveFedora::Reflection.create(:has_many, 'pages', nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf }, Book) }
|
26
|
-
let(:association) { described_class.new(book, reflection) }
|
27
|
-
|
28
|
-
it "sets the book_id attribute" do
|
29
|
-
expect(association).to receive(:callback).twice
|
30
|
-
expect(page).to receive(:[]=).with('book_id', book.id)
|
31
|
-
association.concat page
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#find_polymorphic_inverse" do
|
36
|
-
subject(:af_page) { association.send(:find_polymorphic_inverse, page) }
|
37
|
-
|
38
|
-
let(:book_reflection) { ActiveFedora::Reflection.create(:has_many, 'pages', nil, { predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf }, Book) }
|
39
|
-
let(:association) { described_class.new(book, book_reflection) }
|
40
|
-
|
41
|
-
context "when a has_many is present" do
|
42
|
-
before do
|
43
|
-
# :books must come first, so that we can test that is being passed over in favor of :contents
|
44
|
-
Page.has_many :books, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ActiveFedora::Base'
|
45
|
-
Page.has_and_belongs_to_many :contents, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ActiveFedora::Base'
|
46
|
-
end
|
47
|
-
|
48
|
-
it "finds the HABTM reflection" do
|
49
|
-
expect(af_page.name).to eq :contents
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
context "when multiple belongs_to are present" do
|
54
|
-
before do
|
55
|
-
# :foo must come first, so that we can test that is being passed over in favor of :bar
|
56
|
-
Page.belongs_to :foo, predicate: ::RDF::Vocab::DC.isPartOf, class_name: 'ActiveFedora::Base'
|
57
|
-
Page.belongs_to :bar, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf, class_name: 'ActiveFedora::Base'
|
58
|
-
end
|
59
|
-
|
60
|
-
it "finds the belongs_to reflection" do
|
61
|
-
expect(af_page.name).to eq :bar
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context "when inverse doesn't have a predictable name" do
|
67
|
-
before do
|
68
|
-
class TimeSpan < ActiveFedora::Base
|
69
|
-
has_many :images, inverse_of: :created # predicate: ::RDF::Vocab::DC.created
|
70
|
-
end
|
71
|
-
|
72
|
-
class Image < ActiveFedora::Base
|
73
|
-
has_and_belongs_to_many :created, predicate: ::RDF::Vocab::DC.created, class_name: 'TimeSpan'
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
after do
|
78
|
-
Object.send(:remove_const, :TimeSpan)
|
79
|
-
Object.send(:remove_const, :Image)
|
80
|
-
end
|
81
|
-
|
82
|
-
let(:owner) { TimeSpan.new }
|
83
|
-
let(:reflection) { TimeSpan._reflect_on_association(:images) }
|
84
|
-
|
85
|
-
it "finds the predicate" do
|
86
|
-
expect { described_class.new(owner, reflection) }.not_to raise_error
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "scope" do
|
91
|
-
before do
|
92
|
-
class Library < ActiveFedora::Base
|
93
|
-
has_many :images
|
94
|
-
end
|
95
|
-
|
96
|
-
class Image < ActiveFedora::Base
|
97
|
-
belongs_to :library, predicate: ::RDF::URI('http://example.com/library')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
after do
|
102
|
-
Object.send(:remove_const, :Library)
|
103
|
-
Object.send(:remove_const, :Image)
|
104
|
-
end
|
105
|
-
|
106
|
-
context "of an unsaved target" do
|
107
|
-
subject { Library.new.images.scope }
|
108
|
-
it { is_expected.to be_kind_of ActiveFedora::NullRelation }
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe "#ids_reader" do
|
113
|
-
let(:owner) { instance_double(ActiveFedora::Base) }
|
114
|
-
let(:reflection) { instance_double(ActiveFedora::Reflection::AssociationReflection, check_validity!: true) }
|
115
|
-
let(:association) { described_class.new(owner, reflection) }
|
116
|
-
|
117
|
-
let(:r1) { ActiveFedora::Base.new(id: 'r1-id', &:mark_for_destruction) }
|
118
|
-
let(:r2) { ActiveFedora::Base.new(id: 'r2-id') }
|
119
|
-
|
120
|
-
context "when some records are marked_for_destruction" do
|
121
|
-
before do
|
122
|
-
allow(association).to receive(:loaded?).and_return(true)
|
123
|
-
allow(association).to receive(:load_target).and_return([r1, r2])
|
124
|
-
end
|
125
|
-
|
126
|
-
it "only returns the records not marked for destruction" do
|
127
|
-
expect(association.ids_reader).to eq ['r2-id']
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe ActiveFedora::Indexers::GlobalIndexer do
|
4
|
-
let(:global_indexer) { described_class.new(index_types) }
|
5
|
-
let(:index_types) {}
|
6
|
-
|
7
|
-
describe "#new" do
|
8
|
-
# The global indexer acts as both an indexer factory and an indexer, since
|
9
|
-
# the property doesn't matter.
|
10
|
-
it "returns itself" do
|
11
|
-
expect(global_indexer.new("bla")).to eq global_indexer
|
12
|
-
end
|
13
|
-
end
|
14
|
-
describe "#index" do
|
15
|
-
let(:index_obj) { instance_double(ActiveFedora::Indexing::Map::IndexObject, as: nil) }
|
16
|
-
context "with one index type" do
|
17
|
-
let(:index_types) { :symbol }
|
18
|
-
it "passes that to index_obj" do
|
19
|
-
global_indexer.index(index_obj)
|
20
|
-
|
21
|
-
expect(index_obj).to have_received(:as).with(:symbol)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
context "with multiple index types" do
|
25
|
-
let(:index_types) { [:symbol, :stored_searchable] }
|
26
|
-
it "passes that to index_obj" do
|
27
|
-
global_indexer.index(index_obj)
|
28
|
-
|
29
|
-
expect(index_obj).to have_received(:as).with(:symbol, :stored_searchable)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
context "with no index types" do
|
33
|
-
let(:global_indexer) { described_class.new }
|
34
|
-
it "does not pass anything to index_obj" do
|
35
|
-
global_indexer.index(index_obj)
|
36
|
-
|
37
|
-
expect(index_obj).not_to have_received(:as)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,25 +0,0 @@
|
|
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
|
@@ -1,27 +0,0 @@
|
|
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
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::IndexingService do
|
4
|
-
let(:indexer) { described_class.new(object) }
|
5
|
-
let(:object) { ActiveFedora::Base.new }
|
6
|
-
|
7
|
-
describe "#generate_solr_document" do
|
8
|
-
context "when no block is passed" do
|
9
|
-
subject(:solr_doc) { indexer.generate_solr_document }
|
10
|
-
it "produces a document" do
|
11
|
-
expect(solr_doc['has_model_ssim']).to eq ['ActiveFedora::Base']
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context "when a block is passed" do
|
16
|
-
subject(:solr_doc) do
|
17
|
-
indexer.generate_solr_document do |solr_doc|
|
18
|
-
solr_doc['noid'] = '12345'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
it "produces and yield the document" do
|
23
|
-
expect(solr_doc['has_model_ssim']).to eq ['ActiveFedora::Base']
|
24
|
-
expect(solr_doc['noid']).to eq '12345'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/spec/unit/indexing_spec.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::Indexing do
|
4
|
-
describe '.indexer' do
|
5
|
-
let(:indexing_class) { Class.new }
|
6
|
-
let(:klass) { Class.new }
|
7
|
-
before do
|
8
|
-
klass.include described_class
|
9
|
-
end
|
10
|
-
|
11
|
-
it "is settable as a class attribute" do
|
12
|
-
expect(klass.indexer).to eq ActiveFedora::IndexingService
|
13
|
-
klass.indexer = indexing_class
|
14
|
-
expect(klass.indexer).to eq indexing_class
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "internal methods" do
|
19
|
-
before :all do
|
20
|
-
class SpecNode
|
21
|
-
include ActiveFedora::Indexing
|
22
|
-
end
|
23
|
-
end
|
24
|
-
after :all do
|
25
|
-
Object.send(:remove_const, :SpecNode)
|
26
|
-
end
|
27
|
-
|
28
|
-
subject(:node) { SpecNode.new }
|
29
|
-
|
30
|
-
describe "#create_needs_index?" do
|
31
|
-
subject { SpecNode.new.send(:create_needs_index?) }
|
32
|
-
it { is_expected.to be true }
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#update_needs_index?" do
|
36
|
-
subject { SpecNode.new.send(:update_needs_index?) }
|
37
|
-
it { is_expected.to be true }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "#to_solr" do
|
42
|
-
before :all do
|
43
|
-
class SpecNode < ActiveFedora::Base
|
44
|
-
property :title, predicate: ::RDF::Vocab::DC.title do |index|
|
45
|
-
index.as :stored_searchable
|
46
|
-
end
|
47
|
-
property :abstract, predicate: ::RDF::Vocab::DC.abstract, multiple: false do |index|
|
48
|
-
index.as :stored_sortable
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
after :all do
|
53
|
-
Object.send(:remove_const, :SpecNode)
|
54
|
-
end
|
55
|
-
|
56
|
-
subject(:solr_doc) { test_object.to_solr }
|
57
|
-
let(:test_object) { SpecNode.new(title: ['first title'], abstract: 'The abstract') }
|
58
|
-
|
59
|
-
it "indexs the rdf properties" do
|
60
|
-
expect(solr_doc).to include('title_tesim' => ['first title'], 'abstract_ssi' => 'The abstract')
|
61
|
-
end
|
62
|
-
|
63
|
-
it "adds id, system_create_date, system_modified_date from object attributes" do
|
64
|
-
expect(test_object).to receive(:create_date).and_return(DateTime.parse("2012-03-04T03:12:02Z")).twice
|
65
|
-
expect(test_object).to receive(:modified_date).and_return(DateTime.parse("2012-03-07T03:12:02Z")).twice
|
66
|
-
allow(test_object).to receive(:id).and_return('changeme:123')
|
67
|
-
solr_doc = test_object.to_solr
|
68
|
-
expect(solr_doc[ActiveFedora.index_field_mapper.solr_name("system_create", :stored_sortable, type: :date)]).to eql("2012-03-04T03:12:02Z")
|
69
|
-
expect(solr_doc[ActiveFedora.index_field_mapper.solr_name("system_modified", :stored_sortable, type: :date)]).to eql("2012-03-07T03:12:02Z")
|
70
|
-
expect(solr_doc[:id]).to eql("changeme:123")
|
71
|
-
end
|
72
|
-
|
73
|
-
context "with attached files" do
|
74
|
-
let(:mock1) { instance_double(ActiveFedora::File) }
|
75
|
-
let(:mock2) { instance_double(ActiveFedora::File) }
|
76
|
-
|
77
|
-
it "calls .to_solr on all datastreams, passing the resulting document to solr" do
|
78
|
-
expect(mock1).to receive(:to_solr).and_return("one" => "title one")
|
79
|
-
expect(mock2).to receive(:to_solr).and_return("two" => "title two")
|
80
|
-
|
81
|
-
allow(test_object).to receive(:declared_attached_files).and_return(ds1: mock1, ds2: mock2)
|
82
|
-
expect(solr_doc).to include('one' => 'title one', 'two' => 'title two')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|