From: Bill Erickson Date: Wed, 17 Oct 2012 13:43:08 +0000 (-0400) Subject: Test circ creation improvements X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=eea635f69e991543bf70a52c52979aa8868b2a3d;p=working%2FEvergreen.git Test circ creation improvements * bump due_date to 23:59:59 only for >= 1-day circs * create overdues with an xact_id in the past for added realism * vary the duration rules Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/tests/datasets/sql/env_create.sql b/Open-ILS/tests/datasets/sql/env_create.sql index 313607d00a..a974762e83 100644 --- a/Open-ILS/tests/datasets/sql/env_create.sql +++ b/Open-ILS/tests/datasets/sql/env_create.sql @@ -34,7 +34,7 @@ RETURNS void AS $$ WHERE record > 0 AND label LIKE $4 || '%' AND owning_lib = $2; $$ LANGUAGE SQL; -/** Returns the next (by ID) non-deleted copy */ +/** Returns the next (by ID) non-deleted asset.copy */ CREATE FUNCTION evergreen.next_copy (copy_id BIGINT) RETURNS asset.copy AS $$ DECLARE copy asset.copy%ROWTYPE; DECLARE max_id BIGINT; @@ -55,11 +55,7 @@ END; $$ LANGUAGE PLPGSQL; - - -/** - * Creates circulations - */ +/** Create one circulation */ CREATE FUNCTION evergreen.populate_circ ( patron_barcode TEXT, copy_barcode TEXT, @@ -69,35 +65,57 @@ CREATE FUNCTION evergreen.populate_circ ( max_fine_rule TEXT, overdue BOOLEAN ) + RETURNS void AS $$ + DECLARE duration config.rule_circ_duration%ROWTYPE; + DECLARE recurring config.rule_recurring_fine%ROWTYPE; + DECLARE max_fine config.rule_max_fine%ROWTYPE; + DECLARE due_date TIMESTAMP; + DECLARE xact_start TIMESTAMP; +BEGIN + + SELECT INTO duration * FROM config.rule_circ_duration WHERE name = duration_rule; + SELECT INTO recurring * FROM config.rule_recurring_fine WHERE name = recurring_fine_rule; + SELECT INTO max_fine * FROM config.rule_max_fine WHERE name = max_fine_rule; + + IF overdue THEN + -- if duration is '7 days', the overdue item was due 7 days ago + due_date := NOW() - duration.normal; + -- make overdue circs appear as if they were created two durations ago + xact_start := NOW() - duration.normal - duration.normal; + ELSE + due_date := NOW() + duration.normal; + xact_start := NOW(); + END IF; + + IF duration.normal >= '1 day'::INTERVAL THEN + due_date := (DATE(due_date) || ' 23:59:59')::TIMESTAMP; + END IF; + + + INSERT INTO action.circulation ( - usr, target_copy, circ_lib, circ_staff, renewal_remaining, + xact_start, 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 ( - (SELECT usr FROM actor.card WHERE barcode = $1), - (SELECT id FROM asset.copy WHERE barcode = $2 AND NOT deleted), - $3, -- circ_lib + xact_start, + (SELECT usr FROM actor.card WHERE barcode = patron_barcode), + (SELECT id FROM asset.copy WHERE barcode = copy_barcode AND NOT deleted), + circ_lib, 1, -- circ_staff - (SELECT max_renewals FROM config.rule_circ_duration WHERE name = $4), - (SELECT grace_period FROM config.rule_recurring_fine WHERE name = $5), - (SELECT normal FROM config.rule_circ_duration WHERE name = $4), - (SELECT normal FROM config.rule_recurring_fine WHERE name = $5), - (SELECT amount FROM config.rule_max_fine WHERE name = $6), - $4, -- duration_rule - $5, -- recurring_fine_rule - $6, -- max_fine_rule - CASE WHEN $7 THEN -- due_date - (DATE(NOW() - -- subtract duration from now() for overdues - (SELECT normal FROM config.rule_circ_duration WHERE name = $4)) - || ' 23:59:59')::TIMESTAMP -- due_date - ELSE - (DATE(NOW() + - (SELECT normal FROM config.rule_circ_duration WHERE name = $4)) - || ' 23:59:59')::TIMESTAMP -- due_date - END + duration.max_renewals, + recurring.grace_period, + duration.normal, + recurring.normal, + max_fine.amount, + duration.name, + recurring.name, + max_fine.name, + due_date ); -$$ LANGUAGE SQL; +END; +$$ LANGUAGE PLPGSQL; diff --git a/Open-ILS/tests/datasets/sql/transactions.sql b/Open-ILS/tests/datasets/sql/transactions.sql index 1e51b3e572..da1aa996f0 100644 --- a/Open-ILS/tests/datasets/sql/transactions.sql +++ b/Open-ILS/tests/datasets/sql/transactions.sql @@ -31,14 +31,14 @@ BEGIN PERFORM evergreen.populate_circ( (SELECT barcode FROM actor.card WHERE usr = recipient), copy.barcode, copy.circ_lib, - 'default', 'default', 'overdue_min', FALSE + '1_hour_2_renew', 'default', 'overdue_min', FALSE ); copy := evergreen.next_copy(copy.id); PERFORM evergreen.populate_circ( (SELECT barcode FROM actor.card WHERE usr = recipient), copy.barcode, copy.circ_lib, - 'default', 'default', 'overdue_max', FALSE + '7_days_0_renew', 'default', 'overdue_max', FALSE ); -- overdues... @@ -54,14 +54,14 @@ BEGIN PERFORM evergreen.populate_circ( (SELECT barcode FROM actor.card WHERE usr = recipient), copy.barcode, copy.circ_lib, - 'default', 'default', 'overdue_min', TRUE + '1_hour_2_renew', 'default', 'overdue_min', TRUE ); copy := evergreen.next_copy(copy.id); PERFORM evergreen.populate_circ( (SELECT barcode FROM actor.card WHERE usr = recipient), copy.barcode, copy.circ_lib, - 'default', 'default', 'overdue_max', TRUE + '7_days_0_renew', 'default', 'overdue_max', TRUE ); END LOOP;