LP#1527342 Patron checkout history PGTAP tests
authorBill Erickson <berickxx@gmail.com>
Mon, 28 Dec 2015 15:43:58 +0000 (10:43 -0500)
committerKathy Lussier <klussier@masslnc.org>
Fri, 26 Feb 2016 00:22:52 +0000 (19:22 -0500)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/sql/Pg/live_t/user-circ-history.pg [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/live_t/user-circ-history.pg b/Open-ILS/src/sql/Pg/live_t/user-circ-history.pg
new file mode 100644 (file)
index 0000000..a78879b
--- /dev/null
@@ -0,0 +1,85 @@
+BEGIN;
+
+SELECT plan(5);
+
+-- at the time of writing, user '2' has zero circulations 
+-- in the default sample data set.
+\set circ_usr 2
+
+-- activate circ history tracking for a patron
+INSERT INTO actor.usr_setting (usr, name, value) VALUES 
+    (:circ_usr, 'history.circ.retention_start', '"2015-01-01"');
+
+INSERT INTO action.circulation (
+    usr, target_copy, circ_lib, circ_staff, renewal_remaining,
+    grace_period, duration, recurring_fine, max_fine, duration_rule,
+    recurring_fine_rule, max_fine_rule, due_date )
+VALUES (
+    :circ_usr, 1, 4, 1, 2, '1 day', '14 days','0.10', '10',
+   'default','default','default', now() + '14 days'::interval
+);
+
+SELECT isnt_empty(
+    'SELECT * FROM action.usr_circ_history WHERE usr = ' || :circ_usr,
+    'Confirm a history row was inserted'
+);
+
+SELECT is(
+    (SELECT checkin_time FROM action.usr_circ_history WHERE usr = :circ_usr),
+    NULL,
+    'Confirm checkin_time is NULL'
+);
+
+-- simulate a renewal
+UPDATE action.circulation 
+    SET checkin_time = NOW(), stop_fines = 'RENEW' 
+    WHERE usr = :circ_usr;
+
+-- create the renewal
+INSERT INTO action.circulation (
+    usr, target_copy, circ_lib, circ_staff, renewal_remaining,
+    grace_period, duration, recurring_fine, max_fine, duration_rule,
+    recurring_fine_rule, max_fine_rule, due_date, parent_circ )
+VALUES (
+    :circ_usr, 1, 4, 1, 2, '1 day', '14 days','0.10', '10',
+   'default','default','default', '3001-01-01',
+   (SELECT id FROM action.circulation WHERE usr = :circ_usr)
+);
+
+-- confirm due_date on the history object is updated to match the
+-- due date of the renewal circ.
+SELECT is(
+    (SELECT DATE(due_date) FROM action.usr_circ_history WHERE usr = :circ_usr),
+    '3001-01-01',
+    'Confirm due_date matches renewal due date'
+);
+
+UPDATE action.circulation SET checkin_time = NOW() 
+    WHERE usr = :circ_usr AND stop_fines IS NULL;
+
+SELECT isnt(
+    (SELECT checkin_time FROM action.usr_circ_history WHERE usr = :circ_usr),
+    NULL,
+    'Confirm checkin_time is set'
+);
+
+-- Confirm no history is created users that are not opted in.
+-- Assumes :circ_usr + 1 is a valid user id.
+INSERT INTO action.circulation (
+    usr, target_copy, circ_lib, circ_staff, renewal_remaining,
+    grace_period, duration, recurring_fine, max_fine, duration_rule,
+    recurring_fine_rule, max_fine_rule, due_date )
+VALUES (
+    :circ_usr + 1, 1, 4, 1, 2, '1 day', '14 days','0.10', '10',
+   'default','default','default', now() + '14 days'::interval
+);
+
+SELECT is_empty(
+    'SELECT * FROM action.usr_circ_history WHERE usr = ' || :circ_usr + 1,
+    'Confirm no history is created'
+);
+
+
+-- Finish the tests and clean up.
+SELECT * FROM finish();
+ROLLBACK;