B2B-88: add starter kit structure and elements
This commit is contained in:
151
supabase copy/tests/database/00000-makerkit-helpers.sql
Normal file
151
supabase copy/tests/database/00000-makerkit-helpers.sql
Normal file
@@ -0,0 +1,151 @@
|
||||
create schema if not exists makerkit;
|
||||
|
||||
-- anon, authenticated, and service_role should have access to makerkit schema
|
||||
grant USAGE on schema makerkit to anon, authenticated, service_role;
|
||||
|
||||
-- Don't allow public to execute any functions in the makerkit schema
|
||||
alter default PRIVILEGES in schema makerkit revoke execute on FUNCTIONS from public;
|
||||
|
||||
-- Grant execute to anon, authenticated, and service_role for testing purposes
|
||||
alter default PRIVILEGES in schema makerkit grant execute on FUNCTIONS to anon,
|
||||
authenticated, service_role;
|
||||
|
||||
create or replace function makerkit.get_id_by_identifier(
|
||||
identifier text
|
||||
)
|
||||
returns uuid
|
||||
as $$
|
||||
begin
|
||||
|
||||
return (select id from auth.users where raw_user_meta_data->>'test_identifier' = identifier);
|
||||
|
||||
end;
|
||||
|
||||
$$ language PLPGSQL;
|
||||
|
||||
create or replace function makerkit.set_identifier(
|
||||
identifier text,
|
||||
user_email text
|
||||
)
|
||||
returns text
|
||||
security definer
|
||||
set search_path = auth, pg_temp
|
||||
as
|
||||
$$
|
||||
begin
|
||||
update auth.users
|
||||
set raw_user_meta_data = jsonb_build_object('test_identifier', identifier)
|
||||
where email = user_email;
|
||||
|
||||
return identifier;
|
||||
|
||||
end;
|
||||
|
||||
$$ language PLPGSQL;
|
||||
|
||||
create or replace function makerkit.get_account_by_slug(
|
||||
account_slug text
|
||||
)
|
||||
returns setof accounts
|
||||
as
|
||||
$$
|
||||
begin
|
||||
return query
|
||||
select *
|
||||
from accounts
|
||||
where slug = account_slug;
|
||||
|
||||
end;
|
||||
|
||||
$$ language PLPGSQL;
|
||||
|
||||
create or replace function makerkit.authenticate_as(
|
||||
identifier text
|
||||
) returns void
|
||||
as
|
||||
$$
|
||||
begin
|
||||
perform tests.authenticate_as(identifier);
|
||||
perform makerkit.set_session_aal('aal1');
|
||||
end;
|
||||
$$ language plpgsql;
|
||||
|
||||
create or replace function makerkit.get_account_id_by_slug(
|
||||
account_slug text
|
||||
)
|
||||
returns uuid
|
||||
as
|
||||
$$
|
||||
|
||||
begin
|
||||
|
||||
return
|
||||
(select id
|
||||
from accounts
|
||||
where slug = account_slug);
|
||||
|
||||
end;
|
||||
|
||||
$$ language PLPGSQL;
|
||||
|
||||
|
||||
create or replace function makerkit.set_mfa_factor(
|
||||
identifier text = gen_random_uuid()
|
||||
)
|
||||
returns void
|
||||
as
|
||||
$$
|
||||
begin
|
||||
insert into "auth"."mfa_factors" ("id", "user_id", "friendly_name", "factor_type", "status", "created_at", "updated_at", "secret")
|
||||
values (gen_random_uuid(), auth.uid(), identifier, 'totp', 'verified', '2025-02-24 09:48:18.402031+00', '2025-02-24 09:48:18.402031+00',
|
||||
'HOWQFBA7KBDDRSBNMGFYZAFNPRSZ62I5');
|
||||
end;
|
||||
$$ language plpgsql security definer;
|
||||
|
||||
create or replace function makerkit.set_session_aal(session_aal auth.aal_level)
|
||||
returns void
|
||||
as
|
||||
$$
|
||||
begin
|
||||
perform set_config('request.jwt.claims', json_build_object(
|
||||
'sub', current_setting('request.jwt.claims')::json ->> 'sub',
|
||||
'email', current_setting('request.jwt.claims')::json ->> 'email',
|
||||
'phone', current_setting('request.jwt.claims')::json ->> 'phone',
|
||||
'user_metadata', current_setting('request.jwt.claims')::json ->> 'user_metadata',
|
||||
'app_metadata', current_setting('request.jwt.claims')::json ->> 'app_metadata',
|
||||
'aal', session_aal)::text, true);
|
||||
end;
|
||||
$$ language plpgsql;
|
||||
|
||||
create or replace function makerkit.set_super_admin() returns void
|
||||
as
|
||||
$$
|
||||
begin
|
||||
perform set_config('request.jwt.claims', json_build_object(
|
||||
'sub', current_setting('request.jwt.claims')::json ->> 'sub',
|
||||
'email', current_setting('request.jwt.claims')::json ->> 'email',
|
||||
'phone', current_setting('request.jwt.claims')::json ->> 'phone',
|
||||
'user_metadata', current_setting('request.jwt.claims')::json ->> 'user_metadata',
|
||||
'app_metadata', json_build_object('role', 'super-admin'),
|
||||
'aal', current_setting('request.jwt.claims')::json ->> 'aal'
|
||||
)::text, true);
|
||||
end;
|
||||
$$ language plpgsql;
|
||||
|
||||
begin;
|
||||
|
||||
select plan(1);
|
||||
|
||||
select is_empty($$
|
||||
select
|
||||
*
|
||||
from
|
||||
makerkit.get_account_by_slug('test') $$,
|
||||
'get_account_by_slug should return an empty set when the account does not exist'
|
||||
);
|
||||
|
||||
select *
|
||||
from
|
||||
finish();
|
||||
|
||||
rollback;
|
||||
Reference in New Issue
Block a user