scenario test for multiple debitors+memberships + validation for subsequent memberships (#160)
Co-authored-by: Michael Hoennig <michael@hoennig.de> Reviewed-on: https://dev.hostsharing.net/hostsharing/hs.hsadmin.ng/pulls/160 Reviewed-by: Marc Sandlus <marc.sandlus@hostsharing.net>
This commit is contained in:
@@ -32,6 +32,41 @@ create table if not exists hs_office.membership
|
||||
--//
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
--changeset michael.hoennig:hs-office-membership-SINGLE-MEMBERSHIP-CHECK endDelimiter:--//
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
||||
CREATE OR REPLACE FUNCTION hs_office.validate_membership_validity()
|
||||
RETURNS trigger AS $$
|
||||
DECLARE
|
||||
partnerNumber int;
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM hs_office.membership
|
||||
WHERE partnerUuid = NEW.partnerUuid
|
||||
AND uuid <> NEW.uuid
|
||||
AND NEW.validity && validity
|
||||
) THEN
|
||||
SELECT p.partnerNumber INTO partnerNumber
|
||||
FROM hs_office.partner AS p
|
||||
WHERE p.uuid = NEW.partnerUuid;
|
||||
RAISE EXCEPTION 'Membership validity ranges overlap for partnerUuid %, partnerNumber %', NEW.partnerUuid, partnerNumber;
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER trg_validate_membership_validity
|
||||
BEFORE INSERT OR UPDATE ON hs_office.membership
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION hs_office.validate_membership_validity();
|
||||
|
||||
|
||||
--//
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
--changeset michael.hoennig:hs-office-membership-MAIN-TABLE-JOURNAL endDelimiter:--//
|
||||
-- ----------------------------------------------------------------------------
|
||||
|
@@ -10,7 +10,8 @@
|
||||
*/
|
||||
create or replace procedure hs_office.membership_create_test_data(
|
||||
forPartnerNumber numeric(5),
|
||||
newMemberNumberSuffix char(2) )
|
||||
newMemberNumberSuffix char(2),
|
||||
validity daterange)
|
||||
language plpgsql as $$
|
||||
declare
|
||||
relatedPartner hs_office.partner;
|
||||
@@ -22,7 +23,7 @@ begin
|
||||
raise notice '- using partner (%): %', relatedPartner.uuid, relatedPartner;
|
||||
insert
|
||||
into hs_office.membership (uuid, partneruuid, memberNumberSuffix, validity, status)
|
||||
values (uuid_generate_v4(), relatedPartner.uuid, newMemberNumberSuffix, daterange('20221001' , null, '[]'), 'ACTIVE');
|
||||
values (uuid_generate_v4(), relatedPartner.uuid, newMemberNumberSuffix, validity, 'ACTIVE');
|
||||
end; $$;
|
||||
--//
|
||||
|
||||
@@ -35,9 +36,9 @@ do language plpgsql $$
|
||||
begin
|
||||
call base.defineContext('creating Membership test-data', null, 'superuser-alex@hostsharing.net', 'rbac.global#global:ADMIN');
|
||||
|
||||
call hs_office.membership_create_test_data(10001, '01');
|
||||
call hs_office.membership_create_test_data(10002, '02');
|
||||
call hs_office.membership_create_test_data(10003, '03');
|
||||
call hs_office.membership_create_test_data(10001, '01', daterange('20221001' , '20241231', '[)'));
|
||||
call hs_office.membership_create_test_data(10002, '02', daterange('20221001' , '20251231', '[]'));
|
||||
call hs_office.membership_create_test_data(10003, '03', daterange('20221001' , null, '[]'));
|
||||
end;
|
||||
$$;
|
||||
--//
|
||||
|
Reference in New Issue
Block a user