diff --git a/apps/web/supabase/tests/database/billing-orders.test.sql b/apps/web/supabase/tests/database/billing-orders.test.sql index cfd705036..6f85a58f3 100644 --- a/apps/web/supabase/tests/database/billing-orders.test.sql +++ b/apps/web/supabase/tests/database/billing-orders.test.sql @@ -3,8 +3,48 @@ create extension "basejump-supabase_test_helpers" version '0.0.6'; select no_plan(); --- test +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'); -select * from finish(); +INSERT INTO public.billing_customers(account_id, provider, customer_id) +VALUES (tests.get_supabase_uid('primary_owner'), 'stripe', 'cus_test'); + +-- Call the upsert_order function +SELECT public.upsert_order(tests.get_supabase_uid('primary_owner'), 'cus_test', 'order_test', 'pending', 'stripe', 100, 'usd', '[{"product_id": "prod_test", "variant_id": "var_test", "price_amount": 100, "quantity": 1}]'); + +-- Verify that the order was created correctly +SELECT is( + (SELECT status FROM public.orders WHERE id = 'order_test'), + 'pending', + 'The order status should be pending' +); + +-- Verify that the subscription items were created correctly +SELECT row_eq( + $$ select count(*) from order_items where order_id = 'order_test' $$, + row(1::bigint), + 'The order items should be created' +); + +-- Call the upsert_order function again to update the order +SELECT public.upsert_order(tests.get_supabase_uid('primary_owner'), 'cus_test', 'order_test', 'succeeded', 'stripe', 100, 'usd', '[{"product_id": "prod_test", "variant_id": "var_test", "price_amount": 100, "quantity": 10}]'); + +-- Verify that the order was updated correctly +SELECT is( + (SELECT status FROM public.orders WHERE id = 'order_test'), + 'succeeded', + 'The order status should be succeeded' +); + +SELECT row_eq( + $$ select quantity from order_items where variant_id = 'var_test' $$, + row(10::int), + 'The subscription items should be updated' +); + +-- Finish the tests and clean up +SELECT * FROM finish(); +ROLLBACK; -rollback; \ No newline at end of file diff --git a/apps/web/supabase/tests/database/billing-subscriptions.test.sql b/apps/web/supabase/tests/database/billing-subscriptions.test.sql index cfd705036..1efc7aae8 100644 --- a/apps/web/supabase/tests/database/billing-subscriptions.test.sql +++ b/apps/web/supabase/tests/database/billing-subscriptions.test.sql @@ -3,8 +3,118 @@ create extension "basejump-supabase_test_helpers" version '0.0.6'; select no_plan(); --- test +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 (tests.get_supabase_uid('primary_owner'), 'stripe', 'cus_test'); + +-- Call the upsert_subscription function +SELECT public.upsert_subscription(tests.get_supabase_uid('primary_owner'), 'cus_test', 'sub_test', true, 'active', 'stripe', false, 'usd', now(), now() + interval '1 month', '[ + { + "product_id": "prod_test", + "variant_id": "var_test", + "type": "flat", + "price_amount": 1000, + "quantity": 1, + "interval": "month", + "interval_count": 1 + }, + { + "product_id": "prod_test_2", + "variant_id": "var_test_2", + "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(2::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(tests.get_supabase_uid('primary_owner'), 'cus_test', 'sub_test', false, 'past_due', 'stripe', true, 'usd', now(), now() + interval '1 month', '[ + { + "product_id": "prod_test", + "variant_id": "var_test", + "type": "flat", + "price_amount": 2000, + "quantity": 1, + "interval": "month", + "interval_count": 1 + }, + { + "product_id": "prod_test_2", + "variant_id": "var_test_2", + "type": "flat", + "price_amount": 2000, + "quantity": 2, + "interval": "year", + "interval_count": 12 + } +]'); + +-- 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 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 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' +); + + +-- 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' +); + +-- Finish the tests and clean up select * from finish(); rollback; \ No newline at end of file