#29 Implement Workgroup members query
This commit is contained in:
@@ -3,22 +3,22 @@ create or replace function fixture_citizen(in name text default 'george', out _c
|
||||
$$
|
||||
declare
|
||||
_user_id uuid;
|
||||
created_citizen json := '{"name": {"first_name":"George", "last_name":"MICHEL"}, "birthday": "2001-01-01", "email":"george.michel@gmail.com"}';
|
||||
created_citizen2 json := '{"name": {"first_name":"john", "last_name":"DOE"}, "birthday": "2001-01-01", "email":"john.doe@gmail.com"}';
|
||||
created_citizen json;
|
||||
begin
|
||||
_user_id = fixture_user(name);
|
||||
if (name = 'george') then
|
||||
created_citizen := jsonb_set(created_citizen::jsonb, '{user}'::text[], jsonb_build_object('id', _user_id::text), true)::json;
|
||||
assert created_citizen#>>'{user, id}' = _user_id::text, format('userId in citizen must be the same as user, %s = %s', created_citizen#>>'{user, id}', _user_id::text);
|
||||
|
||||
select upsert_citizen(created_citizen) into created_citizen;
|
||||
_citizen_id := created_citizen->>'id';
|
||||
created_citizen = '{"name": {"first_name":"George", "last_name":"MICHEL"}, "birthday": "2001-01-01", "email":"george.michel@gmail.com"}';
|
||||
elseif (name = 'john') then
|
||||
created_citizen2 := jsonb_set(created_citizen2::jsonb, '{user}'::text[], jsonb_build_object('id', _user_id::text), true)::json;
|
||||
assert created_citizen2#>>'{user, id}' = _user_id::text, format('userId in citizen must be the same as user, %s = %s', created_citizen2#>>'{user, id}', _user_id::text);
|
||||
|
||||
select upsert_citizen(created_citizen2) into created_citizen2;
|
||||
_citizen_id := created_citizen2->>'id';
|
||||
created_citizen = '{"name": {"first_name":"john", "last_name":"DOE"}, "birthday": "2001-01-01", "email":"john.doe@gmail.com"}';
|
||||
elseif (name = 'tesla') then
|
||||
created_citizen = '{"name": {"first_name":"Nicolas", "last_name":"Tesla"}, "birthday": "2001-01-01", "email":"nicolas.tesla@gmail.com"}';
|
||||
end if;
|
||||
|
||||
|
||||
created_citizen := jsonb_set(created_citizen::jsonb, '{user}'::text[], jsonb_build_object('id', _user_id::text), true)::json;
|
||||
assert created_citizen#>>'{user, id}' = _user_id::text, format('userId in citizen must be the same as user, %s = %s', created_citizen#>>'{user, id}', _user_id::text);
|
||||
|
||||
select upsert_citizen(created_citizen) into created_citizen;
|
||||
_citizen_id := created_citizen->>'id';
|
||||
end
|
||||
$$
|
||||
@@ -2,15 +2,17 @@ create or replace function fixture_user(in name text default 'george', out user_
|
||||
language plpgsql as
|
||||
$$
|
||||
declare
|
||||
created_user1 json := '{"username": "george", "plain_password": "azerty", "roles": ["ROLE_USER"]}';
|
||||
created_user2 json := '{"username": "john", "plain_password": "qwerty", "roles": ["ROLE_USER"]}';
|
||||
created_user json;
|
||||
begin
|
||||
if (name = 'george') then
|
||||
select insert_user(created_user1) into created_user1;
|
||||
user_id := created_user1->>'id';
|
||||
created_user = '{"username": "george", "plain_password": "azerty", "roles": ["ROLE_USER"]}';
|
||||
elseif (name = 'john') then
|
||||
select insert_user(created_user2) into created_user2;
|
||||
user_id := created_user2->>'id';
|
||||
created_user = '{"username": "john", "plain_password": "qwerty", "roles": ["ROLE_USER"]}';
|
||||
elseif (name = 'tesla') then
|
||||
created_user = '{"username": "tesla", "plain_password": "azerty", "roles": ["ROLE_USER"]}';
|
||||
end if;
|
||||
|
||||
select insert_user(created_user) into created_user;
|
||||
user_id := created_user->>'id';
|
||||
end
|
||||
$$
|
||||
@@ -1,7 +1,9 @@
|
||||
do
|
||||
$$
|
||||
declare
|
||||
_citizen_id uuid := fixture_citizen();
|
||||
_citizen_id uuid := fixture_citizen('george');
|
||||
_citizen_id2 uuid := fixture_citizen('john');
|
||||
_citizen_id3 uuid := fixture_citizen('tesla');
|
||||
created_workgroup json := '{
|
||||
"name": "Le groupe des vert",
|
||||
"description": "test",
|
||||
@@ -13,7 +15,7 @@ declare
|
||||
"anonymous": false
|
||||
}';
|
||||
selected_workgroup json;
|
||||
selected_workgroup_2 json;
|
||||
members json;
|
||||
begin
|
||||
created_workgroup := jsonb_set(created_workgroup::jsonb, '{created_by}'::text[], jsonb_build_object('id', _citizen_id::text), true)::json;
|
||||
created_workgroup := jsonb_set(created_workgroup::jsonb, '{owner}'::text[], jsonb_build_object('id', _citizen_id::text), true)::json;
|
||||
@@ -38,7 +40,47 @@ begin
|
||||
select (w.resource->0) into selected_workgroup from find_workgroups('Le groupe des vert', "limit" := 1) w;
|
||||
assert (selected_workgroup->>'name') = 'Le groupe des vert', format('name must be "Le groupe des vert" instead of : %s', (selected_workgroup->>'name'));
|
||||
|
||||
-------------
|
||||
-- members --
|
||||
-------------
|
||||
|
||||
|
||||
-- add
|
||||
select m into members from add_workgroup_members((created_workgroup->>'id')::uuid, json_build_array(
|
||||
json_build_object('id', _citizen_id2),
|
||||
json_build_object('id', _citizen_id3)
|
||||
)) m;
|
||||
|
||||
assert json_array_length(members) = 2, 'The members count must be equal to 2';
|
||||
assert members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id3)),
|
||||
'Members must contain citizen3';
|
||||
|
||||
-- update
|
||||
select m into members from update_workgroup_members((created_workgroup->>'id')::uuid, json_build_array(
|
||||
json_build_object('id', _citizen_id2),
|
||||
json_build_object('id', _citizen_id)
|
||||
)) m;
|
||||
assert json_array_length(members) = 2, 'The members count must be equal to 2';
|
||||
assert members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id)),
|
||||
'Members must contain citizen2';
|
||||
assert not members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id3)),
|
||||
'Members must NOT contain citizen3';
|
||||
|
||||
-- remove
|
||||
select m into members from remove_workgroup_members((created_workgroup->>'id')::uuid, json_build_array(
|
||||
json_build_object('id', _citizen_id2)
|
||||
)) m;
|
||||
assert json_array_length(members) = 1, 'The members count must be equal to 1';
|
||||
assert members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id)),
|
||||
'Members must contain citizen1';
|
||||
assert not members::jsonb @> jsonb_build_array(jsonb_build_object('id', _citizen_id2)),
|
||||
'Members must NOT contain citizen2';
|
||||
|
||||
rollback;
|
||||
raise notice 'workgroup test pass';
|
||||
end
|
||||
$$;
|
||||
|
||||
|
||||
|
||||
-- select w->>'id' from json_array_elements('[{"id":"plop"}]') w
|
||||
Reference in New Issue
Block a user