Stage 8
This commit is contained in:
120
test/logic_subscription_tests.erl
Normal file
120
test/logic_subscription_tests.erl
Normal file
@@ -0,0 +1,120 @@
|
||||
-module(logic_subscription_tests).
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-include("records.hrl").
|
||||
|
||||
logic_subscription_test_() ->
|
||||
{foreach,
|
||||
fun setup/0,
|
||||
fun cleanup/1,
|
||||
[
|
||||
{"Start trial", fun test_start_trial/0},
|
||||
{"Start trial duplicate", fun test_start_trial_duplicate/0},
|
||||
{"Activate subscription (no trial)", fun test_activate_subscription_no_trial/0},
|
||||
{"Activate subscription (after trial)", fun test_activate_subscription_after_trial/0},
|
||||
{"Check subscription - free", fun test_check_free/0},
|
||||
{"Check subscription - trial", fun test_check_trial/0},
|
||||
{"Check subscription - paid", fun test_check_paid/0},
|
||||
{"Can create commercial - free (auto-trial)", fun test_can_create_commercial_free/0},
|
||||
{"Can create commercial - trial", fun test_can_create_commercial_trial/0},
|
||||
{"Can create commercial - paid", fun test_can_create_commercial_paid/0},
|
||||
{"Get user subscription - free", fun test_get_user_subscription_free/0},
|
||||
{"Get user subscription - trial", fun test_get_user_subscription_trial/0},
|
||||
{"Get user subscription - paid", fun test_get_user_subscription_paid/0}
|
||||
]}.
|
||||
|
||||
setup() ->
|
||||
mnesia:start(),
|
||||
mnesia:create_table(user, [{attributes, record_info(fields, user)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(calendar, [{attributes, record_info(fields, calendar)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(subscription, [{attributes, record_info(fields, subscription)}, {ram_copies, [node()]}]),
|
||||
ok.
|
||||
|
||||
cleanup(_) ->
|
||||
mnesia:delete_table(subscription),
|
||||
mnesia:delete_table(calendar),
|
||||
mnesia:delete_table(user),
|
||||
mnesia:stop(),
|
||||
ok.
|
||||
|
||||
create_test_user() ->
|
||||
UserId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}),
|
||||
User = #user{
|
||||
id = UserId,
|
||||
email = <<UserId/binary, "@test.com">>,
|
||||
password_hash = <<"hash">>,
|
||||
role = user,
|
||||
status = active,
|
||||
created_at = calendar:universal_time(),
|
||||
updated_at = calendar:universal_time()
|
||||
},
|
||||
mnesia:dirty_write(User),
|
||||
UserId.
|
||||
|
||||
%% ============ Тесты ============
|
||||
|
||||
test_start_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, Sub} = logic_subscription:start_trial(UserId),
|
||||
?assertEqual(trial, Sub#subscription.plan),
|
||||
?assertEqual(true, Sub#subscription.trial_used).
|
||||
|
||||
test_start_trial_duplicate() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:start_trial(UserId),
|
||||
{error, already_has_subscription} = logic_subscription:start_trial(UserId).
|
||||
|
||||
test_activate_subscription_no_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, Sub} = logic_subscription:activate_subscription(UserId, monthly, #{card => "4242"}),
|
||||
?assertEqual(monthly, Sub#subscription.plan),
|
||||
?assertEqual(false, Sub#subscription.trial_used).
|
||||
|
||||
test_activate_subscription_after_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:start_trial(UserId),
|
||||
{ok, Sub} = logic_subscription:activate_subscription(UserId, monthly, #{card => "4242"}),
|
||||
?assertEqual(monthly, Sub#subscription.plan),
|
||||
?assertEqual(true, Sub#subscription.trial_used).
|
||||
|
||||
test_check_free() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, free, free} = logic_subscription:check_user_subscription(UserId).
|
||||
|
||||
test_check_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:start_trial(UserId),
|
||||
{ok, active, trial} = logic_subscription:check_user_subscription(UserId).
|
||||
|
||||
test_check_paid() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:activate_subscription(UserId, monthly, #{card => "4242"}),
|
||||
{ok, active, monthly} = logic_subscription:check_user_subscription(UserId).
|
||||
|
||||
test_can_create_commercial_free() ->
|
||||
% Новый пользователь автоматически получает пробный период при проверке
|
||||
UserId = create_test_user(),
|
||||
?assert(logic_subscription:can_create_commercial_calendar(UserId)).
|
||||
|
||||
test_can_create_commercial_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:start_trial(UserId),
|
||||
?assert(logic_subscription:can_create_commercial_calendar(UserId)).
|
||||
|
||||
test_can_create_commercial_paid() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:activate_subscription(UserId, monthly, #{card => "4242"}),
|
||||
?assert(logic_subscription:can_create_commercial_calendar(UserId)).
|
||||
|
||||
test_get_user_subscription_free() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, #{status := free}} = logic_subscription:get_user_subscription(UserId).
|
||||
|
||||
test_get_user_subscription_trial() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:start_trial(UserId),
|
||||
{ok, #{status := active, plan := trial}} = logic_subscription:get_user_subscription(UserId).
|
||||
|
||||
test_get_user_subscription_paid() ->
|
||||
UserId = create_test_user(),
|
||||
{ok, _} = logic_subscription:activate_subscription(UserId, annual, #{card => "4242"}),
|
||||
{ok, #{status := active, plan := annual}} = logic_subscription:get_user_subscription(UserId).
|
||||
Reference in New Issue
Block a user