196 lines
5.9 KiB
PL/PgSQL
196 lines
5.9 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');
|
|
|
|
-- Create a test account and billing customer
|
|
INSERT INTO public.billing_customers(account_id, provider, customer_id)
|
|
VALUES (makerkit.get_account_id_by_slug('makerkit'), 'stripe', 'cus_test');
|
|
|
|
-- Call the upsert_subscription function
|
|
SELECT public.upsert_subscription(makerkit.get_account_id_by_slug('makerkit'), 'cus_test', 'sub_test', true, 'active', 'stripe', false, 'usd', now(), now() + interval '1 month', '[
|
|
{
|
|
"id": "sub_123",
|
|
"product_id": "prod_test",
|
|
"variant_id": "var_test",
|
|
"type": "flat",
|
|
"price_amount": 1000,
|
|
"quantity": 1,
|
|
"interval": "month",
|
|
"interval_count": 1
|
|
},
|
|
{
|
|
"id": "sub_456",
|
|
"product_id": "prod_test_2",
|
|
"variant_id": "var_test_2",
|
|
"type": "flat",
|
|
"price_amount": 2000,
|
|
"quantity": 2,
|
|
"interval": "month",
|
|
"interval_count": 1
|
|
},
|
|
{
|
|
"id": "sub_789",
|
|
"product_id": "prod_test_3",
|
|
"variant_id": "var_test_3",
|
|
"type": "flat",
|
|
"price_amount": 2000,
|
|
"quantity": 2,
|
|
"interval": "month",
|
|
"interval_count": 1
|
|
}
|
|
]');
|
|
|
|
-- Verify that the subscription items were created correctly
|
|
SELECT row_eq(
|
|
$$ select count(*) from subscription_items where subscription_id = 'sub_test' $$,
|
|
row(3::bigint),
|
|
'The subscription items should be created'
|
|
);
|
|
|
|
-- Verify that the subscription was created correctly
|
|
SELECT is(
|
|
(SELECT active FROM public.subscriptions WHERE id = 'sub_test'),
|
|
true,
|
|
'The subscription should be active'
|
|
);
|
|
|
|
SELECT is(
|
|
(SELECT status FROM public.subscriptions WHERE id = 'sub_test'),
|
|
'active',
|
|
'The subscription status should be active'
|
|
);
|
|
|
|
-- Call the upsert_subscription function again to update the subscription
|
|
SELECT public.upsert_subscription(makerkit.get_account_id_by_slug('makerkit'), 'cus_test', 'sub_test', false, 'past_due', 'stripe', true, 'usd', now(), now() + interval '1 month', '[
|
|
{
|
|
"id": "sub_123",
|
|
"product_id": "prod_test",
|
|
"variant_id": "var_test",
|
|
"type": "flat",
|
|
"price_amount": 2000,
|
|
"quantity": 1,
|
|
"interval": "month",
|
|
"interval_count": 1
|
|
},
|
|
{
|
|
"id": "sub_456",
|
|
"product_id": "prod_test_3",
|
|
"variant_id": "var_test_2",
|
|
"type": "flat",
|
|
"price_amount": 2000,
|
|
"quantity": 2,
|
|
"interval": "year",
|
|
"interval_count": 12
|
|
}
|
|
]');
|
|
|
|
SELECT row_eq(
|
|
$$ select count(*) from subscription_items where subscription_id = 'sub_test' $$,
|
|
row(2::bigint),
|
|
'The subscription items should be updated'
|
|
);
|
|
|
|
-- Verify that the subscription items were updated correctly
|
|
SELECT row_eq(
|
|
$$ select price_amount from subscription_items where variant_id = 'var_test' $$,
|
|
row('2000'::numeric),
|
|
'The subscription items price_amount should be updated'
|
|
);
|
|
|
|
-- Verify that the subscription items were updated correctly
|
|
SELECT row_eq(
|
|
$$ select interval from subscription_items where variant_id = 'var_test_2' $$,
|
|
row('year'::varchar),
|
|
'The subscription items interval should be updated'
|
|
);
|
|
|
|
-- Verify that the subscription items were updated correctly
|
|
SELECT row_eq(
|
|
$$ select product_id from subscription_items where id = 'sub_456' $$,
|
|
row('prod_test_3'::varchar),
|
|
'The subscription items product_id should be updated'
|
|
);
|
|
|
|
-- Verify that the subscription was updated correctly
|
|
SELECT is(
|
|
(SELECT active FROM public.subscriptions WHERE id = 'sub_test'),
|
|
false,
|
|
'The subscription should be inactive'
|
|
);
|
|
|
|
SELECT is(
|
|
(SELECT status FROM public.subscriptions WHERE id = 'sub_test'),
|
|
'past_due',
|
|
'The subscription status should be past_due'
|
|
);
|
|
|
|
select makerkit.authenticate_as('member');
|
|
|
|
SELECT row_eq(
|
|
$$ select count(*) from subscription_items where subscription_id = 'sub_test' $$,
|
|
row(2::bigint),
|
|
'The member can also read the subscription items'
|
|
);
|
|
|
|
set role service_role;
|
|
|
|
-- Call the upsert_subscription function again to update the subscription
|
|
SELECT public.upsert_subscription(tests.get_supabase_uid('primary_owner'), 'cus_test', 'sub_test', true, 'active', 'stripe', false, 'usd', now(), now() + interval '1 month', '[]');
|
|
|
|
-- Verify that the subscription was updated correctly
|
|
SELECT is(
|
|
(SELECT active FROM public.subscriptions WHERE id = 'sub_test'),
|
|
true,
|
|
'The subscription should be active'
|
|
);
|
|
|
|
select makerkit.authenticate_as('member');
|
|
|
|
-- account can read their own subscription
|
|
select isnt_empty(
|
|
$$ select 1 from subscriptions where id = 'sub_test' $$,
|
|
'The account can read their own subscription'
|
|
);
|
|
|
|
select is_empty(
|
|
$$ select * from subscription_items where subscription_id = 'sub_test' $$,
|
|
'The subscription items are now empty'
|
|
);
|
|
|
|
select is(
|
|
(public.has_active_subscription(makerkit.get_account_id_by_slug('makerkit'))),
|
|
true,
|
|
'The function public.has_active_subscription should return true when the account has a subscription'
|
|
);
|
|
|
|
-- foreigners
|
|
select tests.create_supabase_user('foreigner');
|
|
select makerkit.authenticate_as('foreigner');
|
|
|
|
-- account cannot read other's subscription
|
|
select is_empty(
|
|
$$ select 1 from subscriptions where id = 'sub_test' $$,
|
|
'The account cannot read the other account subscriptions'
|
|
);
|
|
|
|
select is_empty(
|
|
$$ select 1 from subscription_items where subscription_id = 'sub_test' $$,
|
|
'The account cannot read the other account subscription items'
|
|
);
|
|
|
|
select is(
|
|
(public.has_active_subscription(makerkit.get_account_id_by_slug('makerkit'))),
|
|
false,
|
|
'The function public.has_active_subscription should return false when a foreigner is querying the account subscription'
|
|
);
|
|
|
|
-- Finish the tests and clean up
|
|
select * from finish();
|
|
|
|
rollback; |