berkeley_library-alma 0.0.4 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,266 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
2
+ <version>1.2</version>
3
+ <numberOfRecords>15</numberOfRecords>
4
+ <records>
5
+ <record>
6
+ <recordSchema>marcxml</recordSchema>
7
+ <recordPacking>xml</recordPacking>
8
+ <recordData>
9
+ <record xmlns="http://www.loc.gov/MARC21/slim">
10
+ <leader>00338nam a2200097 a 4500</leader>
11
+ <controlfield tag="001">991008719659706532</controlfield>
12
+ <controlfield tag="008">^^</controlfield>
13
+ <datafield ind1=" " ind2=" " tag="035">
14
+ <subfield code="a">(CUY)UCB-b214199459-01ucs_ber</subfield>
15
+ </datafield>
16
+ <datafield ind1="1" ind2=" " tag="100">
17
+ <subfield code="a">Kelly, Ellsworth,</subfield>
18
+ <subfield code="d">1923-2015</subfield>
19
+ </datafield>
20
+ <datafield ind1="1" ind2="0" tag="245">
21
+ <subfield code="a">Red-orange over blue</subfield>
22
+ <subfield code="h">[graphic]</subfield>
23
+ </datafield>
24
+ <datafield ind1="1" ind2="0" tag="245">
25
+ <subfield code="a">Rouge-Orange sur Bleu</subfield>
26
+ </datafield>
27
+ <datafield ind1=" " ind2=" " tag="300">
28
+ <subfield code="a">1 lithograph :</subfield>
29
+ <subfield code="b">col.</subfield>
30
+ </datafield>
31
+ <datafield ind1=" " ind2=" " tag="996">
32
+ <subfield code="a">b214199459</subfield>
33
+ <subfield code="b">Updated: 08-14-18</subfield>
34
+ <subfield code="c">Created: 07-09-14</subfield>
35
+ <subfield code="d">CatDate: - -</subfield>
36
+ <subfield code="9">LOCAL</subfield>
37
+ </datafield>
38
+ <datafield ind1=" " ind2=" " tag="AVA">
39
+ <subfield code="0">991008719659706532</subfield>
40
+ <subfield code="8">22721557370006532</subfield>
41
+ <subfield code="a">01UCS_BER</subfield>
42
+ <subfield code="b">MORR</subfield>
43
+ <subfield code="c">Morrison</subfield>
44
+ <subfield code="e">available</subfield>
45
+ <subfield code="f">1</subfield>
46
+ <subfield code="g">0</subfield>
47
+ <subfield code="i">UCB_Campus</subfield>
48
+ <subfield code="j">mo</subfield>
49
+ <subfield code="k">#</subfield>
50
+ <subfield code="p">1</subfield>
51
+ <subfield code="q">Morrison Library</subfield>
52
+ </datafield>
53
+ </record>
54
+ </recordData>
55
+ <recordIdentifier>991008719659706532</recordIdentifier>
56
+ <recordPosition>11</recordPosition>
57
+ </record>
58
+ <record>
59
+ <recordSchema>marcxml</recordSchema>
60
+ <recordPacking>xml</recordPacking>
61
+ <recordData>
62
+ <record xmlns="http://www.loc.gov/MARC21/slim">
63
+ <leader>00273nam a2200085 a 4500</leader>
64
+ <controlfield tag="001">991005668209706532</controlfield>
65
+ <controlfield tag="008">^^</controlfield>
66
+ <datafield ind1=" " ind2=" " tag="035">
67
+ <subfield code="a">(CUY)UCB-b207766708-01ucs_ber</subfield>
68
+ </datafield>
69
+ <datafield ind1="1" ind2=" " tag="100">
70
+ <subfield code="a">Beutlich, Tadek.</subfield>
71
+ </datafield>
72
+ <datafield ind1="1" ind2="0" tag="245">
73
+ <subfield code="a">River</subfield>
74
+ <subfield code="h">[graphic]</subfield>
75
+ </datafield>
76
+ <datafield ind1=" " ind2=" " tag="300">
77
+ <subfield code="a">1 lithograph :</subfield>
78
+ <subfield code="b">col.</subfield>
79
+ </datafield>
80
+ <datafield ind1=" " ind2=" " tag="996">
81
+ <subfield code="a">b207766708</subfield>
82
+ <subfield code="b">Updated: 11-01-13</subfield>
83
+ <subfield code="c">Created: 11-01-13</subfield>
84
+ <subfield code="d">CatDate: - -</subfield>
85
+ <subfield code="9">LOCAL</subfield>
86
+ </datafield>
87
+ <datafield ind1=" " ind2=" " tag="AVA">
88
+ <subfield code="0">991005668209706532</subfield>
89
+ <subfield code="8">22928389410006532</subfield>
90
+ <subfield code="a">01UCS_BER</subfield>
91
+ <subfield code="b">MORR</subfield>
92
+ <subfield code="c">Morrison</subfield>
93
+ <subfield code="e">available</subfield>
94
+ <subfield code="f">1</subfield>
95
+ <subfield code="g">0</subfield>
96
+ <subfield code="i">UCB_Campus</subfield>
97
+ <subfield code="j">mo</subfield>
98
+ <subfield code="k">#</subfield>
99
+ <subfield code="p">1</subfield>
100
+ <subfield code="q">Morrison Library</subfield>
101
+ </datafield>
102
+ </record>
103
+ </recordData>
104
+ <recordIdentifier>991005668209706532</recordIdentifier>
105
+ <recordPosition>12</recordPosition>
106
+ </record>
107
+ <record>
108
+ <recordSchema>marcxml</recordSchema>
109
+ <recordPacking>xml</recordPacking>
110
+ <recordData>
111
+ <record xmlns="http://www.loc.gov/MARC21/slim">
112
+ <leader>00340nam a2200097 a 4500</leader>
113
+ <controlfield tag="001">991008363529706532</controlfield>
114
+ <controlfield tag="008">^^</controlfield>
115
+ <datafield ind1=" " ind2=" " tag="035">
116
+ <subfield code="a">(CUY)UCB-b213512956-01ucs_ber</subfield>
117
+ </datafield>
118
+ <datafield ind1="1" ind2=" " tag="100">
119
+ <subfield code="a">Wang, Gai.</subfield>
120
+ </datafield>
121
+ <datafield ind1="1" ind2="0" tag="245">
122
+ <subfield code="a">Rock with butterfly</subfield>
123
+ <subfield code="h">[graphic]</subfield>
124
+ </datafield>
125
+ <datafield ind1=" " ind2=" " tag="300">
126
+ <subfield code="a">1 woodblock print :</subfield>
127
+ <subfield code="b">col.</subfield>
128
+ </datafield>
129
+ <datafield ind1="0" ind2=" " tag="740">
130
+ <subfield code="a">Mustard seed garden painting manual</subfield>
131
+ </datafield>
132
+ <datafield ind1=" " ind2=" " tag="996">
133
+ <subfield code="a">b213512956</subfield>
134
+ <subfield code="b">Updated: 06-06-14</subfield>
135
+ <subfield code="c">Created: 06-05-14</subfield>
136
+ <subfield code="d">CatDate: - -</subfield>
137
+ <subfield code="9">LOCAL</subfield>
138
+ </datafield>
139
+ <datafield ind1=" " ind2=" " tag="AVA">
140
+ <subfield code="0">991008363529706532</subfield>
141
+ <subfield code="8">22703998890006532</subfield>
142
+ <subfield code="a">01UCS_BER</subfield>
143
+ <subfield code="b">MORR</subfield>
144
+ <subfield code="c">Morrison</subfield>
145
+ <subfield code="e">available</subfield>
146
+ <subfield code="f">1</subfield>
147
+ <subfield code="g">0</subfield>
148
+ <subfield code="i">UCB_Campus</subfield>
149
+ <subfield code="j">mo</subfield>
150
+ <subfield code="k">#</subfield>
151
+ <subfield code="p">1</subfield>
152
+ <subfield code="q">Morrison Library</subfield>
153
+ </datafield>
154
+ </record>
155
+ </recordData>
156
+ <recordIdentifier>991008363529706532</recordIdentifier>
157
+ <recordPosition>13</recordPosition>
158
+ </record>
159
+ <record>
160
+ <recordSchema>marcxml</recordSchema>
161
+ <recordPacking>xml</recordPacking>
162
+ <recordData>
163
+ <record xmlns="http://www.loc.gov/MARC21/slim">
164
+ <leader>00337nam a2200097 a 4500</leader>
165
+ <controlfield tag="001">991008402049706532</controlfield>
166
+ <controlfield tag="008">^^</controlfield>
167
+ <datafield ind1=" " ind2=" " tag="035">
168
+ <subfield code="a">(CUY)UCB-b213523097-01ucs_ber</subfield>
169
+ </datafield>
170
+ <datafield ind1="1" ind2=" " tag="100">
171
+ <subfield code="a">Wang, Gai.</subfield>
172
+ </datafield>
173
+ <datafield ind1="1" ind2="0" tag="245">
174
+ <subfield code="a">Rock with sparrows</subfield>
175
+ <subfield code="h">[graphic]</subfield>
176
+ </datafield>
177
+ <datafield ind1=" " ind2=" " tag="300">
178
+ <subfield code="a">1 woodblock print :</subfield>
179
+ <subfield code="b">col.</subfield>
180
+ </datafield>
181
+ <datafield ind1="0" ind2=" " tag="740">
182
+ <subfield code="a">Mustard seed garden painting manual</subfield>
183
+ </datafield>
184
+ <datafield ind1=" " ind2=" " tag="996">
185
+ <subfield code="a">b213523097</subfield>
186
+ <subfield code="b">Updated: 06-06-14</subfield>
187
+ <subfield code="c">Created: 06-06-14</subfield>
188
+ <subfield code="d">CatDate: - -</subfield>
189
+ <subfield code="9">LOCAL</subfield>
190
+ </datafield>
191
+ <datafield ind1=" " ind2=" " tag="AVA">
192
+ <subfield code="0">991008402049706532</subfield>
193
+ <subfield code="8">22871109920006532</subfield>
194
+ <subfield code="a">01UCS_BER</subfield>
195
+ <subfield code="b">MORR</subfield>
196
+ <subfield code="c">Morrison</subfield>
197
+ <subfield code="e">available</subfield>
198
+ <subfield code="f">1</subfield>
199
+ <subfield code="g">0</subfield>
200
+ <subfield code="i">UCB_Campus</subfield>
201
+ <subfield code="j">mo</subfield>
202
+ <subfield code="k">#</subfield>
203
+ <subfield code="p">1</subfield>
204
+ <subfield code="q">Morrison Library</subfield>
205
+ </datafield>
206
+ </record>
207
+ </recordData>
208
+ <recordIdentifier>991008402049706532</recordIdentifier>
209
+ <recordPosition>14</recordPosition>
210
+ </record>
211
+ <record>
212
+ <recordSchema>marcxml</recordSchema>
213
+ <recordPacking>xml</recordPacking>
214
+ <recordData>
215
+ <record xmlns="http://www.loc.gov/MARC21/slim">
216
+ <leader>00292nam a2200085 a 4500</leader>
217
+ <controlfield tag="001">991008719819706532</controlfield>
218
+ <controlfield tag="008">^^</controlfield>
219
+ <datafield ind1=" " ind2=" " tag="035">
220
+ <subfield code="a">(CUY)UCB-b214199502-01ucs_ber</subfield>
221
+ </datafield>
222
+ <datafield ind1="1" ind2=" " tag="100">
223
+ <subfield code="a">Saitō, Kiyoshi,</subfield>
224
+ <subfield code="d">1907-1997.</subfield>
225
+ </datafield>
226
+ <datafield ind1="1" ind2="0" tag="245">
227
+ <subfield code="a">Ryoan-ji, Kyoto</subfield>
228
+ <subfield code="h">[graphic]</subfield>
229
+ </datafield>
230
+ <datafield ind1=" " ind2=" " tag="300">
231
+ <subfield code="a">1 woodcut :</subfield>
232
+ <subfield code="b">col.</subfield>
233
+ </datafield>
234
+ <datafield ind1=" " ind2=" " tag="996">
235
+ <subfield code="a">b214199502</subfield>
236
+ <subfield code="b">Updated: 05-15-17</subfield>
237
+ <subfield code="c">Created: 07-09-14</subfield>
238
+ <subfield code="d">CatDate: - -</subfield>
239
+ <subfield code="9">LOCAL</subfield>
240
+ </datafield>
241
+ <datafield ind1=" " ind2=" " tag="AVA">
242
+ <subfield code="0">991008719819706532</subfield>
243
+ <subfield code="8">22892415050006532</subfield>
244
+ <subfield code="a">01UCS_BER</subfield>
245
+ <subfield code="b">MORR</subfield>
246
+ <subfield code="c">Morrison</subfield>
247
+ <subfield code="e">available</subfield>
248
+ <subfield code="f">1</subfield>
249
+ <subfield code="g">0</subfield>
250
+ <subfield code="i">UCB_Campus</subfield>
251
+ <subfield code="j">mo</subfield>
252
+ <subfield code="k">#</subfield>
253
+ <subfield code="p">1</subfield>
254
+ <subfield code="q">Morrison Library</subfield>
255
+ </datafield>
256
+ </record>
257
+ </recordData>
258
+ <recordIdentifier>991008719819706532</recordIdentifier>
259
+ <recordPosition>15</recordPosition>
260
+ </record>
261
+ </records>
262
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
263
+ <xb:exact>true</xb:exact>
264
+ <xb:responseDate>2022-05-05T12:53:30-0700</xb:responseDate>
265
+ </extraResponseData>
266
+ </searchRetrieveResponse>
@@ -0,0 +1,109 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
2
+ <version>1.2</version>
3
+ <numberOfRecords>2</numberOfRecords>
4
+ <records>
5
+ <record>
6
+ <recordSchema>marcxml</recordSchema>
7
+ <recordPacking>xml</recordPacking>
8
+ <recordData>
9
+ <record xmlns="http://www.loc.gov/MARC21/slim">
10
+ <leader>00307nam a2200085 a 4500</leader>
11
+ <controlfield tag="001">991005668359706532</controlfield>
12
+ <controlfield tag="008">^^</controlfield>
13
+ <datafield ind1=" " ind2=" " tag="035">
14
+ <subfield code="a">(CUY)UCB-b207766733-01ucs_ber</subfield>
15
+ </datafield>
16
+ <datafield ind1="1" ind2=" " tag="100">
17
+ <subfield code="a">Fukazawa, Yukio,</subfield>
18
+ <subfield code="d">1924-2017.</subfield>
19
+ </datafield>
20
+ <datafield ind1="1" ind2="0" tag="245">
21
+ <subfield code="a">Blue Doors</subfield>
22
+ <subfield code="h">[graphic]</subfield>
23
+ </datafield>
24
+ <datafield ind1=" " ind2=" " tag="300">
25
+ <subfield code="a">1 relief etching and aquatint :</subfield>
26
+ <subfield code="b">col.</subfield>
27
+ </datafield>
28
+ <datafield ind1=" " ind2=" " tag="996">
29
+ <subfield code="a">b207766733</subfield>
30
+ <subfield code="b">Updated: 01-09-19</subfield>
31
+ <subfield code="c">Created: 11-01-13</subfield>
32
+ <subfield code="d">CatDate: - -</subfield>
33
+ <subfield code="9">LOCAL</subfield>
34
+ </datafield>
35
+ <datafield ind1=" " ind2=" " tag="AVA">
36
+ <subfield code="0">991005668359706532</subfield>
37
+ <subfield code="8">22928381510006532</subfield>
38
+ <subfield code="a">01UCS_BER</subfield>
39
+ <subfield code="b">MORR</subfield>
40
+ <subfield code="c">Morrison</subfield>
41
+ <subfield code="e">unavailable</subfield>
42
+ <subfield code="f">1</subfield>
43
+ <subfield code="g">1</subfield>
44
+ <subfield code="i">UCB_Campus</subfield>
45
+ <subfield code="j">mo</subfield>
46
+ <subfield code="k">#</subfield>
47
+ <subfield code="p">1</subfield>
48
+ <subfield code="q">Morrison Library</subfield>
49
+ </datafield>
50
+ </record>
51
+ </recordData>
52
+ <recordIdentifier>991005668359706532</recordIdentifier>
53
+ <recordPosition>1</recordPosition>
54
+ </record>
55
+ <record>
56
+ <recordSchema>marcxml</recordSchema>
57
+ <recordPacking>xml</recordPacking>
58
+ <recordData>
59
+ <record xmlns="http://www.loc.gov/MARC21/slim">
60
+ <leader>00273nam a2200085 a 4500</leader>
61
+ <controlfield tag="001">991005668209706532</controlfield>
62
+ <controlfield tag="008">^^</controlfield>
63
+ <datafield ind1=" " ind2=" " tag="035">
64
+ <subfield code="a">(CUY)UCB-b207766708-01ucs_ber</subfield>
65
+ </datafield>
66
+ <datafield ind1="1" ind2=" " tag="100">
67
+ <subfield code="a">Beutlich, Tadek.</subfield>
68
+ </datafield>
69
+ <datafield ind1="1" ind2="0" tag="245">
70
+ <subfield code="a">River</subfield>
71
+ <subfield code="h">[graphic]</subfield>
72
+ </datafield>
73
+ <datafield ind1=" " ind2=" " tag="300">
74
+ <subfield code="a">1 lithograph :</subfield>
75
+ <subfield code="b">col.</subfield>
76
+ </datafield>
77
+ <datafield ind1=" " ind2=" " tag="996">
78
+ <subfield code="a">b207766708</subfield>
79
+ <subfield code="b">Updated: 11-01-13</subfield>
80
+ <subfield code="c">Created: 11-01-13</subfield>
81
+ <subfield code="d">CatDate: - -</subfield>
82
+ <subfield code="9">LOCAL</subfield>
83
+ </datafield>
84
+ <datafield ind1=" " ind2=" " tag="AVA">
85
+ <subfield code="0">991005668209706532</subfield>
86
+ <subfield code="8">22928389410006532</subfield>
87
+ <subfield code="a">01UCS_BER</subfield>
88
+ <subfield code="b">MORR</subfield>
89
+ <subfield code="c">Morrison</subfield>
90
+ <subfield code="e">available</subfield>
91
+ <subfield code="f">1</subfield>
92
+ <subfield code="g">0</subfield>
93
+ <subfield code="i">UCB_Campus</subfield>
94
+ <subfield code="j">mo</subfield>
95
+ <subfield code="k">#</subfield>
96
+ <subfield code="p">1</subfield>
97
+ <subfield code="q">Morrison Library</subfield>
98
+ </datafield>
99
+ </record>
100
+ </recordData>
101
+ <recordIdentifier>991005668209706532</recordIdentifier>
102
+ <recordPosition>2</recordPosition>
103
+ </record>
104
+ </records>
105
+ <extraResponseData xmlns:xb="http://www.exlibris.com/repository/search/xmlbeans/">
106
+ <xb:exact>true</xb:exact>
107
+ <xb:responseDate>2022-05-04T14:31:01-0700</xb:responseDate>
108
+ </extraResponseData>
109
+ </searchRetrieveResponse>
@@ -36,6 +36,26 @@ module BerkeleyLibrary
36
36
  end
37
37
  end
38
38
  end
39
+
40
+ describe 'SRU methods' do
41
+ before { Config.default! }
42
+ after { Config.send(:clear!) }
43
+
44
+ describe :get_marc_xml do
45
+ let(:record_id) { RecordId.parse('991054360089706532') }
46
+ let(:expected_body) { File.read('spec/data/991054360089706532-sru.xml') }
47
+
48
+ before do
49
+ sru_query_uri = record_id.marc_uri
50
+ stub_request(:get, sru_query_uri).to_return(body: expected_body)
51
+ end
52
+
53
+ it 'returns the MARC XML' do
54
+ marc_xml = record_id.get_marc_xml
55
+ expect(marc_xml).to eq(expected_body)
56
+ end
57
+ end
58
+ end
39
59
  end
40
60
  end
41
61
  end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ describe SRU do
6
+ before { Config.default! }
7
+ after { Config.send(:clear!) }
8
+
9
+ describe :get_marc_records do
10
+ describe 'unpaginated' do
11
+ let(:mms_ids) { %w[991005668209706532 991005668359706532] }
12
+
13
+ before do
14
+ sru_query_value = mms_ids.map { |id| RecordId.parse(id) }.map(&:sru_query_value).join(' or ')
15
+ sru_query_uri = SRU.sru_query_uri(sru_query_value)
16
+ stub_request(:get, sru_query_uri).to_return(body: File.read('spec/data/availability-sru.xml'))
17
+ end
18
+
19
+ it 'returns all MARC records' do
20
+ reader = SRU.get_marc_records(*mms_ids)
21
+ marc_records = reader.to_a
22
+ expect(marc_records.size).to eq(mms_ids.size)
23
+ expect(marc_records.map(&:record_id)).to contain_exactly(*mms_ids)
24
+ end
25
+ end
26
+
27
+ describe 'paginated' do
28
+ let(:mms_ids) do
29
+ %w[
30
+ 991005668209706532
31
+ 991005668359706532
32
+ 991005930379706532
33
+ 991005931249706532
34
+ 991007853589706532
35
+ 991007902439706532
36
+ 991007903029706532
37
+ 991008363529706532
38
+ 991008364649706532
39
+ 991008401919706532
40
+ 991008402049706532
41
+ 991008718379706532
42
+ 991008719659706532
43
+ 991008719819706532
44
+ 991009071149706532
45
+ ]
46
+ end
47
+
48
+ let(:sru_query_value) { mms_ids.map { |id| RecordId.parse(id) }.map(&:sru_query_value).join(' or ') }
49
+ let(:query_uri_page_1) { SRU.sru_query_uri(sru_query_value) }
50
+ let(:query_uri_page_2) { BerkeleyLibrary::Util::URIs.append(query_uri_page_1, '&startRecord=11') }
51
+
52
+ before do
53
+ stub_request(:get, query_uri_page_1).to_return(body: File.read('spec/data/availability-sru-page-1.xml'))
54
+ end
55
+
56
+ it 'returns all the MARC records' do
57
+ stub_request(:get, query_uri_page_2).to_return(body: File.read('spec/data/availability-sru-page-2.xml'))
58
+
59
+ reader = SRU.get_marc_records(*mms_ids)
60
+ marc_records = reader.to_a
61
+ expect(marc_records.size).to eq(mms_ids.size)
62
+ expect(marc_records.map(&:record_id)).to contain_exactly(*mms_ids)
63
+ end
64
+
65
+ it 'does not freeze records by default' do
66
+ stub_request(:get, query_uri_page_2).to_return(body: File.read('spec/data/availability-sru-page-2.xml'))
67
+
68
+ reader = SRU.get_marc_records(*mms_ids)
69
+ reader.to_a.each do |record|
70
+ expect(record.frozen?).to eq(false)
71
+ end
72
+ end
73
+
74
+ it 'can freeze records' do
75
+ stub_request(:get, query_uri_page_2).to_return(body: File.read('spec/data/availability-sru-page-2.xml'))
76
+
77
+ reader = SRU.get_marc_records(*mms_ids, freeze: true)
78
+ reader.to_a.each do |record|
79
+ expect(record.frozen?).to eq(true)
80
+ end
81
+ end
82
+
83
+ it 'is lazy' do
84
+ reader = SRU.get_marc_records(*mms_ids)
85
+ marc_records = reader.take(10).to_a
86
+ expect(marc_records.size).to eq(10)
87
+ retrieved_ids = marc_records.map(&:record_id).uniq
88
+ expect(retrieved_ids.size).to eq(10)
89
+
90
+ # order is not guaranteed, so we don't necessarily get the first 10
91
+ retrieved_ids.each { |id| expect(mms_ids).to include(id) }
92
+ end
93
+
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ module SRU
6
+ describe XMLReader do
7
+ let(:sru_xml_1) { File.read('spec/data/availability-sru-page-1.xml') }
8
+ let(:sru_xml_2) { File.read('spec/data/availability-sru-page-2.xml') }
9
+
10
+ let(:reader) { XMLReader.read(sru_xml_2) }
11
+ let(:expected_ids) { %w[991008719659706532 991005668209706532 991008363529706532 991008402049706532 991008719819706532] }
12
+
13
+ it 'reads the records' do
14
+ records = reader.to_a
15
+ expect(records.size).to eq(expected_ids.size)
16
+ expect(records.map(&:record_id)).to eq(expected_ids)
17
+ end
18
+
19
+ describe :new do
20
+ it 'raises an error for unreadable sources' do
21
+ not_xml = Object.new
22
+ expect { XMLReader.read(not_xml) }.to raise_error(ArgumentError)
23
+ end
24
+ end
25
+
26
+ describe :num_records do
27
+ it 'returns the <numberOfRecords/> value' do
28
+ reader.first # make sure we've gotten far enough in the doc to parse
29
+ expect(reader.num_records).to eq(15)
30
+ end
31
+ end
32
+
33
+ describe :last_record_position do
34
+ it 'returns the (1-indexed) position of the most recent record' do
35
+ position_base = 11
36
+ reader.each_with_index do |_, i|
37
+ expect(reader.last_record_position).to eq(position_base + i)
38
+ end
39
+ end
40
+ end
41
+
42
+ describe :last_record_id do
43
+ it 'returns the ID of the most recent record' do
44
+ reader.each do |record|
45
+ expect(reader.last_record_id).to eq(record.record_id)
46
+ end
47
+ end
48
+ end
49
+
50
+ describe :next_record_position do
51
+ it 'returns nil if there is no next page' do
52
+ reader.to_a # read all records
53
+ expect(reader.next_record_position).to be_nil
54
+ end
55
+
56
+ it 'returns the record position of the next page' do
57
+ reader = XMLReader.read(sru_xml_1)
58
+ reader.to_a # read all records
59
+ expect(reader.next_record_position).to eq(11)
60
+ end
61
+ end
62
+
63
+ describe :records_yielded do
64
+ it 'returns the number of records yielded' do
65
+ expect(reader.records_yielded).to eq(0)
66
+ reader.each_with_index do |_, i|
67
+ expect(reader.records_yielded).to eq(i)
68
+ end
69
+ expect(reader.records_yielded).to eq(5)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
data/spec/spec_helper.rb CHANGED
@@ -31,17 +31,17 @@ require 'berkeley_library/alma'
31
31
  # ------------------------------------------------------------
32
32
  # Utility methods
33
33
 
34
- def sru_url_for(index, value)
35
- "https://berkeley.alma.exlibrisgroup.com/view/sru/01UCS_BER?version=1.2&operation=searchRetrieve&query=#{index}%3D#{value}"
34
+ def sru_url_for(index, value, max_records: 1)
35
+ "https://berkeley.alma.exlibrisgroup.com/view/sru/01UCS_BER?version=1.2&operation=searchRetrieve&query=#{index}%3D#{value}&maximumRecords=#{max_records}"
36
36
  end
37
37
 
38
38
  def sru_data_path_for(record_id)
39
39
  "spec/data/#{record_id}-sru.xml"
40
40
  end
41
41
 
42
- def stub_sru_request(index, value)
43
- sru_url_ = sru_url_for(index, value)
42
+ def stub_sru_request(index, value, max_records: 1)
43
+ sru_url = sru_url_for(index, value, max_records: max_records)
44
44
  marc_xml_path = sru_data_path_for(value)
45
45
 
46
- stub_request(:get, sru_url_).to_return(status: 200, body: File.read(marc_xml_path))
46
+ stub_request(:get, sru_url).to_return(status: 200, body: File.read(marc_xml_path))
47
47
  end