--
-- packages/acs-kernel/sql/test/rel-segments-test.sql
--
-- @author oumi@arsdigita.com
-- @creation-date 2000-12-01
-- @cvs-id rel-segments-test.sql,v 1.1.4.1 2001/01/12 23:06:33 oumi Exp
--
-- set serveroutput on
create table groups_test_groups (
group_id integer,
sorder integer,
gname varchar(100)
);
create table groups_test_users (
user_id integer,
sorder integer,
uname varchar(100)
);
create table groups_test_segs (
seg_id integer,
sorder integer,
sname varchar(100)
);
-- creates blah_member_rel and yippie_member_rel relationships
\i rel-segments-test-types-create.sql
-- added
select define_function_args('rel_segment_test_check','segment_id,party_id,container_id');
--
-- procedure rel_segment_test_check/3
--
CREATE OR REPLACE FUNCTION rel_segment_test_check(
test_check__segment_id integer,
test_check__party_id integer,
test_check__container_id integer
) RETURNS boolean AS $$
DECLARE
v_pass_p boolean;
str text;
BEGIN
select count(*) > 0 into v_pass_p
from rel_segment_party_map
where segment_id = test_check__segment_id
and party_id = test_check__party_id
and container_id = test_check__container_id;
if NOT v_pass_p then
str := 'Row missing from rel_segment_party_map for' ||
' segment ' ||
acs_object__name(test_check__segment_id) ||
' (' || test_check__segment_id || ')' ||
', party ' ||
acs_object__name(test_check__party_id) ||
' (' || test_check__party_id || ')' ||
', container ' ||
acs_object__name(test_check__container_id) ||
' (' || test_check__container_id || ')';
raise NOTICE '%', str;
PERFORM acs_log__error('rel_segment_test_check', str);
end if;
return v_pass_p;
END;
$$ LANGUAGE plpgsql;
--
-- procedure test_segs/0
--
CREATE OR REPLACE FUNCTION test_segs(
) RETURNS integer AS $$
DECLARE
A integer;
B integer;
C integer;
D integer;
E integer;
F integer;
G integer;
joe integer;
jane integer;
bob integer;
betty integer;
jack integer;
jill integer;
sven integer;
stacy integer;
seg_G_blahs integer;
seg_E_yippies integer;
seg_F integer;
rel_id integer;
BEGIN
-- Create the test groups.
A := acs_group__new('A');
B := acs_group__new('B');
C := acs_group__new('C');
D := acs_group__new('D');
E := acs_group__new('E');
F := acs_group__new('F');
G := acs_group__new('G');
insert into groups_test_groups values (A,1,'A');
insert into groups_test_groups values (B,2,'B');
insert into groups_test_groups values (C,3,'C');
insert into groups_test_groups values (D,4,'D');
insert into groups_test_groups values (E,5,'E');
insert into groups_test_groups values (F,6,'F');
insert into groups_test_groups values (G,7,'G');
-- Create the test members.
joe := acs_user__new('joe@asdf.com','Joe',
'Smith','assword','p');
jane := acs_user__new('jane@asdf.com','Jane',
'Smith','assword','p');
bob := acs_user__new('bob@asdf.com','Bob',
'Smith','assword','p');
betty := acs_user__new('betty@asdf.com','Betty',
'Smith','assword','p');
jack := acs_user__new('jack@asdf.com','Jack',
'Smith','assword','p');
jill := acs_user__new('jill@asdf.com','Jill',
'Smith','assword','p');
sven := acs_user__new('sven@asdf.com','Sven',
'Smith','assword','p');
stacy := acs_user__new('stacy@asdf.com','Stacy',
'Smith','assword','p');
insert into groups_test_users values (joe,1,'joe');
insert into groups_test_users values (jane,2,'jane');
insert into groups_test_users values (bob,3,'bob');
insert into groups_test_users values (betty,4,'betty');
insert into groups_test_users values (jack,5,'jack');
insert into groups_test_users values (jill,6,'jill');
insert into groups_test_users values (sven,7,'sven');
insert into groups_test_users values (stacy,8,'stacy');
-- Make a couple of compositions.
rel_id := composition_rel__new(A, B);
rel_id := composition_rel__new(A, C);
rel_id := composition_rel__new(A, D);
rel_id := composition_rel__new(E, A);
rel_id := composition_rel__new(F, A);
rel_id := composition_rel__new(G, A);
-- Make a couple of memberships.
rel_id := blah_member_rel__new(null, 'blah_member_rel', B, joe);
rel_id := yippie_member_rel__new(null, 'yippie_member_rel', B, jane);
rel_id := blah_member_rel__new(null, 'blah_member_rel', B, betty);
rel_id := yippie_member_rel__new(null, 'yippie_member_rel', A, bob);
rel_id := blah_member_rel__new(null, 'blah_member_rel', A, betty);
rel_id := yippie_member_rel__new(null, 'yippie_member_rel', E, betty);
-- define a few segments.
-- the segment of all parties that are blah members of G
seg_G_blahs := rel_segment__new(null,
'rel_segment',
now(),
null,
null,
null,
null,
'Blahs of Group G',
G,
'blah_member_rel',
null
);
-- the segment of all parties that are yippie members of E
seg_E_yippies := rel_segment__new(null,
'rel_segment',
now(),
null,
null,
null,
null,
'Yippies of Group E',
E,
'yippie_member_rel',
null
);
seg_F := rel_segment__get_or_new(F,'membership_rel',null);
insert into groups_test_segs values (seg_G_blahs,1,'seg_G_blahs');
insert into groups_test_segs values (seg_E_yippies,2,'seg_E_yippies');
insert into groups_test_segs values (seg_F,3,'seg_F');
delete from acs_logs;
return null;
END;
$$ LANGUAGE plpgsql;
--
-- procedure check_segs/0
--
CREATE OR REPLACE FUNCTION check_segs(
) RETURNS integer AS $$
DECLARE
A integer;
B integer;
C integer;
D integer;
E integer;
F integer;
G integer;
joe integer;
jane integer;
bob integer;
betty integer;
jack integer;
jill integer;
sven integer;
stacy integer;
seg_G_blahs integer;
seg_E_yippies integer;
seg_F integer;
rel_id integer;
r record;
str varchar;
BEGIN
select group_id into A from groups_test_groups where gname = 'A';
select group_id into B from groups_test_groups where gname = 'B';
select group_id into C from groups_test_groups where gname = 'C';
select group_id into D from groups_test_groups where gname = 'D';
select group_id into E from groups_test_groups where gname = 'E';
select group_id into F from groups_test_groups where gname = 'F';
select group_id into G from groups_test_groups where gname = 'G';
select user_id into joe from groups_test_users where uname = 'joe';
select user_id into jane from groups_test_users where uname = 'jane';
select user_id into bob from groups_test_users where uname = 'bob';
select user_id into betty from groups_test_users where uname = 'betty';
select user_id into jack from groups_test_users where uname = 'jack';
select user_id into jill from groups_test_users where uname = 'jill';
select user_id into sven from groups_test_users where uname = 'sven';
select user_id into stacy from groups_test_users where uname = 'stacy';
select seg_id into seg_G_blahs
from groups_test_segs
where sname = 'seg_G_blahs';
select seg_id into seg_E_yippies
from groups_test_segs
where sname = 'seg_E_yippies';
select seg_id into seg_F
from groups_test_segs
where sname = 'seg_F';
-- group_element_index_dump;
-- rel_segment_party_map_dump;
-- Expectations:
-- 1. seg_G_blahs should include joe and betty
-- 2. seg_E_yippies should include bob, and jane, betty
-- check: seg_G_blahs contains joe with container B
if rel_segment_test_check(seg_G_blahs, joe, B) = 'f' then
str := 'Segment ' || acs_object__name(seg_G_blahs) ||
'(' || seg_G_blahs || ') failed. Group_id = '
|| G;
raise NOTICE '%', str;
end if;
-- check: seg_G_blahs contains betty with container B
if rel_segment_test_check(seg_G_blahs, betty, B) = 'f' then
str := 'Segment ' || acs_object__name(seg_G_blahs) ||
'(' || seg_G_blahs || ') failed. Group_id = '
|| G;
raise NOTICE '%', str;
end if;
-- check: seg_G_blahs contains betty with container A
if rel_segment_test_check(seg_G_blahs, betty, A) = 'f' then
str := 'Segment ' || acs_object__name(seg_G_blahs) ||
'(' || seg_G_blahs || ') failed. Group_id = '
|| G;
raise NOTICE '%', str;
end if;
-- check: seg_E_yippies contains jane with container B
if rel_segment_test_check(seg_E_yippies, jane, B) = 'f' then
str := 'Segment ' || acs_object__name(seg_E_yippies) ||
'(' || seg_E_yippies || ') failed. Group_id = '
|| E;
raise NOTICE '%', str;
end if;
-- check: seg_E_yippies contains bob with container A
if rel_segment_test_check(seg_E_yippies, bob, A) = 'f' then
str := 'Segment ' || acs_object__name(seg_E_yippies) ||
'(' || seg_E_yippies || ') failed. Group_id = '
|| E;
raise NOTICE '%', str;
end if;
-- check: seg_E_yippies contains betty with container E
if rel_segment_test_check(seg_E_yippies, betty, E) = 'f' then
str := 'Segment ' || acs_object__name(seg_E_yippies) ||
'(' || seg_E_yippies || ') failed. Group_id = '
|| E;
raise NOTICE '%', str;
end if;
-- Now we test on-the-fly creation of rel-segments with the get_or_new
-- function:
-- The segment of all memers of F should contain jane through group B
if rel_segment_test_check(seg_F, jane, B) = 'f' then
str := 'Segment ' ||
acs_object__name(rel_segment__get(F,'membership_rel')) ||
'(' || rel_segment__get(F,'membership_rel')
|| ') failed. Group_id = ' || F;
raise NOTICE '%', str;
end if;
-- The segment of all memers of F should contain betty through group A
if rel_segment_test_check(seg_F, betty, A) = 'f' then
str := 'Segment ' ||
acs_object__name(rel_segment__get(F,'membership_rel')) ||
'(' || rel_segment__get(F,'membership_rel')
|| ') failed. Group_id = ' || A;
raise NOTICE '%', str;
end if;
-- Remove the test segments.
PERFORM rel_segment__delete(seg_G_blahs);
PERFORM rel_segment__delete(seg_E_yippies);
PERFORM rel_segment__delete(rel_segment__get(F,'membership_rel'));
-- Remove the test membership relations
for r in select * from blah_member_rels LOOP
PERFORM blah_member_rel__delete(r.rel_id);
end loop;
for r in select * from yippie_member_rels LOOP
PERFORM yippie_member_rel__delete(r.rel_id);
end loop;
-- Remove the test groups.
PERFORM acs_group__delete(G);
PERFORM acs_group__delete(F);
PERFORM acs_group__delete(E);
PERFORM acs_group__delete(D);
PERFORM acs_group__delete(C);
PERFORM acs_group__delete(B);
PERFORM acs_group__delete(A);
-- Remove the test members.
PERFORM acs_user__delete(joe);
PERFORM acs_user__delete(jane);
PERFORM acs_user__delete(bob);
PERFORM acs_user__delete(betty);
PERFORM acs_user__delete(jack);
PERFORM acs_user__delete(jill);
PERFORM acs_user__delete(sven);
PERFORM acs_user__delete(stacy);
return null;
END;
$$ LANGUAGE plpgsql;
select test_segs();
select check_segs();
drop function rel_segment_test_check(integer, integer, integer);
drop function test_segs();
drop function check_segs();
drop table groups_test_groups;
drop table groups_test_users;
drop table groups_test_segs;
\i rel-segments-test-types-drop.sql
select log_level, log_key, message
from acs_logs
where log_level = 'error';