Extended the account ownership transfer tests and implemented several updates. This includes transferring the ownership only to an existing account member, sorting team members based on role hierarchy and whether a member is the primary owner. In the permissions check, prevented non-members from creating invitations and enhanced the styling of role badges depending on if they are custom or not.
81 lines
2.5 KiB
PL/PgSQL
81 lines
2.5 KiB
PL/PgSQL
begin;
|
|
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
|
|
|
select no_plan();
|
|
|
|
select makerkit.set_identifier('primary_owner', 'test@makerkit.dev');
|
|
select makerkit.set_identifier('owner', 'owner@makerkit.dev');
|
|
select makerkit.set_identifier('member', 'member@makerkit.dev');
|
|
select makerkit.set_identifier('custom', 'custom@makerkit.dev');
|
|
|
|
-- another user not in the team
|
|
select tests.create_supabase_user('test', 'test@supabase.com');
|
|
|
|
-- auth as a primary owner
|
|
select tests.authenticate_as('primary_owner');
|
|
|
|
-- only the service role can transfer ownership
|
|
select throws_ok(
|
|
$$ select public.transfer_team_account_ownership(
|
|
makerkit.get_account_id_by_slug('makerkit'),
|
|
makerkit.get_user_id('custom@makerkit.dev')
|
|
) $$,
|
|
'permission denied for function transfer_team_account_ownership'
|
|
);
|
|
|
|
set local role service_role;
|
|
|
|
-- the new owner must be a member of the account so this should fail
|
|
select throws_ok(
|
|
$$ select public.transfer_team_account_ownership(
|
|
makerkit.get_account_id_by_slug('makerkit'),
|
|
makerkit.get_user_id('test@supabase.com')
|
|
) $$,
|
|
'The new owner must be a member of the account'
|
|
);
|
|
|
|
-- this should work because the user is a member of the account
|
|
select lives_ok(
|
|
$$ select public.transfer_team_account_ownership(
|
|
makerkit.get_account_id_by_slug('makerkit'),
|
|
makerkit.get_user_id('owner@makerkit.dev')
|
|
) $$
|
|
);
|
|
|
|
-- check the account owner has been updated
|
|
select row_eq(
|
|
$$ select primary_owner_user_id from public.accounts where id = makerkit.get_account_id_by_slug('makerkit') $$,
|
|
row(makerkit.get_user_id('owner@makerkit.dev')),
|
|
'The account owner should be updated'
|
|
);
|
|
|
|
-- when transferring ownership to an account with a lower role
|
|
-- the account will also be updated to the new role
|
|
select lives_ok(
|
|
$$ select public.transfer_team_account_ownership(
|
|
makerkit.get_account_id_by_slug('makerkit'),
|
|
makerkit.get_user_id('member@makerkit.dev')
|
|
) $$
|
|
);
|
|
|
|
-- check the account owner has been updated
|
|
select row_eq(
|
|
$$ select account_role from public.accounts_memberships
|
|
where account_id = makerkit.get_account_id_by_slug('makerkit')
|
|
and user_id = makerkit.get_user_id('member@makerkit.dev');
|
|
$$,
|
|
row('owner'::varchar),
|
|
'The account owner should be updated'
|
|
);
|
|
|
|
-- rollback
|
|
select lives_ok(
|
|
$$ select public.transfer_team_account_ownership(
|
|
makerkit.get_account_id_by_slug('makerkit'),
|
|
makerkit.get_user_id('test@makerkit.dev')
|
|
) $$
|
|
);
|
|
|
|
select * from finish();
|
|
|
|
rollback; |