From 7754d78bfdd4f8713a22eb2d14651b7f4074ba7d Mon Sep 17 00:00:00 2001 From: Anton Wolter Date: Wed, 17 Apr 2024 00:05:14 +0200 Subject: [PATCH] Initialize field, adapt logic, add tests --- .../20240414161707_basejump-setup.sql | 5 ++- .../20240414161947_basejump-accounts.sql | 28 +++++++------ .../database/01-basejump-schema-tests.sql | 4 +- .../database/02-no-personal-accounts.sql | 39 +++++++++++++++++++ .../tests/database/02-personal-accounts.sql | 6 ++- supabase/tests/database/04-team-accounts.sql | 2 +- .../database/05-team-accounts-disabled.sql | 2 +- supabase/tests/database/06-invitations.sql | 2 +- .../database/07-inviting-team-member.sql | 7 +++- .../tests/database/08-inviting-team-owner.sql | 2 +- .../database/09-removing-team-members.sql | 2 +- supabase/tests/database/10-account-roles.sql | 2 +- .../database/11-public-account-functions.sql | 8 ++-- .../tests/database/12-created-by-tracking.sql | 2 +- .../database/14-public-billing-functions.sql | 2 +- .../15-billing-disabled-functions.sql | 6 ++- 16 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 supabase/tests/database/02-no-personal-accounts.sql diff --git a/supabase/migrations/20240414161707_basejump-setup.sql b/supabase/migrations/20240414161707_basejump-setup.sql index bbc2afd..0c47650 100644 --- a/supabase/migrations/20240414161707_basejump-setup.sql +++ b/supabase/migrations/20240414161707_basejump-setup.sql @@ -64,12 +64,13 @@ CREATE TABLE IF NOT EXISTS basejump.config enable_team_accounts boolean default true, enable_personal_account_billing boolean default true, enable_team_account_billing boolean default true, + enable_automatic_personal_team boolean default true, -- In some setups you might not want to automatically create a personal space. In this case set this value to false. billing_provider text default 'stripe' ); -- create config row -INSERT INTO basejump.config (enable_team_accounts, enable_personal_account_billing, enable_team_account_billing) -VALUES (true, true, true); +INSERT INTO basejump.config (enable_team_accounts, enable_personal_account_billing, enable_team_account_billing, enable_automatic_personal_team) +VALUES (true, true, true, false); -- enable select on the config table GRANT SELECT ON basejump.config TO authenticated, service_role; diff --git a/supabase/migrations/20240414161947_basejump-accounts.sql b/supabase/migrations/20240414161947_basejump-accounts.sql index 87e913d..04a146e 100644 --- a/supabase/migrations/20240414161947_basejump-accounts.sql +++ b/supabase/migrations/20240414161947_basejump-accounts.sql @@ -209,21 +209,25 @@ declare first_account_id uuid; generated_user_name text; begin + -- Check the condition + if basejump.is_set('enable_automatic_personal_team') then - -- first we setup the user profile - -- TODO: see if we can get the user's name from the auth.users table once we learn how oauth works - if new.email IS NOT NULL then - generated_user_name := split_part(new.email, '@', 1); - end if; - -- create the new users's personal account - insert into basejump.accounts (name, primary_owner_user_id, personal_account, id) - values (generated_user_name, NEW.id, true, NEW.id) - returning id into first_account_id; + -- first we setup the user profile + -- TODO: see if we can get the user's name from the auth.users table once we learn how oauth works + if new.email IS NOT NULL then + generated_user_name := split_part(new.email, '@', 1); + end if; + -- create the new users's personal account + insert into basejump.accounts (name, primary_owner_user_id, personal_account, id) + values (generated_user_name, NEW.id, true, NEW.id) + returning id into first_account_id; - -- add them to the account_user table so they can act on it - insert into basejump.account_user (account_id, user_id, account_role) - values (first_account_id, NEW.id, 'owner'); + -- add them to the account_user table so they can act on it + insert into basejump.account_user (account_id, user_id, account_role) + values (first_account_id, NEW.id, 'owner'); + return NEW; + end if; return NEW; end; $$; diff --git a/supabase/tests/database/01-basejump-schema-tests.sql b/supabase/tests/database/01-basejump-schema-tests.sql index af3d331..e9cd5f4 100644 --- a/supabase/tests/database/01-basejump-schema-tests.sql +++ b/supabase/tests/database/01-basejump-schema-tests.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(20); @@ -15,7 +15,7 @@ select has_table('basejump', 'billing_subscriptions', 'Basejump billing_subscrip select tests.rls_enabled('basejump'); select columns_are('basejump', 'config', - Array ['enable_team_accounts', 'enable_personal_account_billing', 'enable_team_account_billing', 'billing_provider'], + Array ['enable_team_accounts', 'enable_personal_account_billing', 'enable_team_account_billing', 'enable_automatic_personal_team', 'billing_provider'], 'Basejump config table should have the correct columns'); diff --git a/supabase/tests/database/02-no-personal-accounts.sql b/supabase/tests/database/02-no-personal-accounts.sql new file mode 100644 index 0000000..67b7104 --- /dev/null +++ b/supabase/tests/database/02-no-personal-accounts.sql @@ -0,0 +1,39 @@ +BEGIN; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; + +select plan(2); + +-- make sure we're not setup for automatic personal team account creation +update basejump.config +set enable_automatic_personal_team = false; + +--- 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'); + +select tests.create_supabase_user('test3', 'test3@test.com'); +select tests.create_supabase_user('test4', 'test4@test.com'); + + +------------ +--- Primary Owner +------------ +select tests.authenticate_as('test1'); + +-- should not create any personal account automatically +SELECT is_empty( + $$ select name from basejump.accounts limit 1 $$, + 'Inserting a user should create a personal account when personal accounts are enabled' + ); + +-- should have not created accounts that are personal +SELECT is_empty( + $$ select name from basejump.accounts where personal_account = true limit 1 $$, + 'Should not have created personal accounts' + ); + +SELECT * +FROM finish(); + +ROLLBACK; \ No newline at end of file diff --git a/supabase/tests/database/02-personal-accounts.sql b/supabase/tests/database/02-personal-accounts.sql index e61f34a..0a6b9dc 100644 --- a/supabase/tests/database/02-personal-accounts.sql +++ b/supabase/tests/database/02-personal-accounts.sql @@ -1,8 +1,12 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(15); +-- make sure we're setup for automatic personal team account creation +update basejump.config +set enable_automatic_personal_team = true; + --- 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'); diff --git a/supabase/tests/database/04-team-accounts.sql b/supabase/tests/database/04-team-accounts.sql index 9d8219a..24f9f1a 100644 --- a/supabase/tests/database/04-team-accounts.sql +++ b/supabase/tests/database/04-team-accounts.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(34); diff --git a/supabase/tests/database/05-team-accounts-disabled.sql b/supabase/tests/database/05-team-accounts-disabled.sql index bf97b7a..f64fa8d 100644 --- a/supabase/tests/database/05-team-accounts-disabled.sql +++ b/supabase/tests/database/05-team-accounts-disabled.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(1); diff --git a/supabase/tests/database/06-invitations.sql b/supabase/tests/database/06-invitations.sql index c96da9e..bcc1ab3 100644 --- a/supabase/tests/database/06-invitations.sql +++ b/supabase/tests/database/06-invitations.sql @@ -1,7 +1,7 @@ -- the main testing for invitations on accounts is in the team_accounts tests -- this batch is to let us test the more complicated behaviors such as one_time, 24_hour, multiple use, etc...accounts BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(35); diff --git a/supabase/tests/database/07-inviting-team-member.sql b/supabase/tests/database/07-inviting-team-member.sql index aa5cb39..6c308fc 100644 --- a/supabase/tests/database/07-inviting-team-member.sql +++ b/supabase/tests/database/07-inviting-team-member.sql @@ -1,11 +1,14 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(10); -- make sure we're setup for enabling personal accounts update basejump.config -set enable_team_accounts = true; +set enable_team_accounts = true, + -- make sure we're setup for automatic personal team account creation + enable_automatic_personal_team = true; + --- Create the users we need for testing select tests.create_supabase_user('test1'); diff --git a/supabase/tests/database/08-inviting-team-owner.sql b/supabase/tests/database/08-inviting-team-owner.sql index b649d0f..a903654 100644 --- a/supabase/tests/database/08-inviting-team-owner.sql +++ b/supabase/tests/database/08-inviting-team-owner.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(9); diff --git a/supabase/tests/database/09-removing-team-members.sql b/supabase/tests/database/09-removing-team-members.sql index 12ecef9..0cccdb0 100644 --- a/supabase/tests/database/09-removing-team-members.sql +++ b/supabase/tests/database/09-removing-team-members.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(6); diff --git a/supabase/tests/database/10-account-roles.sql b/supabase/tests/database/10-account-roles.sql index c412282..8f78a8e 100644 --- a/supabase/tests/database/10-account-roles.sql +++ b/supabase/tests/database/10-account-roles.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(17); -- make sure we're setup for enabling personal accounts diff --git a/supabase/tests/database/11-public-account-functions.sql b/supabase/tests/database/11-public-account-functions.sql index 0f40dd1..02aa408 100644 --- a/supabase/tests/database/11-public-account-functions.sql +++ b/supabase/tests/database/11-public-account-functions.sql @@ -1,11 +1,13 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(29); -- make sure we're setup for the test correctly -update basejump.config -set enable_team_accounts = true; +update basejump.config +set enable_team_accounts = true, + -- make sure we're setup for automatic personal team account creation + enable_automatic_personal_team = true; --- we insert a user into auth.users and return the id into user_id to use select tests.create_supabase_user('test1'); diff --git a/supabase/tests/database/12-created-by-tracking.sql b/supabase/tests/database/12-created-by-tracking.sql index 23bb543..d16437c 100644 --- a/supabase/tests/database/12-created-by-tracking.sql +++ b/supabase/tests/database/12-created-by-tracking.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; select plan(5); diff --git a/supabase/tests/database/14-public-billing-functions.sql b/supabase/tests/database/14-public-billing-functions.sql index eedc07d..ea9a53a 100644 --- a/supabase/tests/database/14-public-billing-functions.sql +++ b/supabase/tests/database/14-public-billing-functions.sql @@ -1,5 +1,5 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; update basejump.config set enable_team_account_billing = TRUE, diff --git a/supabase/tests/database/15-billing-disabled-functions.sql b/supabase/tests/database/15-billing-disabled-functions.sql index 6dd87e7..a5928fd 100644 --- a/supabase/tests/database/15-billing-disabled-functions.sql +++ b/supabase/tests/database/15-billing-disabled-functions.sql @@ -1,9 +1,11 @@ BEGIN; -create extension "basejump-supabase_test_helpers" version '0.0.6'; +create extension if not exists "basejump-supabase_test_helpers" version '0.0.6'; update basejump.config set enable_personal_account_billing = FALSE, - enable_team_account_billing = FALSE; + enable_team_account_billing = FALSE, + -- make sure we're setup for automatic personal team account creation + enable_automatic_personal_team = true; select plan(6);