3 use Test::More tests => 23;
5 diag("Test fine generation with closed date on checkin against the admin user.");
7 use constant WORKSTATION_NAME => 'BR4-test-04-overdue-with-closed-dates.t';
8 use constant WORKSTATION_LIB => 7;
9 use constant ITEM_BARCODE => 'CONC72000345';
10 use constant ITEM_ID => 1310;
12 use strict; use warnings;
14 use OpenILS::Utils::TestUtils;
15 my $script = OpenILS::Utils::TestUtils->new();
18 use DateTime::Format::ISO8601;
19 use OpenILS::Utils::DateTime qw/clean_ISO8601/;
21 our $apputils = "OpenILS::Application::AppUtils";
23 sub create_closed_date {
24 my $aoucd = Fieldmapper::actor::org_unit::closed_date->new;
25 $aoucd->org_unit(WORKSTATION_LIB);
26 $aoucd->reason('04-overdue_with_closed_dates.t');
28 DateTime->today()->subtract( days => 10 )->iso8601()
31 DateTime->today()->subtract( days => 9 )->subtract( seconds => 1 )->iso8601()
33 my $resp = $apputils->simplereq(
35 'open-ils.actor.org_unit.closed.create',
36 $script->authtoken, $aoucd);
40 # returns "1" on success, event on error
41 sub update_closed_date {
43 $aoucd->reason($aoucd->reason . ' modified');
45 my $cd = $apputils->simplereq(
47 'open-ils.actor.org_unit.closed.update',
48 $script->authtoken, $aoucd);
50 return ref $cd eq 'Fieldmapper::actor::org_unit::closed_date';
53 sub delete_closed_date {
55 my $resp = $apputils->simplereq(
57 'open-ils.actor.org_unit.closed.delete',
58 $script->authtoken, ref $aoucd ? $aoucd->id : $aoucd );
62 #----------------------------------------------------------------
63 # The tests... assumes stock sample data
64 #----------------------------------------------------------------
66 my $storage_ses = $script->session('open-ils.storage');
67 my $circ_ses = $script->session('open-ils.circ');
68 my $cstore_ses = $script->session('open-ils.cstore');
70 my $user_req = $storage_ses->request('open-ils.storage.direct.actor.user.retrieve', 1);
71 if (my $user_resp = $user_req->recv) {
72 if (my $user = $user_resp->content) {
75 'Fieldmapper::actor::user',
76 'open-ils.storage.direct.actor.user.retrieve returned aou object'
81 'User with id = 1 is admin user'
86 my $item_req = $storage_ses->request('open-ils.storage.direct.asset.copy.retrieve', ITEM_ID);
87 if (my $item_resp = $item_req->recv) {
88 if (my $item = $item_resp->content) {
91 'Fieldmapper::asset::copy',
92 'open-ils.storage.direct.asset.copy.retrieve returned acp object'
97 'Item with id = ' . ITEM_ID . ' has barcode ' . ITEM_BARCODE
100 $item->status == 7 || $item->status == 0,
101 'Item with id = ' . ITEM_ID . ' has status of Reshelving or Available'
106 $script->authenticate({
108 password => 'demo123',
114 my $ws = $script->register_workstation(WORKSTATION_NAME,WORKSTATION_LIB);
117 'Registered a new workstation'
121 $script->authenticate({
123 password => 'demo123',
125 workstation => WORKSTATION_NAME});
128 'Have an authtoken associated with the workstation'
131 my $closed_date_obj = create_closed_date();
133 ref $closed_date_obj,
134 'Fieldmapper::actor::org_unit::closed_date',
135 'Created a closed date for 10 days ago'
139 update_closed_date($closed_date_obj),
141 'Updated closed date reason'
144 my $checkout_resp = $script->do_checkout({
146 barcode => ITEM_BARCODE});
150 'Checkout request returned a HASH'
153 $checkout_resp->{ilsevent},
155 'Checkout returned a SUCCESS event'
158 ref $checkout_resp->{payload},
159 'Checkout response object has payload object'
162 ref $checkout_resp->{payload}->{circ},
163 'Payload object has circ object'
166 $checkout_resp->{payload}->{circ}->duration,
168 'Circ objection has loan duration of "7 days"'
171 my $circ = $checkout_resp->{payload}->{circ};
173 $item_req = $storage_ses->request('open-ils.storage.direct.asset.copy.retrieve', ITEM_ID);
174 if (my $item_resp = $item_req->recv) {
175 if (my $item = $item_resp->content) {
179 'Item with id = ' . ITEM_ID . ' has status of Checked Out after fresh Storage request'
184 my $bill_req = $circ_ses->request(
185 'open-ils.circ.money.billing.retrieve.all',
189 if (my $bill_resp = $bill_req->recv) {
190 if (my $bills = $bill_resp->content) {
192 scalar( @{ $bills } ),
194 'Zero bills associated with circulation'
199 my $xact_start = DateTime::Format::ISO8601->parse_datetime(clean_ISO8601($circ->xact_start));
200 my $due_date = DateTime::Format::ISO8601->parse_datetime(clean_ISO8601($circ->due_date));
202 # Rewrite history; technically we should rewrite status_changed_item on the copy as well, but, meh...
203 $circ->xact_start( $xact_start->subtract( days => 20 )->iso8601() );
204 $circ->due_date( $due_date->subtract( days => 20 )->iso8601() );
206 $cstore_ses->connect; # need stateful connection
207 my $xact = $cstore_ses->request('open-ils.cstore.transaction.begin')->gather(1);
208 my $update_req = $cstore_ses->request(
209 'open-ils.cstore.direct.action.circulation.update',
212 if (my $update_resp = $update_req->gather(1)) {
214 'rewrote circ to have happened 20 days ago'
218 'rewrote circ to have happened 20 days ago'
221 $cstore_ses->request('open-ils.cstore.transaction.commit')->gather(1);
225 my $checkin_resp = $script->do_checkin({
226 barcode => ITEM_BARCODE});
230 'Checkin request returned a HASH'
233 $checkin_resp->{ilsevent},
235 'Checkin returned a SUCCESS event'
238 $item_req = $storage_ses->request('open-ils.storage.direct.asset.copy.retrieve', ITEM_ID);
239 if (my $item_resp = $item_req->recv) {
240 if (my $item = $item_resp->content) {
242 $item->status == 7 || $item->status == 0,
243 'Item with id = ' . ITEM_ID . ' has status of Reshelving or Available after fresh Storage request'
248 $bill_req = $circ_ses->request(
249 'open-ils.circ.money.billing.retrieve.all',
253 if (my $bill_resp = $bill_req->recv) {
254 if (my $bills = $bill_resp->content) {
256 scalar( @{ $bills } ),
258 'Twelve bills associated with circulation (instead of 13, thanks to closed date)'
263 my $tmp = delete_closed_date($closed_date_obj);
264 is($tmp, 1, 'Removed closed date');