]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/live_t/22-acq-requests.t
LP#1774277 Acq requests live test vandelay repair
[Evergreen.git] / Open-ILS / src / perlmods / live_t / 22-acq-requests.t
1 #!perl
2 use strict; use warnings;
3 use Test::More tests => 26;
4 use OpenILS::Utils::TestUtils;
5 use OpenILS::Utils::CStoreEditor qw/:funcs/;
6 use OpenILS::Application::Acq::Order;
7
8 use constant WORKSTATION_LIB => 4;
9 use constant WORKSTATION_NAME => 'BR1-test-22-acq-reqs';
10
11 diag("Tests ACQ purchase requests");
12
13 my $script = OpenILS::Utils::TestUtils->new();
14 $script->bootstrap;
15 my $e = new_editor();
16 $e->init;
17
18 my $workstation = $e->search_actor_workstation(
19     {name => WORKSTATION_NAME, owning_lib => WORKSTATION_LIB})->[0];
20
21 if (!$workstation) {
22     $script->authenticate({
23         username => 'admin',
24         password => 'demo123',
25         type => 'staff'
26     });
27
28     my $ws = $script->register_workstation(WORKSTATION_NAME, WORKSTATION_LIB);
29     $script->logout();
30 }
31
32 $script->authenticate({
33     username => 'admin',
34     password => 'demo123',
35     type => 'staff',
36     workstation => WORKSTATION_NAME
37 });
38
39 my $ses = $script->session('open-ils.storage');
40 my $req = $ses->request('open-ils.storage.direct.actor.user.retrieve', 87);
41 if (my $resp = $req->recv) {
42     if (my $user = $resp->content) {
43 # -----------------------------------------------------------------------------
44 # 1. We'll use Smith, Sarah (with usrname 99999303411 and home lib SL1)
45 # -----------------------------------------------------------------------------
46         is(
47             $user->usrname,
48             '99999303411',
49             'User with id = 87 is 99999303411'
50         );
51     }
52 }
53
54 # -----------------------------------------------------------------------------
55 # 2. Check for auth
56 # -----------------------------------------------------------------------------
57 ok($script->authtoken, 'Have an authtoken');
58
59 $req = $script->session('open-ils.pcrud')->request(
60     'open-ils.pcrud.retrieve.acqcr',
61     $script->authtoken, 1015);
62 if (my $resp = $req->recv) {
63     if (my $new_cr = $resp->content) {
64 # -----------------------------------------------------------------------------
65 # 3. Check for Canceled: Fulfilled
66 # -----------------------------------------------------------------------------
67         is($new_cr->label,'Canceled: Fulfilled','New cancel reason for fulfilled requests');
68     }
69 }
70
71 $req = $script->session('open-ils.pcrud')->request(
72     'open-ils.pcrud.retrieve.aurt',
73     $script->authtoken, 1);
74 if (my $resp = $req->recv) {
75     if (my $aurt = $resp->content) {
76 # -----------------------------------------------------------------------------
77 # 4. Check for user request type Books
78 # -----------------------------------------------------------------------------
79         is($aurt->label,'Books','Found user request type Books');
80     }
81 }
82
83 my $aur;
84 my $aur_hash = {};
85 $aur_hash->{'request_type'} = 1; # Books
86 $aur_hash->{'usr'} = 87;         # Smith
87 $aur_hash->{'pickup_lib'} = 8;   # SL1
88 $aur_hash->{'email_notify'} = 'f';
89 $aur_hash->{'hold'} = 'f';
90 $aur_hash->{'title'} = 'test';
91
92 $req = $script->session('open-ils.acq')->request(
93     'open-ils.acq.user_request.create',
94     $script->authtoken, $aur_hash);
95 if (my $resp = $req->recv) {
96     if ($aur = $resp->content) {
97 # -----------------------------------------------------------------------------
98 # 5. Check for created user request
99 # -----------------------------------------------------------------------------
100         is(ref $aur, 'Fieldmapper::acq::user_request', 'User request created');
101         diag('User Request ID = ' . $aur->id);
102     }
103 }
104
105 $req = $script->session('open-ils.pcrud')->request(
106     'open-ils.pcrud.retrieve.aurs',
107     $script->authtoken, $aur->id);
108 if (my $resp = $req->recv) {
109     if (my $aurs = $resp->content) {
110 # -----------------------------------------------------------------------------
111 # 6,7,8. Check for status-enhanced user request
112 # -----------------------------------------------------------------------------
113         is($aurs->id,$aur->id,'Found status-enhanced user request');
114         is($aurs->request_status,1,'Request Status = New');
115         is($aurs->home_ou,8,'Home Lib = SL1');
116     }
117 }
118
119 # open-ils.acq.picklist.create
120 # {"__c":"acqpl","__p":[null,1,"4","test",null,null,null,null,1,1]}
121 # {"__c":"acqpl","__p":[1,1,4,"test","2018-07-31T16:33:39-0400","now",null,null,1,1]}
122
123 my $picklist_id;
124 my $picklist = Fieldmapper::acq::picklist->new;
125 $picklist->isnew(1);
126 $picklist->owner(1);            # admin
127 $picklist->creator(1);          # admin
128 $picklist->editor(1);           # admin
129 $picklist->org_unit(8);         # SL1
130 $picklist->name( $script->authtoken ); # $picklist->name('22-acq-requests.t');
131 $picklist->create_time('now');
132 $picklist->edit_time('now');
133
134 $req = $script->session('open-ils.acq')->request(
135     'open-ils.acq.picklist.create',
136     $script->authtoken, $picklist);
137 if (my $resp = $req->recv) {
138     if ($picklist_id = $resp->content) {
139 # -----------------------------------------------------------------------------
140 # 9. Check for created picklist
141 # -----------------------------------------------------------------------------
142         ok($picklist_id > 0,'Created picklist aka selection list');
143         diag('Picklist ID = ' . $picklist_id);
144     }
145 }
146
147 my $jub_id;
148 my $jub = Fieldmapper::acq::lineitem->new;
149 $jub->selector(1);          # admin
150 $jub->picklist($picklist_id);
151 $jub->create_time('now');
152 $jub->edit_time('now');
153 $jub->marc('<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.loc.gov/MARC21/slim" xmlns:marc="http://www.loc.gov/MARC21/slim" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"><leader>00000nam a22000007a 4500</leader><marc:datafield tag="245" ind1=" " ind2=" "><marc:subfield code="a">test  </marc:subfield></marc:datafield></record>');
154 $jub->state('new');
155 $jub->creator(1);           # admin
156 $jub->editor(1);            # admin
157 $jub->estimated_unit_price(1.00);
158 $jub->isnew(1);
159
160 $req = $script->session('open-ils.acq')->request(
161     'open-ils.acq.lineitem.create',
162     $script->authtoken, $jub);
163 if (my $resp = $req->recv) {
164     if ($jub_id = $resp->content) {
165 # -----------------------------------------------------------------------------
166 # 10. Check for created lineitem
167 # -----------------------------------------------------------------------------
168         ok($jub_id > 0,'Created lineitem');
169         diag('Lineitem ID = ' . $jub_id);
170     }
171 }
172
173 $req = $script->session('open-ils.pcrud')->request(
174     'open-ils.pcrud.retrieve.aur',
175     $script->authtoken, $aur->id);
176 if (my $resp = $req->recv) {
177     if ($aur = $resp->content) {
178 # -----------------------------------------------------------------------------
179 # 11. Retrieve bare user request
180 # -----------------------------------------------------------------------------
181         is(ref $aur,'Fieldmapper::acq::user_request','Retrieved bare user request');
182     }
183 }
184
185 $aur->ischanged(1);
186 $aur->lineitem($jub_id);
187
188 diag('Updating aur->lineitem');
189 my $pcrud_ses = $script->session('open-ils.pcrud');
190 $pcrud_ses->connect();
191 my $xact = $pcrud_ses->request(
192     'open-ils.pcrud.transaction.begin',
193     $script->authtoken
194 )->gather(1);
195 my $aur_id = $pcrud_ses->request(
196     'open-ils.pcrud.update.aur',
197     $script->authtoken,
198     $aur
199 )->gather(1);
200 # -----------------------------------------------------------------------------
201 # 12. Updated user request with lineitem
202 # -----------------------------------------------------------------------------
203 is($aur_id,$aur->id,'Updated user request with lineitem');
204
205 $pcrud_ses->request(
206     'open-ils.pcrud.transaction.commit',
207     $script->authtoken
208 )->gather(1);
209 $pcrud_ses->disconnect();
210 undef($pcrud_ses);
211
212 $req = $script->session('open-ils.acq')->request(
213     'open-ils.acq.lineitem.batch_update',
214     $script->authtoken, { 'lineitems' => [$jub_id] }, {
215         "item_count" => 1, "location" => 118, "owning_lib" => 4, "fund" => 1});
216 if (my $resp = $req->recv) {
217     if (my $return = $resp->content) {
218 # -----------------------------------------------------------------------------
219 # 13. Check adding of copy to line
220 # -----------------------------------------------------------------------------
221         is($return,$jub_id,'Added copy to lineitem');
222     }
223 }
224
225 $req = $script->session('open-ils.pcrud')->request(
226     'open-ils.pcrud.retrieve.aurs',
227     $script->authtoken, $aur->id);
228 if (my $resp = $req->recv) {
229     if (my $aurs = $resp->content) {
230 # -----------------------------------------------------------------------------
231 # 14,15,16. Check user request status and lineitem
232 # -----------------------------------------------------------------------------
233         is($aurs->id,$aur->id,'Re-retrieved status-enhanced user request');
234         is($aurs->request_status,2,'Request Status = Pending');
235         is($aurs->lineitem,$jub_id,'Lineitem matches');
236     }
237 }
238
239 my $purchase_order_id;
240 my $purchase_order = Fieldmapper::acq::purchase_order->new;
241 $purchase_order->owner(1);                   # admin
242 $purchase_order->create_time('now');
243 $purchase_order->edit_time('now');
244 $purchase_order->provider(2);                # BRODART
245 $purchase_order->state('pending');
246 $purchase_order->ordering_agency(4);         # BR1
247 $purchase_order->creator(1);                 # admin
248 $purchase_order->editor(1);                  # admin
249 $purchase_order->name( $script->authtoken ); # $purchase_order->name('22-acq-requests.t');
250 $purchase_order->isnew(1);
251
252 $req = $script->session('open-ils.acq')->request(
253     'open-ils.acq.purchase_order.create',
254     $script->authtoken, $purchase_order, { 'lineitems' => [$jub_id] });
255 if (my $resp = $req->recv) {
256     if (my $return = $resp->content) {
257 #FIXME: open-ils.acq.purchase_order.create docs needs to be updated with correct return value 
258 #FIXME: open-ils.acq.purchase_order.create docs needs to be updated for lineitem_ids argument
259 # -----------------------------------------------------------------------------
260 # 17. Check for created purchase_order
261 # -----------------------------------------------------------------------------
262         $purchase_order_id = $$return{'purchase_order'}->id;
263         ok($purchase_order_id > 0,'Created purchase_order');
264         diag('Purchase Order ID = ' . $purchase_order_id);
265     }
266 }
267
268 $req = $script->session('open-ils.pcrud')->request(
269     'open-ils.pcrud.retrieve.aurs',
270     $script->authtoken, $aur->id);
271 if (my $resp = $req->recv) {
272     if (my $aurs = $resp->content) {
273 # -----------------------------------------------------------------------------
274 # 18, 19. Check user request status is still Pending
275 # -----------------------------------------------------------------------------
276         is($aurs->id,$aur->id,'Re-retrieved status-enhanced user request');
277         is($aurs->request_status,2,'Request Status = Pending');
278     }
279 }
280
281
282 # open-ils.acq.purchase_order.assets.create
283 my $vlArgs = {
284     'vandelay' => {
285         'auto_overlay_1match' => 0,
286         'match_quality_ratio' => '0.0',
287         'queue_name' => $script->authtoken, #'queue_name' => '22-acq-requests.t',
288         'import_no_match' => 'on',
289         'bib_source' => '',
290         'fall_through_merge_profile' => '',
291         'merge_profile' => '',
292         'auto_overlay_best_match' => 0,
293         'strip_field_groups' => [],
294         'auto_overlay_exact' => 0,
295         'existing_queue' => '',
296         'match_set' => ''
297     }
298 };
299 $req = $script->session('open-ils.acq')->request(
300     'open-ils.acq.purchase_order.assets.create',
301     $script->authtoken, $purchase_order_id, $vlArgs);
302 if (my $resp = $req->recv) {
303     if (my $return = $resp->content) {
304 # -----------------------------------------------------------------------------
305 # 20. Check for created assets
306 # -----------------------------------------------------------------------------
307         is($return->{'complete'},1,'Assets created');
308     }
309 }
310 $req = $script->session('open-ils.acq')->request(
311     'open-ils.acq.purchase_order.activate',
312     $script->authtoken, $purchase_order_id, {
313         'no_assets' => 0, 'zero_copy_activate' => 0});
314 if (my $resp = $req->recv) {
315     if (my $return = $resp->content) {
316 # -----------------------------------------------------------------------------
317 # 21. Check for activated purchase order
318 # -----------------------------------------------------------------------------
319         is($return,1,'Purchase order activated');
320     }
321 }
322
323 $req = $script->session('open-ils.pcrud')->request(
324     'open-ils.pcrud.retrieve.aurs',
325     $script->authtoken, $aur->id);
326 if (my $resp = $req->recv) {
327     if (my $aurs = $resp->content) {
328 # -----------------------------------------------------------------------------
329 # 22, 23. Check user request status Ordered, No Hold Placed
330 # -----------------------------------------------------------------------------
331         is($aurs->id,$aur->id,'Re-retrieved status-enhanced user request');
332         is($aurs->request_status,3,'Request Status = Ordered, Hold Not Placed');
333     }
334 }
335
336 $req = $script->session('open-ils.acq')->request(
337     'open-ils.acq.user_request.cancel.batch.atomic',
338     $script->authtoken, [ $aur_id ], 1015); # Canceled: Fulfilled
339 if (my $resp = $req->recv) {
340     if (my $return = $resp->content) {
341 # -----------------------------------------------------------------------------
342 # 24. Check for activated purchase order
343 # -----------------------------------------------------------------------------
344         is($return->[1]->{'complete'},1,'User request canceled with Canceled: Fulfilled');
345     }
346 }
347
348 $req = $script->session('open-ils.pcrud')->request(
349     'open-ils.pcrud.retrieve.aurs',
350     $script->authtoken, $aur->id);
351 if (my $resp = $req->recv) {
352     if (my $aurs = $resp->content) {
353 # -----------------------------------------------------------------------------
354 # 25, 26. Check user request status Ordered, No Hold Placed
355 # -----------------------------------------------------------------------------
356         is($aurs->id,$aur->id,'Re-retrieved status-enhanced user request');
357         is($aurs->request_status,7,'Request Status = Canceled');
358     }
359 }
360