harvestdor 0.0.13 → 0.0.14
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/.coveralls.yml +1 -0
- data/.travis.yml +0 -2
- data/Gemfile +4 -0
- data/README.rdoc +2 -1
- data/harvestdor.gemspec +2 -2
- data/lib/harvestdor/purl_xml.rb +1 -1
- data/lib/harvestdor/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/content_metadata.yml +98 -0
- data/spec/fixtures/vcr_cassettes/dc.yml +98 -0
- data/spec/fixtures/vcr_cassettes/headers.yml +42 -0
- data/spec/fixtures/vcr_cassettes/headers_with_resumption.yml +10377 -0
- data/spec/fixtures/vcr_cassettes/identity_metadata.yml +98 -0
- data/spec/fixtures/vcr_cassettes/jt959wc5586_prod.yml +126 -0
- data/spec/fixtures/vcr_cassettes/jt959wc5586_test.yml +125 -0
- data/spec/fixtures/vcr_cassettes/missing_purl.yml +77 -0
- data/spec/fixtures/vcr_cassettes/prod_headers.yml +42 -0
- data/spec/fixtures/vcr_cassettes/prod_records.yml +2454 -0
- data/spec/fixtures/vcr_cassettes/public_xml.yml +98 -0
- data/spec/fixtures/vcr_cassettes/purl_mods.yml +93 -0
- data/spec/fixtures/vcr_cassettes/rdf.yml +98 -0
- data/spec/fixtures/vcr_cassettes/records.yml +214 -0
- data/spec/fixtures/vcr_cassettes/rights_metadata.yml +98 -0
- data/spec/harvestdor_spec.rb +3 -3
- data/spec/oai_harvest_spec.rb +51 -51
- data/spec/oai_integration_spec.rb +55 -41
- data/spec/purl_xml_spec.rb +78 -62
- data/spec/spec_helper.rb +8 -12
- metadata +100 -68
data/spec/oai_harvest_spec.rb
CHANGED
@@ -12,9 +12,9 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
12
12
|
describe "druids_via_oai" do
|
13
13
|
before(:each) do
|
14
14
|
oai_response = double('oai_response')
|
15
|
-
oai_response.
|
16
|
-
oai_response.
|
17
|
-
@harvestdor_client.oai_client.
|
15
|
+
allow(oai_response).to receive(:entries).and_return(['foo', 'bar'])
|
16
|
+
allow(oai_response).to receive(:resumption_token).and_return('')
|
17
|
+
allow(@harvestdor_client.oai_client).to receive(:list_identifiers).with(an_instance_of(Hash)) {
|
18
18
|
oai_response
|
19
19
|
}
|
20
20
|
end
|
@@ -24,14 +24,14 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
24
24
|
header2 = OAI::Header.new(nil)
|
25
25
|
header2.identifier = 'oai:searchworks.stanford.edu/druid:bar'
|
26
26
|
oai_response = double('oai_response')
|
27
|
-
oai_response.
|
28
|
-
@harvestdor_client.druids_via_oai.
|
27
|
+
allow(oai_response).to receive(:entries).and_return([header1, header2])
|
28
|
+
expect(@harvestdor_client.druids_via_oai).to eql(['foo', 'bar'])
|
29
29
|
end
|
30
30
|
it "should have results viewable as an array" do
|
31
|
-
@harvestdor_client.druids_via_oai.
|
31
|
+
expect(@harvestdor_client.druids_via_oai).to be_an_instance_of(Array)
|
32
32
|
end
|
33
33
|
it "should have enumerable results" do
|
34
|
-
@harvestdor_client.druids_via_oai.
|
34
|
+
expect(@harvestdor_client.druids_via_oai).to respond_to(:each, :count)
|
35
35
|
end
|
36
36
|
it "should yield to a passed block" do
|
37
37
|
expect { |b| @harvestdor_client.druids_via_oai(&b) }.to yield_successive_args('foo', 'bar')
|
@@ -41,9 +41,9 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
41
41
|
describe "oai_records" do
|
42
42
|
before(:each) do
|
43
43
|
@oai_response = double('oai_response')
|
44
|
-
@oai_response.
|
45
|
-
@oai_response.
|
46
|
-
@harvestdor_client.oai_client.
|
44
|
+
allow(@oai_response).to receive(:entries).and_return([1, 2])
|
45
|
+
allow(@oai_response).to receive(:resumption_token).and_return('')
|
46
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
47
47
|
@oai_response
|
48
48
|
}
|
49
49
|
end
|
@@ -56,14 +56,14 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
56
56
|
header2.identifier = 'oai:searchworks.stanford.edu/druid:bar'
|
57
57
|
oai_rec2 = OAI::Record.new(nil)
|
58
58
|
oai_rec2.header = header2
|
59
|
-
@oai_response.
|
60
|
-
@harvestdor_client.oai_records.
|
59
|
+
allow(@oai_response).to receive(:entries).and_return([oai_rec1, oai_rec2])
|
60
|
+
expect(@harvestdor_client.oai_records).to eql([oai_rec1, oai_rec2])
|
61
61
|
end
|
62
62
|
it "should have results viewable as an array" do
|
63
|
-
@harvestdor_client.oai_records.
|
63
|
+
expect(@harvestdor_client.oai_records).to be_an_instance_of(Array)
|
64
64
|
end
|
65
65
|
it "should have enumerable results" do
|
66
|
-
@harvestdor_client.oai_records.
|
66
|
+
expect(@harvestdor_client.oai_records).to respond_to(:each, :count)
|
67
67
|
end
|
68
68
|
it "should yield to a passed block" do
|
69
69
|
expect { |b| @harvestdor_client.oai_records(&b) }.to yield_successive_args(1, 2)
|
@@ -73,9 +73,9 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
73
73
|
describe "oai_headers" do
|
74
74
|
before(:each) do
|
75
75
|
@oai_response = double('oai_response')
|
76
|
-
@oai_response.
|
77
|
-
@oai_response.
|
78
|
-
@harvestdor_client.oai_client.
|
76
|
+
allow(@oai_response).to receive(:entries).and_return([1, 2])
|
77
|
+
allow(@oai_response).to receive(:resumption_token).and_return('')
|
78
|
+
allow(@harvestdor_client.oai_client).to receive(:list_identifiers).with(an_instance_of(Hash)) {
|
79
79
|
@oai_response
|
80
80
|
}
|
81
81
|
end
|
@@ -84,14 +84,14 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
84
84
|
header1.identifier = 'oai:searchworks.stanford.edu/druid:foo'
|
85
85
|
header2 = OAI::Header.new(nil)
|
86
86
|
header2.identifier = 'oai:searchworks.stanford.edu/druid:bar'
|
87
|
-
@oai_response.
|
88
|
-
@harvestdor_client.oai_headers.
|
87
|
+
allow(@oai_response).to receive(:entries).and_return([header1, header2])
|
88
|
+
expect(@harvestdor_client.oai_headers).to eql([header1, header2])
|
89
89
|
end
|
90
90
|
it "should have results viewable as an array" do
|
91
|
-
@harvestdor_client.oai_headers.
|
91
|
+
expect(@harvestdor_client.oai_headers).to be_an_instance_of(Array)
|
92
92
|
end
|
93
93
|
it "should have enumerable results" do
|
94
|
-
@harvestdor_client.oai_headers.
|
94
|
+
expect(@harvestdor_client.oai_headers).to respond_to(:each, :count)
|
95
95
|
end
|
96
96
|
it "should yield to a passed block" do
|
97
97
|
expect { |b| @harvestdor_client.oai_headers(&b) }.to yield_successive_args(1, 2)
|
@@ -102,12 +102,12 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
102
102
|
it "should return OAI::Record object" do
|
103
103
|
oai_rec = OAI::Record.new(nil)
|
104
104
|
oai_resp = double('oai_response')
|
105
|
-
oai_resp.
|
106
|
-
@harvestdor_client.oai_client.
|
105
|
+
allow(oai_resp).to receive(:record).and_return(oai_rec)
|
106
|
+
allow(@harvestdor_client.oai_client).to receive(:get_record){
|
107
107
|
oai_resp
|
108
108
|
}
|
109
|
-
@harvestdor_client.oai_record('druid').
|
110
|
-
@harvestdor_client.oai_record('druid', 'mods').
|
109
|
+
expect(@harvestdor_client.oai_record('druid')).to eql(oai_rec)
|
110
|
+
expect(@harvestdor_client.oai_record('druid', 'mods')).to eql(oai_rec)
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -120,57 +120,57 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
120
120
|
|
121
121
|
end
|
122
122
|
it "should use client's default values for OAI arguments if they are not present in the method param hash" do
|
123
|
-
@harvestdor_client.send(:scrub_oai_args).
|
123
|
+
expect(@harvestdor_client.send(:scrub_oai_args)).to eql(@expected_oai_args)
|
124
124
|
end
|
125
125
|
it "should use OAI arguments from the method param hash if they are present" do
|
126
126
|
passed_options = {:metadata_prefix => 'mods', :from => '2012-11-30'}
|
127
|
-
@harvestdor_client.send(:scrub_oai_args, passed_options).
|
127
|
+
expect(@harvestdor_client.send(:scrub_oai_args, passed_options)).to eql(@expected_oai_args.merge(passed_options))
|
128
128
|
end
|
129
129
|
it "should use nil value for option when it is passed in options hash" do
|
130
130
|
client = Harvestdor::Client.new({:default_from_date => '2012-01-01'})
|
131
|
-
client.config.default_from_date.
|
131
|
+
expect(client.config.default_from_date).to eql('2012-01-01')
|
132
132
|
passed_options = {:from => nil}
|
133
|
-
client.send(:scrub_oai_args, passed_options)[:from].
|
133
|
+
expect(client.send(:scrub_oai_args, passed_options)[:from]).to eql(nil)
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
137
|
describe "harvest" do
|
138
138
|
it "should perform a list_records OAI request when first arg is true" do
|
139
139
|
oai_response = double('oai_response')
|
140
|
-
oai_response.
|
141
|
-
@harvestdor_client.oai_client.
|
140
|
+
allow(oai_response).to receive(:entries).and_return([])
|
141
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
142
142
|
oai_response
|
143
143
|
}
|
144
|
-
@harvestdor_client.oai_client.
|
144
|
+
expect(@harvestdor_client.oai_client).to receive(:list_records)
|
145
145
|
@harvestdor_client.send(:harvest, :list_records, {})
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should perform a list_identifiers OAI request when first arg is false" do
|
149
149
|
oai_response = double('oai_response')
|
150
|
-
oai_response.
|
151
|
-
@harvestdor_client.oai_client.
|
150
|
+
allow(oai_response).to receive(:entries).and_return([])
|
151
|
+
allow(@harvestdor_client.oai_client).to receive(:list_identifiers).with(an_instance_of(Hash)) {
|
152
152
|
oai_response
|
153
153
|
}
|
154
|
-
@harvestdor_client.oai_client.
|
154
|
+
expect(@harvestdor_client.oai_client).to receive(:list_identifiers)
|
155
155
|
@harvestdor_client.send(:harvest, :list_identifiers, {})
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should use passed OAI arguments" do
|
159
159
|
oai_response = double('oai_response')
|
160
|
-
oai_response.
|
161
|
-
@harvestdor_client.oai_client.
|
160
|
+
allow(oai_response).to receive(:entries).and_return([])
|
161
|
+
allow(@harvestdor_client.oai_client).to receive(:list_identifiers).with(an_instance_of(Hash)) {
|
162
162
|
oai_response
|
163
163
|
}
|
164
164
|
oai_options_hash = {:metadata_prefix => 'mods', :from => '2012-11-30'}
|
165
|
-
@harvestdor_client.oai_client.
|
165
|
+
expect(@harvestdor_client.oai_client).to receive(:list_identifiers).with(oai_options_hash)
|
166
166
|
@harvestdor_client.send(:harvest, :list_identifiers, oai_options_hash)
|
167
167
|
end
|
168
168
|
|
169
169
|
it "should yield to a passed block" do
|
170
170
|
oai_response = double('oai_response')
|
171
|
-
oai_response.
|
172
|
-
oai_response.
|
173
|
-
@harvestdor_client.oai_client.
|
171
|
+
allow(oai_response).to receive(:entries).and_return([1, 2])
|
172
|
+
allow(oai_response).to receive(:resumption_token).and_return('')
|
173
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
174
174
|
oai_response
|
175
175
|
}
|
176
176
|
expect { |b| @harvestdor_client.send(:harvest, :list_records, {}, &b) }.to yield_successive_args(1, 2)
|
@@ -179,34 +179,34 @@ describe 'Harvestdor::Client oai harvesting' do
|
|
179
179
|
context "resumption tokens" do
|
180
180
|
it "should stop processing when no records/headers are received" do
|
181
181
|
oai_response = double('oai_response')
|
182
|
-
oai_response.
|
183
|
-
@harvestdor_client.oai_client.
|
182
|
+
allow(oai_response).to receive(:entries).and_return([])
|
183
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
184
184
|
oai_response
|
185
185
|
}
|
186
186
|
|
187
187
|
i = 0
|
188
188
|
@harvestdor_client.send(:harvest, :list_records, {}) { |record| i += 1 }
|
189
|
-
i.
|
189
|
+
expect(i).to eql(0)
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should stop processing when the resumption token is empty" do
|
193
193
|
oai_response_with_token = double('oai_response')
|
194
|
-
oai_response_with_token.
|
195
|
-
oai_response_with_token.
|
196
|
-
@harvestdor_client.oai_client.
|
194
|
+
allow(oai_response_with_token).to receive(:entries).and_return([1,2,3,4,5])
|
195
|
+
allow(oai_response_with_token).to receive(:resumption_token).and_return('')
|
196
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
197
197
|
oai_response_with_token
|
198
198
|
}
|
199
199
|
|
200
200
|
i = 0
|
201
201
|
@harvestdor_client.send(:harvest, :list_records, {}) { |record| i += 1 }
|
202
|
-
i.
|
202
|
+
expect(i).to eql(5)
|
203
203
|
end
|
204
204
|
|
205
205
|
it "should stop processing when there was no resumption token" do
|
206
206
|
oai_response_with_token = double('oai_response')
|
207
|
-
oai_response_with_token.
|
208
|
-
oai_response_with_token.
|
209
|
-
@harvestdor_client.oai_client.
|
207
|
+
allow(oai_response_with_token).to receive(:entries).and_return([1,2,3,4,5])
|
208
|
+
allow(oai_response_with_token).to receive(:resumption_token).and_return(nil)
|
209
|
+
allow(@harvestdor_client.oai_client).to receive(:list_records).with(an_instance_of(Hash)) {
|
210
210
|
oai_response_with_token
|
211
211
|
}
|
212
212
|
|
@@ -16,18 +16,22 @@ describe 'Harvestdor::Client OAI Harvesting Integration Tests', :integration =>
|
|
16
16
|
@oai_args = {:metadata_prefix => 'mods', :from => nil, :until => nil, :set => 'is_governed_by_hy787xj5878'}
|
17
17
|
end
|
18
18
|
it "should be able to harvest headers" do
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
VCR.use_cassette('headers') do
|
20
|
+
headers = @test_hclient.oai_headers(@oai_args)
|
21
|
+
expect(headers).to be_an_instance_of(Array)
|
22
|
+
expect(headers.size).to be > 0
|
23
|
+
expect(headers.size).to be < 50 # no resumption token
|
24
|
+
expect(headers.first).to be_an_instance_of(OAI::Header)
|
25
|
+
end
|
24
26
|
end
|
25
27
|
it "should be able to harvest records" do
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
VCR.use_cassette('records') do
|
29
|
+
records = @test_hclient.oai_records(@oai_args)
|
30
|
+
expect(records).to be_an_instance_of(Array)
|
31
|
+
expect(records.size).to be > 0
|
32
|
+
expect(records.size).to be < 50 # no resumption token
|
33
|
+
expect(records.first).to be_an_instance_of(OAI::Record)
|
34
|
+
end
|
31
35
|
end
|
32
36
|
end
|
33
37
|
context "with resumption tokens" do
|
@@ -37,29 +41,31 @@ describe 'Harvestdor::Client OAI Harvesting Integration Tests', :integration =>
|
|
37
41
|
it "should be able to harvest headers" do
|
38
42
|
skip "need to find small set > 50 on test"
|
39
43
|
headers = @test_hclient.oai_headers(@oai_args)
|
40
|
-
headers.
|
41
|
-
headers.size.
|
42
|
-
headers.first.
|
44
|
+
expect(headers).to be_an_instance_of(Array)
|
45
|
+
expect(headers.size).to be > 50
|
46
|
+
expect(headers.first).to be_an_instance_of(OAI::Header)
|
43
47
|
end
|
44
48
|
it "should be able to harvest records" do
|
45
|
-
|
49
|
+
skip "need to find small set > 50 on test"
|
46
50
|
records = @test_hclient.harvest_records(@oai_args)
|
47
|
-
records.
|
48
|
-
records.size.
|
49
|
-
records.first.
|
51
|
+
expect(records).to be_an_instance_of(Array)
|
52
|
+
expect(records.size).to be > 50
|
53
|
+
expect(records.first).to be_an_instance_of(OAI::Record)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
context "oai_record (single record request)" do
|
53
57
|
before(:all) do
|
54
|
-
|
58
|
+
VCR.use_cassette('jt959wc5586_test') do
|
59
|
+
@rec = @test_hclient.oai_record('jt959wc5586')
|
60
|
+
end
|
55
61
|
end
|
56
62
|
it "should get a single OAI::Record object" do
|
57
|
-
@rec.
|
63
|
+
expect(@rec).to be_an_instance_of(OAI::Record)
|
58
64
|
end
|
59
65
|
it "should keep utf-8 encoded characters intact" do
|
60
66
|
xml = Nokogiri::XML(@rec.metadata.to_s)
|
61
67
|
xml.remove_namespaces!
|
62
|
-
xml.root.xpath('/metadata/mods/titleInfo/subTitle').text.
|
68
|
+
expect(xml.root.xpath('/metadata/mods/titleInfo/subTitle').text).to match /^recueil complet des débats législatifs & politiques des chambres françaises/
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
@@ -74,18 +80,22 @@ describe 'Harvestdor::Client OAI Harvesting Integration Tests', :integration =>
|
|
74
80
|
@oai_args = {:metadata_prefix => 'mods', :from => nil, :until => nil, :set => 'is_governed_by_sd064kn5856'}
|
75
81
|
end
|
76
82
|
it "should be able to harvest headers" do
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
83
|
+
VCR.use_cassette('prod_headers') do
|
84
|
+
headers = @prod_hclient.oai_headers(@oai_args)
|
85
|
+
expect(headers).to be_an_instance_of(Array)
|
86
|
+
expect(headers.size).to be > 0
|
87
|
+
expect(headers.size).to be < 50 # no resumption token
|
88
|
+
expect(headers.first).to be_an_instance_of(OAI::Header)
|
89
|
+
end
|
82
90
|
end
|
83
91
|
it "should be able to harvest records" do
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
92
|
+
VCR.use_cassette('prod_records') do
|
93
|
+
records = @prod_hclient.oai_records(@oai_args)
|
94
|
+
expect(records).to be_an_instance_of(Array)
|
95
|
+
expect(records.size).to be > 0
|
96
|
+
expect(records.size).to be < 50 # no resumption token
|
97
|
+
expect(records.first).to be_an_instance_of(OAI::Record)
|
98
|
+
end
|
89
99
|
end
|
90
100
|
end
|
91
101
|
context "with resumption tokens" do
|
@@ -94,30 +104,34 @@ describe 'Harvestdor::Client OAI Harvesting Integration Tests', :integration =>
|
|
94
104
|
@oai_args = {:metadata_prefix => 'mods', :from => nil, :until => nil, :set => 'is_member_of_collection_jh957jy1101'}
|
95
105
|
end
|
96
106
|
it "should be able to harvest headers" do
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
107
|
+
VCR.use_cassette('headers_with_resumption') do
|
108
|
+
headers = @prod_hclient.oai_headers(@oai_args)
|
109
|
+
expect(headers).to be_an_instance_of(Array)
|
110
|
+
expect(headers.size).to be > 50
|
111
|
+
expect(headers.first).to be_an_instance_of(OAI::Header)
|
112
|
+
end
|
101
113
|
end
|
102
114
|
it "should be able to harvest records" do
|
103
|
-
|
115
|
+
skip "the request always seems to time out"
|
104
116
|
records = @prod_hclient.oai_records(@oai_args)
|
105
|
-
records.
|
106
|
-
records.size.
|
107
|
-
records.first.
|
117
|
+
expect(records).to be_an_instance_of(Array)
|
118
|
+
expect(records.size).to be > 50
|
119
|
+
expect(records.first).to be_an_instance_of(OAI::Record)
|
108
120
|
end
|
109
121
|
end
|
110
122
|
context "oai_record (single record request)" do
|
111
123
|
before(:all) do
|
112
|
-
|
124
|
+
VCR.use_cassette('jt959wc5586_prod') do
|
125
|
+
@rec = @prod_hclient.oai_record('jt959wc5586')
|
126
|
+
end
|
113
127
|
end
|
114
128
|
it "should get a single OAI::Record object" do
|
115
|
-
@rec.
|
129
|
+
expect(@rec).to be_an_instance_of(OAI::Record)
|
116
130
|
end
|
117
131
|
it "should keep utf-8 encoded characters intact" do
|
118
132
|
xml = Nokogiri::XML(@rec.metadata.to_s)
|
119
133
|
xml.remove_namespaces!
|
120
|
-
xml.root.xpath('/metadata/mods/titleInfo/subTitle').text.
|
134
|
+
expect(xml.root.xpath('/metadata/mods/titleInfo/subTitle').text).to match /^recueil complet des débats législatifs & politiques des chambres françaises/
|
121
135
|
end
|
122
136
|
end
|
123
137
|
end
|
data/spec/purl_xml_spec.rb
CHANGED
@@ -17,35 +17,41 @@ describe Harvestdor::Client do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "#mods returns a Nokogiri::XML::Document from the purl mods" do
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
VCR.use_cassette('purl_mods') do
|
21
|
+
x = Harvestdor.mods(@druid, @purl)
|
22
|
+
expect(x).to be_kind_of(Nokogiri::XML::Document)
|
23
|
+
expect(x.root.name).to eql('mods')
|
24
|
+
expect(x.root.namespace.href).to eql(Harvestdor::MODS_NAMESPACE)
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
28
|
context "#public_xml" do
|
27
29
|
it "#public_xml retrieves entire public xml as a Nokogiri::XML::Document when called with druid" do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
VCR.use_cassette('public_xml') do
|
31
|
+
px = Harvestdor.public_xml(@druid, @purl)
|
32
|
+
expect(px).to be_kind_of(Nokogiri::XML::Document)
|
33
|
+
expect(px.root.name).to eql('publicObject')
|
34
|
+
expect(px.root.attributes['id'].text).to eql("druid:#{@druid}")
|
35
|
+
end
|
32
36
|
end
|
33
37
|
it "raises Harvestdor::Errors::MissingPurlPage if there is no purl page for the druid" do
|
34
|
-
|
38
|
+
VCR.use_cassette('missing_purl') do
|
39
|
+
expect { Harvestdor.public_xml(@fake_druid, @purl) }.to raise_error(Harvestdor::Errors::MissingPurlPage)
|
40
|
+
end
|
35
41
|
end
|
36
42
|
it "raises Harvestdor::Errors::MissingPublicXML if purl page returns nil document" do
|
37
|
-
URI::HTTP.
|
43
|
+
expect_any_instance_of(URI::HTTP).to receive(:open).and_return(nil)
|
38
44
|
expect { Harvestdor.public_xml(@fake_druid, @purl) }.to raise_error(Harvestdor::Errors::MissingPublicXml)
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
42
48
|
context "#pub_xml" do
|
43
49
|
it "retrieves public_xml via fetch when first arg is a druid" do
|
44
|
-
Harvestdor.
|
50
|
+
expect(Harvestdor).to receive(:public_xml).with(@druid, @purl)
|
45
51
|
Harvestdor.pub_xml(@druid, @purl)
|
46
52
|
end
|
47
53
|
it "returns the first arg if it is a Nokogiri::XML::Document" do
|
48
|
-
Harvestdor.pub_xml(@ng_pub_xml).
|
54
|
+
expect(Harvestdor.pub_xml(@ng_pub_xml)).to eql(@ng_pub_xml)
|
49
55
|
end
|
50
56
|
it "raises error for unknown arg type" do
|
51
57
|
expect { Harvestdor.pub_xml(Array.new)}.to raise_error(RuntimeError, "expected String or Nokogiri::XML::Document for first argument, got Array")
|
@@ -54,16 +60,18 @@ describe Harvestdor::Client do
|
|
54
60
|
|
55
61
|
context "#content_metadata" do
|
56
62
|
it "returns a Nokogiri::XML::Document from the public xml fetched with druid" do
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
63
|
+
VCR.use_cassette('content_metadata') do
|
64
|
+
cm = Harvestdor.content_metadata(@druid, @purl)
|
65
|
+
expect(cm).to be_kind_of(Nokogiri::XML::Document)
|
66
|
+
expect(cm.root.name).to eql('contentMetadata')
|
67
|
+
expect(cm.root.attributes['objectId'].text).to eql(@druid)
|
68
|
+
end
|
61
69
|
end
|
62
70
|
it "returns a Nokogiri::XML::Document from passed Nokogiri::XML::Document and does no fetch" do
|
63
71
|
cm = Harvestdor.content_metadata(@ng_pub_xml)
|
64
|
-
cm.
|
65
|
-
cm.root.name.
|
66
|
-
cm.root.attributes['objectId'].text.
|
72
|
+
expect(cm).to be_kind_of(Nokogiri::XML::Document)
|
73
|
+
expect(cm.root.name).to eql('contentMetadata')
|
74
|
+
expect(cm.root.attributes['objectId'].text).to eql(@druid)
|
67
75
|
end
|
68
76
|
it "raises MissingContentMetadata error if there is no contentMetadata in the public_xml for the druid" do
|
69
77
|
pub_xml = "<publicObject id='druid:#{@druid}'>#{@id_md_xml}#{@rights_md_xml}</publicObject>"
|
@@ -73,17 +81,19 @@ describe Harvestdor::Client do
|
|
73
81
|
|
74
82
|
context "#identity_metadata" do
|
75
83
|
it "returns a Nokogiri::XML::Document from the public xml fetched with druid" do
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
84
|
+
VCR.use_cassette('identity_metadata') do
|
85
|
+
im = Harvestdor.identity_metadata(@druid, @purl)
|
86
|
+
expect(im).to be_kind_of(Nokogiri::XML::Document)
|
87
|
+
expect(im.root.name).to eql('identityMetadata')
|
88
|
+
expect(im.root.xpath('objectId').text).to eql("druid:#{@druid}")
|
89
|
+
end
|
80
90
|
end
|
81
91
|
it "returns a Nokogiri::XML::Document from passed Nokogiri::XML::Document and does no fetch" do
|
82
|
-
URI::HTTP.
|
92
|
+
expect_any_instance_of(URI::HTTP).not_to receive(:open)
|
83
93
|
im = Harvestdor.identity_metadata(@ng_pub_xml)
|
84
|
-
im.
|
85
|
-
im.root.name.
|
86
|
-
im.root.xpath('objectId').text.
|
94
|
+
expect(im).to be_kind_of(Nokogiri::XML::Document)
|
95
|
+
expect(im.root.name).to eql('identityMetadata')
|
96
|
+
expect(im.root.xpath('objectId').text).to eql("druid:#{@druid}")
|
87
97
|
end
|
88
98
|
it "raises MissingIdentityMetadata error if there is no identityMetadata in the public_xml for the druid" do
|
89
99
|
pub_xml = "<publicObject id='druid:#{@druid}'>#{@cntnt_md_xml}#{@rights_md_xml}</publicObject>"
|
@@ -93,15 +103,17 @@ describe Harvestdor::Client do
|
|
93
103
|
|
94
104
|
context "#rights_metadata" do
|
95
105
|
it "#rights_metadata returns a Nokogiri::XML::Document from the public xml fetched with druid" do
|
96
|
-
|
97
|
-
|
98
|
-
|
106
|
+
VCR.use_cassette('rights_metadata') do
|
107
|
+
rm = Harvestdor.rights_metadata(@druid, @purl)
|
108
|
+
expect(rm).to be_kind_of(Nokogiri::XML::Document)
|
109
|
+
expect(rm.root.name).to eql('rightsMetadata')
|
110
|
+
end
|
99
111
|
end
|
100
112
|
it "returns a Nokogiri::XML::Document from passed Nokogiri::XML::Document and does no fetch" do
|
101
|
-
URI::HTTP.
|
113
|
+
expect_any_instance_of(URI::HTTP).not_to receive(:open)
|
102
114
|
rm = Harvestdor.rights_metadata(@ng_pub_xml)
|
103
|
-
rm.
|
104
|
-
rm.root.name.
|
115
|
+
expect(rm).to be_kind_of(Nokogiri::XML::Document)
|
116
|
+
expect(rm.root.name).to eql('rightsMetadata')
|
105
117
|
end
|
106
118
|
it "raises MissingRightsMetadata error if there is no identityMetadata in the public_xml for the druid" do
|
107
119
|
pub_xml = "<publicObject id='druid:#{@druid}'>#{@cntnt_md_xml}#{@id_md_xml}</publicObject>"
|
@@ -111,17 +123,19 @@ describe Harvestdor::Client do
|
|
111
123
|
|
112
124
|
context "#rdf" do
|
113
125
|
it "returns a Nokogiri::XML::Document from the public xml fetched with druid" do
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
126
|
+
VCR.use_cassette('rdf') do
|
127
|
+
rdf = Harvestdor.rdf(@druid, @purl)
|
128
|
+
expect(rdf).to be_kind_of(Nokogiri::XML::Document)
|
129
|
+
expect(rdf.root.name).to eql('RDF')
|
130
|
+
expect(rdf.root.namespace.href).to eql(Harvestdor::RDF_NAMESPACE)
|
131
|
+
end
|
118
132
|
end
|
119
133
|
it "returns a Nokogiri::XML::Document from passed Nokogiri::XML::Document and does no fetch" do
|
120
|
-
URI::HTTP.
|
134
|
+
expect_any_instance_of(URI::HTTP).not_to receive(:open)
|
121
135
|
rdf = Harvestdor.rdf(@ng_pub_xml)
|
122
|
-
rdf.
|
123
|
-
rdf.root.name.
|
124
|
-
rdf.root.namespace.href.
|
136
|
+
expect(rdf).to be_kind_of(Nokogiri::XML::Document)
|
137
|
+
expect(rdf.root.name).to eql('RDF')
|
138
|
+
expect(rdf.root.namespace.href).to eql(Harvestdor::RDF_NAMESPACE)
|
125
139
|
end
|
126
140
|
it "raises MissingRDF error if there is no RDF in the public_xml for the druid" do
|
127
141
|
pub_xml = "<publicObject id='druid:#{@druid}'>#{@cntnt_md_xml}#{@id_md_xml}</publicObject>"
|
@@ -131,17 +145,19 @@ describe Harvestdor::Client do
|
|
131
145
|
|
132
146
|
context "#dc" do
|
133
147
|
it "returns a Nokogiri::XML::Document from the public xml fetched with druid" do
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
148
|
+
VCR.use_cassette('dc') do
|
149
|
+
dc = Harvestdor.dc(@druid, @purl)
|
150
|
+
expect(dc).to be_kind_of(Nokogiri::XML::Document)
|
151
|
+
expect(dc.root.name).to eql('dc')
|
152
|
+
expect(dc.root.namespace.href).to eql(Harvestdor::OAI_DC_NAMESPACE)
|
153
|
+
end
|
138
154
|
end
|
139
155
|
it "returns a Nokogiri::XML::Document from passed Nokogiri::XML::Document and does no fetch" do
|
140
|
-
URI::HTTP.
|
156
|
+
expect_any_instance_of(URI::HTTP).not_to receive(:open)
|
141
157
|
dc = Harvestdor.dc(@ng_pub_xml)
|
142
|
-
dc.
|
143
|
-
dc.root.name.
|
144
|
-
dc.root.namespace.href.
|
158
|
+
expect(dc).to be_kind_of(Nokogiri::XML::Document)
|
159
|
+
expect(dc.root.name).to eql('dc')
|
160
|
+
expect(dc.root.namespace.href).to eql(Harvestdor::OAI_DC_NAMESPACE)
|
145
161
|
end
|
146
162
|
it "raises MissingDC error if there is no DC in the public_xml for the druid" do
|
147
163
|
pub_xml = "<publicObject id='druid:#{@druid}'>#{@cntnt_md_xml}#{@id_md_xml}</publicObject>"
|
@@ -155,40 +171,40 @@ describe Harvestdor::Client do
|
|
155
171
|
@druid = 'bb375wb8869'
|
156
172
|
end
|
157
173
|
it "public_xml calls Harvestdor.public_xml with config.purl" do
|
158
|
-
Harvestdor.
|
174
|
+
expect(Harvestdor).to receive(:public_xml).with(@druid, @client.config.purl)
|
159
175
|
@client.public_xml(@druid)
|
160
176
|
end
|
161
177
|
it "content_metadata calls Harvestdor.content_metadata with config.purl" do
|
162
|
-
Harvestdor.
|
178
|
+
expect(Harvestdor).to receive(:content_metadata).with(@druid, @client.config.purl)
|
163
179
|
@client.content_metadata(@druid)
|
164
180
|
end
|
165
181
|
it "identity_metadata calls Harvestdor.identity_metadata with config.purl" do
|
166
|
-
Harvestdor.
|
182
|
+
expect(Harvestdor).to receive(:identity_metadata).with(@druid, @client.config.purl)
|
167
183
|
@client.identity_metadata(@druid)
|
168
184
|
end
|
169
185
|
it "rights_metadata calls Harvestdor.rights_metadata with config.purl" do
|
170
|
-
Harvestdor.
|
186
|
+
expect(Harvestdor).to receive(:rights_metadata).with(@druid, @client.config.purl)
|
171
187
|
@client.rights_metadata(@druid)
|
172
188
|
end
|
173
189
|
it "rdf calls Harvestdor.rdf with config.purl" do
|
174
|
-
Harvestdor.
|
190
|
+
expect(Harvestdor).to receive(:rdf).with(@druid, @client.config.purl)
|
175
191
|
@client.rdf(@druid)
|
176
192
|
end
|
177
193
|
it "dc calls Harvestdor.dc with config.purl" do
|
178
|
-
Harvestdor.
|
194
|
+
expect(Harvestdor).to receive(:dc).with(@druid, @client.config.purl)
|
179
195
|
@client.dc(@druid)
|
180
196
|
end
|
181
197
|
it "mods calls Harvestdor.mods with config.purl" do
|
182
|
-
Harvestdor.
|
198
|
+
expect(Harvestdor).to receive(:mods).with(@druid, @client.config.purl)
|
183
199
|
@client.mods(@druid)
|
184
200
|
end
|
185
201
|
it "methods for parts of public_xml should work with Nokogiri::XML::Document arg (and not fetch)" do
|
186
|
-
URI::HTTP.
|
187
|
-
@client.content_metadata(@ng_pub_xml).
|
188
|
-
@client.identity_metadata(@ng_pub_xml).
|
189
|
-
@client.rights_metadata(@ng_pub_xml).
|
190
|
-
@client.rdf(@ng_pub_xml).
|
191
|
-
@client.dc(@ng_pub_xml).
|
202
|
+
expect_any_instance_of(URI::HTTP).not_to receive(:open)
|
203
|
+
expect(@client.content_metadata(@ng_pub_xml)).to be_kind_of(Nokogiri::XML::Document)
|
204
|
+
expect(@client.identity_metadata(@ng_pub_xml)).to be_kind_of(Nokogiri::XML::Document)
|
205
|
+
expect(@client.rights_metadata(@ng_pub_xml)).to be_kind_of(Nokogiri::XML::Document)
|
206
|
+
expect(@client.rdf(@ng_pub_xml)).to be_kind_of(Nokogiri::XML::Document)
|
207
|
+
expect(@client.dc(@ng_pub_xml)).to be_kind_of(Nokogiri::XML::Document)
|
192
208
|
end
|
193
209
|
end
|
194
210
|
end
|