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