116 lines
3.2 KiB
PL/PgSQL
116 lines
3.2 KiB
PL/PgSQL
-- Copyright (c) HashiCorp, Inc.
|
|||
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
||
|
|
|
||
|
|
begin;
|
||
|
|
select plan(28);
|
||
|
|
|
||
|
|
-- Verify the trigger functions exist and are declared properly
|
||
|
|
select has_function('hst_on_insert');
|
||
|
|
select volatility_is('hst_on_insert', 'volatile');
|
||
|
|
select isnt_strict('hst_on_insert');
|
||
|
|
|
||
|
|
select has_function('hst_on_delete');
|
||
|
|
select volatility_is('hst_on_delete', 'volatile');
|
||
|
|
select isnt_strict('hst_on_delete');
|
||
|
|
|
||
|
|
select has_function('hst_on_update');
|
||
|
|
select volatility_is('hst_on_update', 'volatile');
|
||
|
|
select isnt_strict('hst_on_update');
|
||
|
|
|
||
|
|
select has_trigger('iam_scope', 'hst_on_insert');
|
||
|
|
select has_trigger('iam_scope', 'hst_on_update');
|
||
|
|
select has_trigger('iam_scope', 'hst_on_delete');
|
||
|
|
|
||
|
|
select is(count(a.*), count(b.*)) from iam_scope a, iam_scope_hst b;
|
||
|
|
|
||
|
|
-- test on_delete trigger
|
||
|
|
select is(count(*), 1::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
select is(upper(valid_range), null)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
select ok(isempty(valid_range) = false)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
delete
|
||
|
|
from iam_scope
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
select is(count(*), 1::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
select is(upper(valid_range), now())
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
select ok(isempty(valid_range) = false)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____rcolors';
|
||
|
|
|
||
|
|
-- test on_update trigger
|
||
|
|
select is(count(*), 1::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
update iam_scope
|
||
|
|
set description = 'updated description'
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
select is(count(*), 2::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
select is(count(*), 1::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors'
|
||
|
|
and upper(valid_range) = now();
|
||
|
|
|
||
|
|
update iam_scope
|
||
|
|
set version = version + 1
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
select is(count(*), 2::bigint, 'update to version column should not add a new history record')
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
-- test a delete happening within the same transaction as an update
|
||
|
|
delete
|
||
|
|
from iam_scope
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
select is(count(*), 2::bigint, 'delete of scope should not add a new history record')
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors';
|
||
|
|
|
||
|
|
-- Doing an update and a delete in the same transaction produces a row in the
|
||
|
|
-- history table with a valid_range value of 'empty'.
|
||
|
|
select is(count(*), 1::bigint, 'an update and delete in the same transaction should result in an empty valid_range')
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p____bcolors'
|
||
|
|
and isempty(valid_range);
|
||
|
|
|
||
|
|
-- test on_insert trigger
|
||
|
|
insert into iam_scope
|
||
|
|
(parent_id, type, public_id, name)
|
||
|
|
values
|
||
|
|
('o_____colors', 'project', 'p_______test', 'Test Color');
|
||
|
|
|
||
|
|
select is(count(*), 1::bigint)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p_______test';
|
||
|
|
|
||
|
|
select is(lower(valid_range), now())
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p_______test';
|
||
|
|
|
||
|
|
select is(upper(valid_range), null)
|
||
|
|
from iam_scope_hst
|
||
|
|
where public_id = 'p_______test';
|
||
|
|
|
||
|
|
select * from finish();
|
||
|
|
rollback;
|