berkeley_library-alma 0.0.3 → 0.0.6

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.
@@ -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