51 lines
1.9 KiB
Erlang
51 lines
1.9 KiB
Erlang
-module(calendar_share_migration_tests).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-include("records.hrl").
|
|
|
|
setup() ->
|
|
mnesia:stop(),
|
|
mnesia:delete_schema([node()]),
|
|
mnesia:create_schema([node()]),
|
|
mnesia:start(),
|
|
{atomic, ok} = mnesia:create_table(calendar_share, [
|
|
{ram_copies, [node()]},
|
|
{attributes, [calendar_id, user_id, rights]}
|
|
]),
|
|
ok.
|
|
|
|
cleanup(_) ->
|
|
catch mnesia:delete_table(calendar_share),
|
|
catch mnesia:delete_table(calendar_share_invite),
|
|
mnesia:stop(),
|
|
mnesia:delete_schema([node()]),
|
|
ok.
|
|
|
|
calendar_share_migration_test_() ->
|
|
{foreach, fun setup/0, fun cleanup/1, [
|
|
{"transforms old calendar_share to id+mirror", fun test_transform_old_share/0},
|
|
{"idempotent when already new schema", fun test_idempotent_new_schema/0}
|
|
]}.
|
|
|
|
test_transform_old_share() ->
|
|
%% Pre-#73 row shape: PK = calendar_id (no id / mirror_to_default).
|
|
ok = mnesia:dirty_write({calendar_share, <<"cal1">>, <<"u1">>, write}),
|
|
?assertEqual([calendar_id, user_id, rights],
|
|
mnesia:table_info(calendar_share, attributes)),
|
|
ok = '20260815220000_calendar_share_invite':up(),
|
|
?assertEqual(record_info(fields, calendar_share),
|
|
mnesia:table_info(calendar_share, attributes)),
|
|
[Rec] = mnesia:dirty_match_object(#calendar_share{calendar_id = <<"cal1">>, _ = '_'}),
|
|
?assertMatch(#calendar_share{user_id = <<"u1">>, rights = write,
|
|
mirror_to_default = false}, Rec),
|
|
?assert(is_binary(Rec#calendar_share.id)),
|
|
?assert(lists:member(calendar_share_invite, mnesia:system_info(tables))),
|
|
{ok, Share} = core_calendar_share:upsert(<<"cal2">>, <<"u2">>, admin, true),
|
|
?assertEqual(admin, Share#calendar_share.rights),
|
|
?assertEqual(true, Share#calendar_share.mirror_to_default).
|
|
|
|
test_idempotent_new_schema() ->
|
|
ok = '20260815220000_calendar_share_invite':up(),
|
|
ok = '20260815220000_calendar_share_invite':up(),
|
|
?assertEqual(record_info(fields, calendar_share),
|
|
mnesia:table_info(calendar_share, attributes)).
|