]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/live_t/purge-at-events.pg
LP#1672775 Action/Trigger purge PGTAP tests
[Evergreen.git] / Open-ILS / src / sql / Pg / live_t / purge-at-events.pg
1 BEGIN;
2
3 SELECT plan(8);
4
5 -- event_definition 1 uses checkout.due (passive) hook
6 \set evt_def_pasv 1
7
8 -- event_definition 1 uses format.po.html (active) hook
9 \set evt_def_actv 4
10
11 /* ---------------------------------------------------------------
12  * Test Interval Constraints
13  * ---------------------------------------------------------------*/
14
15 UPDATE action_trigger.event_definition 
16     SET delay = '1 day', max_delay = NULL WHERE id = :evt_def_pasv;
17
18 PREPARE delay_required AS 
19     UPDATE action_trigger.event_definition 
20     SET retention_interval = '1 hour' WHERE id = :evt_def_pasv;
21
22 SELECT throws_ok('delay_required', 'P0001', 
23     'retention_interval requires max_delay', 'No Max Delay Test');
24
25 UPDATE action_trigger.event_definition 
26     SET max_delay = '2 days' WHERE id = :evt_def_pasv;
27
28 PREPARE short_interval AS 
29     UPDATE action_trigger.event_definition 
30     SET retention_interval = '1 hour' WHERE id = :evt_def_pasv;
31
32 SELECT throws_ok('short_interval', 'P0001', 
33     'retention_interval is too short', 'Short Interval Update Test');
34
35 -- '2 days' is longer than " '2 days' - '1 day' "
36 PREPARE ok_interval AS 
37     UPDATE action_trigger.event_definition 
38     SET retention_interval = '2 days' WHERE id = :evt_def_pasv;
39
40 SELECT lives_ok('ok_interval', 'Long Interval Update Test');
41
42 PREPARE any_interval AS 
43     UPDATE action_trigger.event_definition 
44     SET retention_interval = '1 min' WHERE id = :evt_def_actv;
45
46 SELECT lives_ok('any_interval', 'Active hooks allow any interval');
47
48 /* ---------------------------------------------------------------
49  * Test Purging
50  * ---------------------------------------------------------------*/
51
52 INSERT INTO action_trigger.event_output (id, data, create_time)
53     VALUES 
54     (1010, '', NOW()), -- passive, non-purged
55     (1011, '', NOW() - '4 days'::INTERVAL), -- passive purge
56     (1012, '', NOW() - '4 days'::INTERVAL), -- active purge
57     (1013, '', NOW()) -- orphan purge
58 ;
59
60 INSERT INTO action_trigger.event (id, target, event_def, run_time, 
61     start_time, update_time, state, template_output) VALUES
62     (1010, 1, :evt_def_pasv, NOW(), NOW(), NOW(), 'pending', NULL),
63     (1011, 1, :evt_def_pasv, NOW(), NOW(), NOW(), 'error', NULL),
64     (1012, 1, :evt_def_pasv, NOW(), NOW(), NOW() - '4 days'::INTERVAL, 'complete', 1011), -- purge
65     (1013, 1, :evt_def_pasv, NOW(), NOW(), NOW() - '4 days'::INTERVAL, 'pending', NULL),
66     (1014, 1, :evt_def_actv, NOW(), NOW(), NOW() - '10 minutes'::INTERVAL, 'complete', 1012), -- purge
67     (1015, 1, :evt_def_pasv, NOW(), NOW(), NOW(), 'complete', 1010)
68 ;
69
70 SELECT action_trigger.purge_events();
71
72 SELECT is( -- purged outputs
73     (SELECT COUNT(*) FROM action_trigger.event_output WHERE id IN (1011,1012,1013)), 
74     0::BIGINT, 'Expired Template Output Purged');
75
76 SELECT is( -- non-purged outputs
77     (SELECT COUNT(*) FROM action_trigger.event_output WHERE id IN (1010)), 
78     1::BIGINT, 'Non-Expired Template Output Retained');
79
80 SELECT is( -- purged events
81     (SELECT COUNT(*) FROM action_trigger.event WHERE id IN (1012,1014)), 
82     0::BIGINT, 'Expired Event Purged');
83
84 SELECT is( -- non-purged events
85     (SELECT COUNT(*) FROM action_trigger.event WHERE id IN (1010,1011,1013,1015)), 
86     4::BIGINT, 'Non-Expired Event Retained');
87
88 SELECT * FROM finish();
89 ROLLBACK;
90