Cleanup
This commit is contained in:
74
supabase/tests/database/00000-dbdev.sql
Normal file
74
supabase/tests/database/00000-dbdev.sql
Normal file
@@ -0,0 +1,74 @@
|
||||
create extension if not exists http with schema extensions;
|
||||
create extension if not exists pg_tle;
|
||||
|
||||
select
|
||||
no_plan ();
|
||||
|
||||
create or replace function install_extensions()
|
||||
returns void
|
||||
as $$
|
||||
declare
|
||||
installed boolean;
|
||||
begin
|
||||
select exists (
|
||||
select
|
||||
1
|
||||
from
|
||||
pg_catalog.pg_extension
|
||||
where
|
||||
extname = 'supabase-dbdev'
|
||||
) into installed;
|
||||
|
||||
if installed then
|
||||
return;
|
||||
end if;
|
||||
|
||||
perform
|
||||
pgtle.install_extension(
|
||||
'supabase-dbdev',
|
||||
resp.contents ->> 'version',
|
||||
'PostgreSQL package manager',
|
||||
resp.contents ->> 'sql'
|
||||
)
|
||||
from http(
|
||||
(
|
||||
'GET',
|
||||
'https://api.database.dev/rest/v1/'
|
||||
|| 'package_versions?select=sql,version'
|
||||
|| '&package_name=eq.supabase-dbdev'
|
||||
|| '&order=version.desc'
|
||||
|| '&limit=1',
|
||||
array[
|
||||
('apiKey', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhtdXB0cHBsZnZpaWZyYndtbXR2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODAxMDczNzIsImV4cCI6MTk5NTY4MzM3Mn0.z2CN0mvO2No8wSi46Gw59DFGCTJrzM0AQKsu_5k134s')::http_header
|
||||
],
|
||||
null,
|
||||
null
|
||||
)
|
||||
) x,
|
||||
lateral (
|
||||
select
|
||||
((row_to_json(x) -> 'content') #>> '{}')::json -> 0
|
||||
) resp(contents);
|
||||
|
||||
create extension if not exists "supabase-dbdev";
|
||||
|
||||
perform dbdev.install('supabase-dbdev');
|
||||
perform dbdev.install('basejump-supabase_test_helpers');
|
||||
end
|
||||
$$ language plpgsql;
|
||||
|
||||
select install_extensions();
|
||||
|
||||
select has_column(
|
||||
'auth',
|
||||
'users',
|
||||
'id',
|
||||
'id should exist'
|
||||
);
|
||||
|
||||
select
|
||||
*
|
||||
from
|
||||
finish ();
|
||||
|
||||
rollback;
|
||||
37
supabase/tests/database/00000-makerkit-helpers.sql
Normal file
37
supabase/tests/database/00000-makerkit-helpers.sql
Normal file
@@ -0,0 +1,37 @@
|
||||
create schema if not exists makerkit;
|
||||
|
||||
-- anon, authenticated, and service_role should have access to tests schema
|
||||
grant USAGE on schema makerkit to anon, authenticated, service_role;
|
||||
|
||||
-- Don't allow public to execute any functions in the tests 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_account_by_slug(
|
||||
account_slug text
|
||||
)
|
||||
returns setof accounts
|
||||
as $$
|
||||
begin
|
||||
|
||||
return query
|
||||
select
|
||||
*
|
||||
from
|
||||
accounts
|
||||
where
|
||||
slug = account_slug;
|
||||
|
||||
end;
|
||||
|
||||
$$ language PLPGSQL;
|
||||
|
||||
select
|
||||
*
|
||||
from
|
||||
finish();
|
||||
|
||||
rollback;
|
||||
21
supabase/tests/database/account-permissions.test.sql
Normal file
21
supabase/tests/database/account-permissions.test.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
BEGIN;
|
||||
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
||||
|
||||
select no_plan();
|
||||
|
||||
--- we insert a user into auth.users and return the id into user_id to use
|
||||
|
||||
select tests.create_supabase_user('test1', 'test1@test.com');
|
||||
|
||||
select tests.create_supabase_user('test2');
|
||||
|
||||
-- Create an organization account
|
||||
|
||||
select tests.authenticate_as('test1');
|
||||
|
||||
select public.create_account('Test');
|
||||
|
||||
|
||||
select * from finish();
|
||||
|
||||
ROLLBACK;
|
||||
56
supabase/tests/database/account-slug.test.sql
Normal file
56
supabase/tests/database/account-slug.test.sql
Normal file
@@ -0,0 +1,56 @@
|
||||
BEGIN;
|
||||
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
||||
|
||||
select no_plan();
|
||||
|
||||
--- we insert a user into auth.users and return the id into user_id to use
|
||||
|
||||
select tests.create_supabase_user('test1', 'test1@test.com');
|
||||
|
||||
select tests.create_supabase_user('test2');
|
||||
|
||||
-- Create an organization account
|
||||
|
||||
select tests.authenticate_as('test1');
|
||||
|
||||
select public.create_account('Test');
|
||||
select public.create_account('Test');
|
||||
select public.create_account('Test');
|
||||
|
||||
-- should automatically create slugs for the accounts
|
||||
select row_eq(
|
||||
$$ select slug from public.accounts where name = 'Test' and slug = 'test' $$,
|
||||
row('test'::text),
|
||||
'The first organization account should automatically create a slug named "test"'
|
||||
);
|
||||
|
||||
select row_eq(
|
||||
$$ select slug from public.accounts where name = 'Test' and slug = 'test-1' $$,
|
||||
row('test-1'::text),
|
||||
'The second organization account should automatically create a slug named "test-1"'
|
||||
);
|
||||
|
||||
select row_eq(
|
||||
$$ select slug from public.accounts where name = 'Test' and slug = 'test-2' $$,
|
||||
row('test-2'::text),
|
||||
'The third organization account should automatically create a slug named "test-2"'
|
||||
);
|
||||
|
||||
-- Should automatically update the slug if the name is updated
|
||||
update public.accounts set name = 'Test 4' where slug = 'test-2';
|
||||
|
||||
select row_eq(
|
||||
$$ select slug from public.accounts where name = 'Test 4' $$,
|
||||
row('test-4'::text),
|
||||
'Updating the name of an organization account should update the slug'
|
||||
);
|
||||
|
||||
-- Should fail if the slug is updated to an existing slug
|
||||
select throws_ok(
|
||||
$$ update public.accounts set slug = 'test-1' where slug = 'test-4' $$,
|
||||
'duplicate key value violates unique constraint "accounts_slug_key"'
|
||||
);
|
||||
|
||||
select * from finish();
|
||||
|
||||
ROLLBACK;
|
||||
@@ -0,0 +1,78 @@
|
||||
begin;
|
||||
|
||||
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
||||
|
||||
select
|
||||
no_plan();
|
||||
|
||||
--- we insert a user into auth.users and return the id into user_id to use
|
||||
select
|
||||
tests.create_supabase_user('test1', 'test1@test.com');
|
||||
|
||||
select
|
||||
tests.create_supabase_user('test2');
|
||||
|
||||
-- Create an organization account
|
||||
select
|
||||
tests.authenticate_as('test1');
|
||||
|
||||
select
|
||||
public.create_account('Test');
|
||||
|
||||
select
|
||||
row_eq($$
|
||||
select
|
||||
primary_owner_user_id, is_personal_account, slug, name from
|
||||
makerkit.get_account_by_slug('test') $$, row
|
||||
(tests.get_supabase_uid('test1'), false, 'test'::text,
|
||||
'Test'::varchar), 'Users can create an organization account');
|
||||
|
||||
-- Should be the primary owner of the organization account by default
|
||||
select
|
||||
row_eq($$
|
||||
select
|
||||
account_role from public.accounts_memberships
|
||||
where
|
||||
account_id =(
|
||||
select
|
||||
id
|
||||
from public.accounts
|
||||
where
|
||||
slug = 'test')
|
||||
and user_id = tests.get_supabase_uid('test1') $$, row
|
||||
('owner'::public.account_role), 'The primary owner should have the owner role for the organization account');
|
||||
|
||||
-- Should be able to see the organization account
|
||||
select
|
||||
isnt_empty($$
|
||||
select
|
||||
* from public.accounts
|
||||
where
|
||||
primary_owner_user_id = tests.get_supabase_uid('test1') $$, 'The primary owner should be able to see the organization account');
|
||||
|
||||
-- Others should not be able to see the organization account
|
||||
select
|
||||
tests.authenticate_as('test2');
|
||||
|
||||
select
|
||||
is_empty($$
|
||||
select
|
||||
* from public.accounts
|
||||
where
|
||||
primary_owner_user_id = tests.get_supabase_uid('test1') $$, 'Other users should not be able to see the organization account');
|
||||
|
||||
-- should not have any role for the organization account
|
||||
select
|
||||
is (public.has_role_on_account((
|
||||
select
|
||||
id
|
||||
from makerkit.get_account_by_slug('test'))),
|
||||
false,
|
||||
'Foreign users should not have any role for the organization account');
|
||||
|
||||
select
|
||||
*
|
||||
from
|
||||
finish();
|
||||
|
||||
rollback;
|
||||
57
supabase/tests/database/personal-accounts.test.sql
Normal file
57
supabase/tests/database/personal-accounts.test.sql
Normal file
@@ -0,0 +1,57 @@
|
||||
BEGIN;
|
||||
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
||||
|
||||
select no_plan();
|
||||
|
||||
--- we insert a user into auth.users and return the id into user_id to use
|
||||
|
||||
select tests.create_supabase_user('test1', 'test1@test.com');
|
||||
|
||||
select tests.create_supabase_user('test2');
|
||||
|
||||
------------
|
||||
--- Primary Owner
|
||||
------------
|
||||
select tests.authenticate_as('test1');
|
||||
|
||||
-- should create the personal account automatically with the same ID as the user
|
||||
SELECT row_eq(
|
||||
$$ select primary_owner_user_id, is_personal_account, name from public.accounts order by created_at desc limit 1 $$,
|
||||
ROW (tests.get_supabase_uid('test1'), true, 'test1'::varchar),
|
||||
'Inserting a user should create a personal account when personal accounts are enabled'
|
||||
);
|
||||
|
||||
-- anon users should not be able to see the personal account
|
||||
|
||||
set local role anon;
|
||||
|
||||
SELECT throws_ok(
|
||||
$$ select * from public.accounts order by created_at desc limit 1 $$,
|
||||
'permission denied for schema public'
|
||||
);
|
||||
|
||||
-- the primary owner should be able to see the personal account
|
||||
|
||||
select tests.authenticate_as('test1');
|
||||
|
||||
SELECT isnt_empty(
|
||||
$$ select * from public.accounts where primary_owner_user_id = tests.get_supabase_uid('test1') $$,
|
||||
'The primary owner should be able to see the personal account'
|
||||
);
|
||||
|
||||
------------
|
||||
--- Other Users
|
||||
|
||||
-- other users should not be able to see the personal account
|
||||
|
||||
select tests.authenticate_as('test2');
|
||||
|
||||
SELECT is_empty(
|
||||
$$ select * from public.accounts where primary_owner_user_id = tests.get_supabase_uid('test1') $$,
|
||||
'Other users should not be able to see the personal account'
|
||||
);
|
||||
|
||||
SELECT *
|
||||
FROM finish();
|
||||
|
||||
ROLLBACK;
|
||||
36
supabase/tests/database/schema.test.sql
Normal file
36
supabase/tests/database/schema.test.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
BEGIN;
|
||||
create extension "basejump-supabase_test_helpers" version '0.0.6';
|
||||
|
||||
select no_plan();
|
||||
|
||||
select has_table('public', 'config', 'Makerkit config table should exist');
|
||||
select has_table('public', 'accounts', 'Makerkit accounts table should exist');
|
||||
select has_table('public', 'accounts_memberships', 'Makerkit account_users table should exist');
|
||||
select has_table('public', 'invitations', 'Makerkit invitations table should exist');
|
||||
select has_table('public', 'billing_customers', 'Makerkit billing_customers table should exist');
|
||||
select has_table('public', 'subscriptions', 'Makerkit billing_subscriptions table should exist');
|
||||
select has_table('public', 'role_permissions', 'Makerkit roles_permissions table should exist');
|
||||
|
||||
SELECT schema_privs_are('public', 'anon', Array [NULL], 'Anon should not have access to public schema');
|
||||
|
||||
-- set the role to anonymous for verifying access tests
|
||||
set role anon;
|
||||
select throws_ok('select public.get_config()');
|
||||
select throws_ok('select public.is_set(''enable_organization_accounts'')');
|
||||
|
||||
-- set the role to the service_role for testing access
|
||||
set role service_role;
|
||||
select ok(public.get_config() is not null),
|
||||
'Makerkit get_config should be accessible to the service role';
|
||||
|
||||
-- set the role to authenticated for tests
|
||||
set role authenticated;
|
||||
select ok(public.get_config() is not null), 'Makerkit get_config should be accessible to authenticated users';
|
||||
select ok(public.is_set('enable_organization_accounts')),
|
||||
'Makerkit is_set should be accessible to authenticated users';
|
||||
select isnt_empty('select * from public.config', 'authenticated users should have access to Makerkit config');
|
||||
|
||||
SELECT *
|
||||
FROM finish();
|
||||
|
||||
ROLLBACK;
|
||||
Reference in New Issue
Block a user