berkeley_library-alma 0.0.3 → 0.0.6

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>
File without changes
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Alma
5
+ describe BarCode do
6
+ before(:each) do
7
+ BerkeleyLibrary::Alma.configure do
8
+ Config.alma_sru_host = 'berkeley.alma.exlibrisgroup.com'
9
+ Config.alma_institution_code = '01UCS_BER'
10
+ Config.alma_primo_host = 'search.library.berkeley.edu'
11
+ Config.alma_permalink_key = 'iqob43'
12
+ end
13
+ end
14
+
15
+ after(:each) do
16
+ BerkeleyLibrary::Alma::Config.send(:clear!)
17
+ end
18
+
19
+ describe :new do
20
+ bad_barcode = 1234
21
+ it "raises an error for input that's not an string" do
22
+ expect { BarCode.new(bad_barcode) }.to raise_error(ArgumentError), "#{bad_barcode}: No error raised for #{bad_barcode}"
23
+ end
24
+ end
25
+
26
+ describe :marc_record do
27
+ it 'returns the MARC record' do
28
+ barcode_id = 'C084093187'
29
+ stub_sru_request('alma.barcode', barcode_id)
30
+
31
+ barcode = BerkeleyLibrary::Alma::BarCode.new(barcode_id)
32
+ marc_record = barcode.get_marc_record
33
+ expect(marc_record).not_to be_nil
34
+ end
35
+
36
+ it 'returns nil for an empty response' do
37
+ empty_sru_response = <<~XML.strip
38
+ <?xml version="1.0" encoding="UTF-8"?>
39
+ <searchRetrieveResponse>
40
+ <version>1.2</version>
41
+ <numberOfRecords>0</numberOfRecords>
42
+ <records/>
43
+ </searchRetrieveResponse>
44
+ XML
45
+
46
+ barcode_id = '991054360089706532doesntexist'
47
+ sru_url = sru_url_for('alma.barcode', barcode_id)
48
+ stub_request(:get, sru_url).to_return(status: 200, body: empty_sru_response)
49
+
50
+ barcode = BarCode.new(barcode_id)
51
+ marc_record = barcode.get_marc_record
52
+ expect(marc_record).to be_nil
53
+ end
54
+
55
+ it 'returns nil for an HTTP error response' do
56
+ barcode_id = '991054360089706532934j3h'
57
+ sru_url = sru_url_for('alma.barcode', barcode_id)
58
+ stub_request(:get, sru_url).to_return(status: 404)
59
+
60
+ barcode = BarCode.new(barcode_id)
61
+ marc_record = barcode.get_marc_record
62
+ expect(marc_record).to be_nil
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -90,7 +90,8 @@ module BerkeleyLibrary
90
90
  describe :marc_record do
91
91
  it 'returns the MARC record' do
92
92
  raw_bib_number = 'b11082434'
93
- stub_sru_request(raw_bib_number)
93
+ full_bib_number = 'b110824349'
94
+ stub_sru_request('alma.local_field_996', full_bib_number)
94
95
 
95
96
  bib_number = BibNumber.new(raw_bib_number)
96
97
  marc_record = bib_number.get_marc_record
@@ -58,7 +58,7 @@ module BerkeleyLibrary
58
58
  describe :marc_record do
59
59
  it 'returns the MARC record' do
60
60
  raw_mms_id = '991054360089706532'
61
- stub_sru_request(raw_mms_id)
61
+ stub_sru_request('alma.mms_id', raw_mms_id)
62
62
 
63
63
  mms_id = MMSID.new(raw_mms_id)
64
64
  marc_record = mms_id.get_marc_record
@@ -77,7 +77,7 @@ module BerkeleyLibrary
77
77
  XML
78
78
 
79
79
  raw_mms_id = '991054360089706532'
80
- sru_url = sru_url_for(raw_mms_id)
80
+ sru_url = sru_url_for('alma.mms_id', raw_mms_id)
81
81
  stub_request(:get, sru_url).to_return(status: 200, body: empty_sru_response)
82
82
 
83
83
  mms_id = MMSID.new(raw_mms_id)
@@ -87,7 +87,7 @@ module BerkeleyLibrary
87
87
 
88
88
  it 'returns nil for an HTTP error response' do
89
89
  raw_mms_id = '991054360089706532'
90
- sru_url = sru_url_for(raw_mms_id)
90
+ sru_url = sru_url_for('alma.mms_id', raw_mms_id)
91
91
  stub_request(:get, sru_url).to_return(status: 404)
92
92
 
93
93
  mms_id = MMSID.new(raw_mms_id)
@@ -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