active-fedora 11.0.0.rc6 → 11.0.0.rc7
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 +4 -4
- data/active-fedora.gemspec +0 -3
- data/lib/active_fedora.rb +0 -10
- data/lib/active_fedora/associations/has_many_association.rb +1 -1
- data/lib/active_fedora/attributes.rb +1 -1
- data/lib/active_fedora/base.rb +3 -7
- data/lib/active_fedora/querying.rb +1 -1
- data/lib/active_fedora/rdf.rb +0 -1
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/attached_files_spec.rb +14 -4
- data/spec/integration/file_spec.rb +22 -23
- data/spec/integration/versionable_spec.rb +0 -254
- data/spec/spec_helper.rb +0 -7
- data/spec/unit/attached_files_spec.rb +10 -7
- data/spec/unit/base_spec.rb +3 -1
- data/spec/unit/has_many_association_spec.rb +23 -8
- data/spec/unit/inheritance_spec.rb +11 -7
- data/spec/unit/model_classifier_spec.rb +1 -1
- data/spec/unit/rdf/indexing_service_spec.rb +9 -9
- data/spec/unit/solr_config_options_spec.rb +12 -15
- metadata +2 -67
- data/lib/active_fedora/datastreams.rb +0 -6
- data/lib/active_fedora/datastreams/nokogiri_datastreams.rb +0 -119
- data/lib/active_fedora/nom_datastream.rb +0 -73
- data/lib/active_fedora/om_datastream.rb +0 -118
- data/lib/active_fedora/qualified_dublin_core_datastream.rb +0 -158
- data/lib/active_fedora/rdf/datastream_indexing.rb +0 -49
- data/lib/active_fedora/rdf/ntriples_rdf_datastream.rb +0 -13
- data/lib/active_fedora/rdf/rdf_datastream.rb +0 -173
- data/lib/active_fedora/rdf/rdfxml_datastream.rb +0 -13
- data/spec/integration/complex_rdf_datastream_spec.rb +0 -227
- data/spec/integration/datastream_rdf_nested_attributes_spec.rb +0 -180
- data/spec/integration/ntriples_datastream_spec.rb +0 -215
- data/spec/integration/om_datastream_spec.rb +0 -78
- data/spec/samples/hydra-mods_article_datastream.rb +0 -515
- data/spec/samples/models/mods_article.rb +0 -9
- data/spec/samples/samples.rb +0 -2
- data/spec/unit/nom_datastream_spec.rb +0 -60
- data/spec/unit/ntriples_datastream_spec.rb +0 -167
- data/spec/unit/om_datastream_spec.rb +0 -294
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +0 -119
- data/spec/unit/rdf_datastream_spec.rb +0 -84
- data/spec/unit/rdf_resource_datastream_spec.rb +0 -208
- data/spec/unit/rdfxml_datastream_spec.rb +0 -106
@@ -1,9 +0,0 @@
|
|
1
|
-
require "active-fedora"
|
2
|
-
require_relative '../hydra-mods_article_datastream.rb'
|
3
|
-
|
4
|
-
# This Model is used to load & index the test:fixture_mods_article1 fixture for use in tests.
|
5
|
-
#
|
6
|
-
# See lib/samples/sample_thing.rb for a fuller, annotated example of an ActiveFedora Model
|
7
|
-
class ModsArticle < ActiveFedora::Base
|
8
|
-
has_subresource "descMetadata", class_name: 'Hydra::ModsArticleDatastream'
|
9
|
-
end
|
data/spec/samples/samples.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::NomDatastream do
|
4
|
-
describe "test" do
|
5
|
-
subject(:datastream) {
|
6
|
-
class MyNomDatastream < ActiveFedora::NomDatastream
|
7
|
-
set_terminology do |t|
|
8
|
-
t.a path: '//a', accessor: lambda { |x| x.text }, index: 'a_s'
|
9
|
-
t.b path: '//b', index: 'b_s'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
MyNomDatastream.new
|
14
|
-
}
|
15
|
-
before do
|
16
|
-
datastream.content = '<root><a>123</a><b><c>asdf</c></b></root>'
|
17
|
-
end
|
18
|
-
|
19
|
-
it "works" do
|
20
|
-
expect(datastream.a).to include("123")
|
21
|
-
end
|
22
|
-
|
23
|
-
it "to_solrs" do
|
24
|
-
expect(datastream.to_solr['a_s']).to include('123')
|
25
|
-
expect(datastream.to_solr['b_s']).to include('asdf')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "with options for .set_terminology" do
|
30
|
-
subject(:datastream) {
|
31
|
-
class TerminologyOptions < ActiveFedora::NomDatastream
|
32
|
-
set_terminology(namespaces: {
|
33
|
-
'dc' => "http://purl.org/dc/elements/1.1/",
|
34
|
-
'dcterms' => "http://purl.org/dc/terms/"
|
35
|
-
}) do |t|
|
36
|
-
t.a path: 'a', xmlns: 'dc', accessor: lambda { |x| x.text }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
TerminologyOptions.new
|
41
|
-
}
|
42
|
-
|
43
|
-
before do
|
44
|
-
datastream.content = %(
|
45
|
-
<root
|
46
|
-
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
47
|
-
xmlns:dcterms="http://purl.org/dc/terms/"
|
48
|
-
>
|
49
|
-
<dc:a>123</dc:a>
|
50
|
-
<dcterms:a>not-part-of-a</dcterms:a>
|
51
|
-
<dcterms:b>abcd</dcterms:b>
|
52
|
-
</root>
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "scopes #a attribute to only the dc namespace" do
|
57
|
-
expect(datastream.a).to eq ["123"]
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,167 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::NtriplesRDFDatastream do
|
4
|
-
let(:remote_content) do
|
5
|
-
<<EOF
|
6
|
-
<#{ActiveFedora.fedora.host}/test/test:1> <http://purl.org/dc/terms/created> "2010-12-31"^^<http://www.w3.org/2001/XMLSchema#date> .
|
7
|
-
<#{ActiveFedora.fedora.host}/test/test:1> <http://purl.org/dc/terms/title> "Title of work" .
|
8
|
-
<#{ActiveFedora.fedora.host}/test/test:1> <http://purl.org/dc/terms/publisher> "Penn State" .
|
9
|
-
<#{ActiveFedora.fedora.host}/test/test:1> <http://xmlns.com/foaf/0.1/based_near> "New York, NY, US" .
|
10
|
-
<#{ActiveFedora.fedora.host}/test/test:1> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://google.com/> .
|
11
|
-
<#{ActiveFedora.fedora.host}/test/test:1/content> <http://purl.org/dc/terms/title> "Title of datastream" .
|
12
|
-
EOF
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "an instance with content" do
|
16
|
-
before do
|
17
|
-
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
18
|
-
property :created, predicate: ::RDF::Vocab::DC.created
|
19
|
-
property :title, predicate: ::RDF::Vocab::DC.title
|
20
|
-
property :publisher, predicate: ::RDF::Vocab::DC.publisher
|
21
|
-
property :creator, predicate: ::RDF::Vocab::DC.creator
|
22
|
-
property :educationLevel, predicate: ::RDF::Vocab::DC.educationLevel
|
23
|
-
property :based_near, predicate: ::RDF::Vocab::FOAF.based_near
|
24
|
-
property :related_url, predicate: ::RDF::Vocab::RDFS.seeAlso
|
25
|
-
end
|
26
|
-
@subject = MyDatastream.new(ActiveFedora::Base.id_to_uri('/test:1/descMetadata'))
|
27
|
-
@subject.content = remote_content
|
28
|
-
end
|
29
|
-
after do
|
30
|
-
Object.send(:remove_const, :MyDatastream)
|
31
|
-
end
|
32
|
-
it "has a subject" do
|
33
|
-
expect(@subject.rdf_subject).to eq "#{ActiveFedora.fedora.host}/test/test:1"
|
34
|
-
end
|
35
|
-
it "has mime_type" do
|
36
|
-
expect(@subject.mime_type).to eq 'text/plain'
|
37
|
-
end
|
38
|
-
it "has fields" do
|
39
|
-
expect(@subject.created).to eq [Date.parse('2010-12-31')]
|
40
|
-
expect(@subject.title).to eq ["Title of work"]
|
41
|
-
expect(@subject.publisher).to eq ["Penn State"]
|
42
|
-
expect(@subject.based_near).to eq ["New York, NY, US"]
|
43
|
-
expect(@subject.related_url.length).to eq 1
|
44
|
-
expect(@subject.related_url.first.rdf_subject).to eq "http://google.com/"
|
45
|
-
end
|
46
|
-
|
47
|
-
it "is able to call enumerable methods on the fields" do
|
48
|
-
expect(@subject.title.join(', ')).to eq "Title of work"
|
49
|
-
expect(@subject.title.count).to eq 1
|
50
|
-
expect(@subject.title.size).to eq 1
|
51
|
-
expect(@subject.title[0]).to eq "Title of work"
|
52
|
-
expect(@subject.title.to_a).to eq ["Title of work"]
|
53
|
-
val = []
|
54
|
-
@subject.title.each_with_index { |v, i| val << "#{i}. #{v}" }
|
55
|
-
expect(val).to eq ["0. Title of work"]
|
56
|
-
end
|
57
|
-
|
58
|
-
it "has method missing" do
|
59
|
-
expect(lambda { @subject.frank }).to raise_exception NoMethodError
|
60
|
-
end
|
61
|
-
|
62
|
-
it "sets fields" do
|
63
|
-
@subject.publisher = "St. Martin's Press"
|
64
|
-
expect(@subject.publisher).to eq ["St. Martin's Press"]
|
65
|
-
end
|
66
|
-
it "sets rdf literal fields" do
|
67
|
-
@subject.creator = RDF.Literal("Geoff Ryman")
|
68
|
-
expect(@subject.creator).to eq ["Geoff Ryman"]
|
69
|
-
end
|
70
|
-
it "appends fields" do
|
71
|
-
@subject.publisher << "St. Martin's Press"
|
72
|
-
expect(@subject.publisher).to contain_exactly "Penn State", "St. Martin's Press"
|
73
|
-
end
|
74
|
-
it "deletes fields" do
|
75
|
-
@subject.related_url.delete(RDF::URI("http://google.com/"))
|
76
|
-
expect(@subject.related_url).to eq []
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "some dummy instances" do
|
81
|
-
before do
|
82
|
-
@one = ActiveFedora::RDFDatastream.new
|
83
|
-
@two = ActiveFedora::RDFDatastream.new
|
84
|
-
end
|
85
|
-
it "generates predictable prexies" do
|
86
|
-
expect(@one.send(:apply_prefix, "baz", 'myFoobar')).to eq 'my_foobar__baz'
|
87
|
-
expect(@two.send(:apply_prefix, "baz", 'myQuix')).to eq 'my_quix__baz'
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "an instance with a custom subject" do
|
92
|
-
before do
|
93
|
-
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
94
|
-
rdf_subject { |ds| "#{ActiveFedora.fedora.host}/test/#{ds.id}/content" }
|
95
|
-
property :created, predicate: ::RDF::Vocab::DC.created
|
96
|
-
property :title, predicate: ::RDF::Vocab::DC.title
|
97
|
-
property :publisher, predicate: ::RDF::Vocab::DC.publisher
|
98
|
-
property :based_near, predicate: ::RDF::Vocab::FOAF.based_near
|
99
|
-
property :related_url, predicate: ::RDF::Vocab::RDFS.seeAlso
|
100
|
-
end
|
101
|
-
@subject = MyDatastream.new
|
102
|
-
allow(@subject).to receive(:id).and_return 'test:1'
|
103
|
-
allow(@subject).to receive(:new_record?).and_return false
|
104
|
-
allow(@subject).to receive(:remote_content).and_return remote_content
|
105
|
-
end
|
106
|
-
|
107
|
-
after do
|
108
|
-
Object.send(:remove_const, :MyDatastream)
|
109
|
-
end
|
110
|
-
|
111
|
-
it "has fields" do
|
112
|
-
expect(@subject.title).to eq ["Title of datastream"]
|
113
|
-
end
|
114
|
-
|
115
|
-
it "has a custom subject" do
|
116
|
-
expect(@subject.rdf_subject).to eq "#{ActiveFedora.fedora.host}/test/test:1/content"
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe "a new instance" do
|
121
|
-
before do
|
122
|
-
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
123
|
-
property :publisher, predicate: ::RDF::Vocab::DC.publisher
|
124
|
-
end
|
125
|
-
@subject = MyDatastream.new
|
126
|
-
end
|
127
|
-
|
128
|
-
after do
|
129
|
-
Object.send(:remove_const, :MyDatastream)
|
130
|
-
end
|
131
|
-
|
132
|
-
xit "supports to_s method" do
|
133
|
-
expect(@subject.publisher.to_s).to eq [].to_s
|
134
|
-
@subject.publisher = "Bob"
|
135
|
-
expect(@subject.publisher.to_s).to eq ["Bob"].to_s
|
136
|
-
@subject.publisher << "Jim"
|
137
|
-
expect(@subject.publisher.to_s).to eq ["Bob", "Jim"].to_s
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
describe "solr integration" do
|
142
|
-
before(:all) do
|
143
|
-
class MyDatastream < ActiveFedora::NtriplesRDFDatastream
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
after(:all) do
|
148
|
-
Object.send(:remove_const, :MyDatastream)
|
149
|
-
end
|
150
|
-
|
151
|
-
before(:each) do
|
152
|
-
@subject = MyDatastream.new
|
153
|
-
@subject.content = File.new('spec/fixtures/solr_rdf_descMetadata.nt').read
|
154
|
-
@subject.serialize
|
155
|
-
end
|
156
|
-
|
157
|
-
it "provides .to_solr and return a SolrDocument" do
|
158
|
-
expect(@subject).to respond_to(:to_solr)
|
159
|
-
expect(@subject.to_solr).to be_kind_of(Hash)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "optionally allows you to provide the Solr::Document to add fields to and return that document when done" do
|
163
|
-
doc = {}
|
164
|
-
expect(@subject.to_solr(doc)).to eq doc
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
@@ -1,294 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ActiveFedora::OmDatastream do
|
4
|
-
subject(:datastream) { described_class.new }
|
5
|
-
it { should be_metadata }
|
6
|
-
|
7
|
-
it "includes the Solrizer::XML::TerminologyBasedSolrizer for .to_solr support" do
|
8
|
-
expect(described_class.included_modules).to include(OM::XML::TerminologyBasedSolrizer)
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#new' do
|
12
|
-
it 'loads xml from blob if provided' do
|
13
|
-
test_ds1 = described_class.new
|
14
|
-
test_ds1.content = "<xml><foo/></xml>"
|
15
|
-
expect(test_ds1.ng_xml.to_xml).to be_equivalent_to("<?xml version=\"1.0\"?>\n<xml>\n <foo/>\n</xml>\n")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "initializes from #xml_template if no xml is provided" do
|
19
|
-
expect(described_class).to receive(:xml_template).and_return("<fake template/>")
|
20
|
-
n = described_class.new
|
21
|
-
expect(n.ng_xml).to be_equivalent_to("<fake template/>")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#prefix" do
|
26
|
-
subject(:datastream) { described_class.new }
|
27
|
-
it "reflects the dsid" do
|
28
|
-
expect(datastream.send(:prefix, 'descMetadata')).to eq "desc_metadata__"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe '#xml_template' do
|
33
|
-
subject(:datastream) { described_class.xml_template.to_xml }
|
34
|
-
it "returns an empty xml document" do
|
35
|
-
expect(datastream).to be_equivalent_to("<?xml version=\"1.0\"?>\n<xml/>\n")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "to_solr" do
|
40
|
-
describe "with a dsid" do
|
41
|
-
subject { described_class.new.to_solr }
|
42
|
-
it { should be_empty }
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "when prefix is set" do
|
46
|
-
before do
|
47
|
-
class MyDatastream < ActiveFedora::OmDatastream
|
48
|
-
set_terminology do |t|
|
49
|
-
t.root(path: "mods")
|
50
|
-
t.title(index_as: [:stored_searchable])
|
51
|
-
end
|
52
|
-
|
53
|
-
def prefix(_)
|
54
|
-
"foo__"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
datastream.title = 'Science'
|
58
|
-
end
|
59
|
-
after do
|
60
|
-
Object.send(:remove_const, :MyDatastream)
|
61
|
-
end
|
62
|
-
subject(:datastream) { MyDatastream.new }
|
63
|
-
it "uses the prefix" do
|
64
|
-
expect(datastream.to_solr).to have_key('foo__title_tesim')
|
65
|
-
end
|
66
|
-
it "does not prefix fields that aren't defined by this datastream" do
|
67
|
-
expect(datastream.to_solr('id' => 'test:123')).to have_key('id')
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe ".update_indexed_attributes" do
|
73
|
-
before(:each) do
|
74
|
-
@mods_ds = Hydra::ModsArticleDatastream.new
|
75
|
-
@mods_ds.content = fixture(File.join("mods_articles", "mods_article1.xml")).read
|
76
|
-
end
|
77
|
-
|
78
|
-
it "applies submitted hash to corresponding datastream field values" do
|
79
|
-
result = @mods_ds.update_indexed_attributes([{ ":person" => "0" }, "role"] => { "0" => "role1", "1" => "role2", "2" => "role3" })
|
80
|
-
expect(result).to eq("person_0_role" => ["role1", "role2", "role3"])
|
81
|
-
expect(@mods_ds.property_values('//oxns:name[@type="personal"][1]/oxns:role')).to eq ["role1", "role2", "role3"]
|
82
|
-
end
|
83
|
-
it "supports single-value arguments (as opposed to a hash of values with array indexes as keys)" do
|
84
|
-
# In other words, { "fubar"=>"dork" } should have the same effect as { "fubar"=>{"0"=>"dork"} }
|
85
|
-
result = @mods_ds.update_indexed_attributes([{ ":person" => "0" }, "role"] => "the role")
|
86
|
-
expect(result).to eq("person_0_role" => ["the role"])
|
87
|
-
expect(@mods_ds.term_values('//oxns:name[@type="personal"][1]/oxns:role').first).to eq "the role"
|
88
|
-
end
|
89
|
-
it "does nothing if field key is a string (must be an array or symbol). Will not accept xpath queries!" do
|
90
|
-
xml_before = @mods_ds.to_xml
|
91
|
-
expect(ActiveFedora::Base.logger).to receive(:warn).with "WARNING: Hydra::ModsArticleDatastream ignoring {\"fubar\" => \"the role\"} because \"fubar\" is a String (only valid OM Term Pointers will be used). Make sure your html has the correct field_selector tags in it."
|
92
|
-
expect(@mods_ds.update_indexed_attributes("fubar" => "the role")).to eq({})
|
93
|
-
expect(@mods_ds.to_xml).to eq xml_before
|
94
|
-
end
|
95
|
-
it "does nothing if there is no accessor corresponding to the given field key" do
|
96
|
-
xml_before = @mods_ds.to_xml
|
97
|
-
expect(@mods_ds.update_indexed_attributes([{ "fubar" => "0" }] => "the role")).to eq({})
|
98
|
-
expect(@mods_ds.to_xml).to eq xml_before
|
99
|
-
end
|
100
|
-
|
101
|
-
### Examples copied over form metadata_datastream_spec
|
102
|
-
|
103
|
-
it "works for text fields" do
|
104
|
-
att = { [{ "person" => "0" }, "description"] => { "-1" => "mork", "1" => "york" } }
|
105
|
-
result = @mods_ds.update_indexed_attributes(att)
|
106
|
-
expect(result).to eq("person_0_description" => ["mork", "york"])
|
107
|
-
expect(@mods_ds.get_values([{ person: 0 }, :description])).to eq ['mork', 'york']
|
108
|
-
att = { [{ "person" => "0" }, "description"] => { "-1" => "dork" } }
|
109
|
-
result2 = @mods_ds.update_indexed_attributes(att)
|
110
|
-
expect(result2).to eq("person_0_description" => ["dork"])
|
111
|
-
expect(@mods_ds.get_values([{ person: 0 }, :description])).to eq ['dork']
|
112
|
-
end
|
113
|
-
|
114
|
-
it "allows deleting of values and should delete values so that to_xml does not return emtpy nodes" do
|
115
|
-
att = { [{ "person" => "0" }, "description"] => { "0" => "york", "1" => "mangle", "2" => "mork" } }
|
116
|
-
@mods_ds.update_indexed_attributes(att)
|
117
|
-
expect(@mods_ds.get_values([{ "person" => "0" }, "description"])).to eq ['york', 'mangle', 'mork']
|
118
|
-
|
119
|
-
@mods_ds.update_indexed_attributes([{ "person" => "0" }, { "description" => '1' }] => nil)
|
120
|
-
expect(@mods_ds.get_values([{ "person" => "0" }, "description"])).to eq ['york', 'mork']
|
121
|
-
|
122
|
-
@mods_ds.update_indexed_attributes([{ "person" => "0" }, { "description" => '0' }] => :delete)
|
123
|
-
expect(@mods_ds.get_values([{ "person" => "0" }, "description"])).to eq ['mork']
|
124
|
-
end
|
125
|
-
|
126
|
-
it "sets changed to true" do
|
127
|
-
expect(@mods_ds.get_values([{ title_info: 0 }, :main_title])).to eq ["ARTICLE TITLE", "TITLE OF HOST JOURNAL"]
|
128
|
-
@mods_ds.update_indexed_attributes [{ "title_info" => "0" }, "main_title"] => { "-1" => "mork" }
|
129
|
-
expect(@mods_ds).to be_changed
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
describe ".get_values" do
|
134
|
-
before(:each) do
|
135
|
-
@mods_ds = Hydra::ModsArticleDatastream.new
|
136
|
-
@mods_ds.content = fixture(File.join("mods_articles", "mods_article1.xml")).read
|
137
|
-
end
|
138
|
-
|
139
|
-
it "calls lookup with field_name and return the text values from each resulting node" do
|
140
|
-
expect(@mods_ds).to receive(:term_values).with("--my xpath--").and_return(["value1", "value2"])
|
141
|
-
expect(@mods_ds.get_values("--my xpath--")).to eq ["value1", "value2"]
|
142
|
-
end
|
143
|
-
it "assumes that field_names that are strings are xpath queries" do
|
144
|
-
expect(described_class).to receive(:accessor_xpath).never
|
145
|
-
expect(@mods_ds).to receive(:term_values).with("--my xpath--").and_return(["abstract1", "abstract2"])
|
146
|
-
expect(@mods_ds.get_values("--my xpath--")).to eq ["abstract1", "abstract2"]
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
describe '.save' do
|
151
|
-
let(:base_path) { '/foo' }
|
152
|
-
|
153
|
-
let(:ldp_source) { Ldp::Resource.new(mock_client, nil, nil, base_path) }
|
154
|
-
|
155
|
-
let(:conn_stubs) do
|
156
|
-
Faraday::Adapter::Test::Stubs.new do |stub|
|
157
|
-
stub.post(base_path) { [200, { 'Last-Modified' => 'Tue, 22 Jul 2014 02:23:32 GMT' }] }
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
let(:mock_conn) do
|
162
|
-
Faraday.new do |builder|
|
163
|
-
builder.adapter :test, conn_stubs do |_stub|
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
let :mock_client do
|
169
|
-
Ldp::Client.new mock_conn
|
170
|
-
end
|
171
|
-
|
172
|
-
before do
|
173
|
-
allow(datastream).to receive(:ldp_source).and_return(ldp_source)
|
174
|
-
end
|
175
|
-
|
176
|
-
it "persists the product of .to_xml in fedora" do
|
177
|
-
datastream.serialize!
|
178
|
-
datastream.save
|
179
|
-
expect(datastream.mime_type).to eq 'text/xml'
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
describe 'setting content' do
|
184
|
-
subject(:datastream) { described_class.new }
|
185
|
-
before { datastream.content = "<a />" }
|
186
|
-
|
187
|
-
it "updates the content" do
|
188
|
-
expect(datastream.content).to eq "<?xml version=\"1.0\"?>\n<a/>"
|
189
|
-
end
|
190
|
-
|
191
|
-
it "marks the object as changed" do
|
192
|
-
expect(datastream).to be_changed
|
193
|
-
end
|
194
|
-
|
195
|
-
it "update ngxml and mark the xml as loaded" do
|
196
|
-
expect(datastream.ng_xml.to_xml).to match(/<a\/>/)
|
197
|
-
expect(datastream.xml_loaded).to be true
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
describe 'ng_xml=' do
|
202
|
-
let(:sample_raw_xml) { "<foo><xmlelement/></foo>" }
|
203
|
-
|
204
|
-
subject(:datastream) { described_class.new }
|
205
|
-
|
206
|
-
it "parses raw xml for you" do
|
207
|
-
datastream.ng_xml = sample_raw_xml
|
208
|
-
expect(datastream.ng_xml).to be_kind_of Nokogiri::XML::Document
|
209
|
-
expect(datastream.ng_xml.to_xml).to be_equivalent_to(sample_raw_xml)
|
210
|
-
end
|
211
|
-
|
212
|
-
it "alwayses set a document when an Element is passed" do
|
213
|
-
datastream.ng_xml = Nokogiri::XML(sample_raw_xml).xpath('//xmlelement').first
|
214
|
-
expect(datastream.ng_xml).to be_kind_of Nokogiri::XML::Document
|
215
|
-
expect(datastream.ng_xml.to_xml).to be_equivalent_to("<xmlelement/>")
|
216
|
-
end
|
217
|
-
|
218
|
-
it "marks the datastream as changed" do
|
219
|
-
expect {
|
220
|
-
datastream.ng_xml = sample_raw_xml
|
221
|
-
}.to change { datastream.changed? }.from(false).to(true)
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
describe '.to_xml' do
|
226
|
-
let(:doc) { Nokogiri::XML::Document.parse("<text_document/>") }
|
227
|
-
|
228
|
-
it "ng_xml.to_xmls" do
|
229
|
-
allow(datastream).to receive(:ng_xml).and_return(doc)
|
230
|
-
expect(datastream.to_xml).to eq "<?xml version=\"1.0\"?>\n<text_document/>"
|
231
|
-
end
|
232
|
-
|
233
|
-
it 'accepts an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
|
234
|
-
expect(doc.root).to receive(:add_child) # .with(test_ds.ng_xml.root)
|
235
|
-
datastream.to_xml(doc)
|
236
|
-
end
|
237
|
-
|
238
|
-
context "with some existing content" do
|
239
|
-
before do
|
240
|
-
datastream.content = "<test_xml/>"
|
241
|
-
end
|
242
|
-
it 'accepts an optional Nokogiri::XML Document as an argument and insert its fields into that (functional test)' do
|
243
|
-
expected_result = "<test_document><foo/><test_xml/></test_document>"
|
244
|
-
doc = Nokogiri::XML::Document.parse("<test_document><foo/></test_document>")
|
245
|
-
result = datastream.to_xml(doc)
|
246
|
-
expect(doc).to be_equivalent_to expected_result
|
247
|
-
expect(result).to be_equivalent_to expected_result
|
248
|
-
end
|
249
|
-
|
250
|
-
it 'adds to root of Nokogiri::XML::Documents, but add directly to the elements if a Nokogiri::XML::Node is passed in' do
|
251
|
-
doc = Nokogiri::XML::Document.parse("<test_document/>")
|
252
|
-
el = Nokogiri::XML::Node.new("test_element", Nokogiri::XML::Document.new)
|
253
|
-
expect(datastream.to_xml(doc)).to be_equivalent_to "<test_document><test_xml/></test_document>"
|
254
|
-
expect(datastream.to_xml(el)).to be_equivalent_to "<test_element/>"
|
255
|
-
end
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
describe '.update_values' do
|
260
|
-
subject(:datastream) { described_class.new }
|
261
|
-
|
262
|
-
before { datastream.content = fixture(File.join("mods_articles", "mods_article1.xml")).read }
|
263
|
-
|
264
|
-
it "updates a value internally call OM::XML::TermValueOperators::update_values if internal_solr_doc is not set" do
|
265
|
-
expect(datastream).to receive(:om_update_values)
|
266
|
-
datastream.update_values([{ ":person" => "0" }, "role", "text"] => { "0" => "role1", "1" => "role2", "2" => "role3" })
|
267
|
-
end
|
268
|
-
|
269
|
-
it "sets changed to true" do
|
270
|
-
datastream.update_values([{ ":person" => "0" }, "role", "text"] => { "0" => "role1", "1" => "role2", "2" => "role3" })
|
271
|
-
expect(datastream).to be_changed
|
272
|
-
end
|
273
|
-
end
|
274
|
-
|
275
|
-
describe "an instance that exists in the datastore, but hasn't been loaded" do
|
276
|
-
before do
|
277
|
-
class MyObj < ActiveFedora::Base
|
278
|
-
has_subresource 'descMetadata', class_name: 'Hydra::ModsArticleDatastream'
|
279
|
-
end
|
280
|
-
@obj = MyObj.new
|
281
|
-
@obj.descMetadata.title = 'Foobar'
|
282
|
-
@obj.save
|
283
|
-
end
|
284
|
-
after do
|
285
|
-
@obj.destroy
|
286
|
-
Object.send(:remove_const, :MyObj)
|
287
|
-
end
|
288
|
-
subject(:datastream) { @obj.reload.descMetadata }
|
289
|
-
it "does not load the descMetadata datastream when calling content_changed?" do
|
290
|
-
expect(@obj).to_not receive(:content)
|
291
|
-
expect(datastream).to_not be_content_changed
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|