121 lines
4.0 KiB
Erlang
121 lines
4.0 KiB
Erlang
-module(core_ticket_tests).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-include("records.hrl").
|
|
|
|
setup() ->
|
|
mnesia:start(),
|
|
mnesia:create_table(ticket, [
|
|
{attributes, record_info(fields, ticket)},
|
|
{ram_copies, [node()]}
|
|
]),
|
|
ok.
|
|
|
|
cleanup(_) ->
|
|
mnesia:delete_table(ticket),
|
|
mnesia:stop(),
|
|
ok.
|
|
|
|
core_ticket_test_() ->
|
|
{foreach,
|
|
fun setup/0,
|
|
fun cleanup/1,
|
|
[
|
|
{"Create ticket test", fun test_create_ticket/0},
|
|
{"Update existing ticket test", fun test_update_ticket/0},
|
|
{"Get ticket by id test", fun test_get_by_id/0},
|
|
{"Get ticket by error hash test", fun test_get_by_error_hash/0},
|
|
{"List all tickets test", fun test_list_all/0},
|
|
{"List by status test", fun test_list_by_status/0},
|
|
{"Update status test", fun test_update_status/0},
|
|
{"Assign ticket test", fun test_assign_ticket/0},
|
|
{"Add resolution test", fun test_add_resolution/0}
|
|
]}.
|
|
|
|
test_create_ticket() ->
|
|
ErrorMsg = <<"Test error">>,
|
|
Stacktrace = <<"line 1\nline 2">>,
|
|
Context = #{user_id => <<"user123">>},
|
|
|
|
{ok, Ticket} = core_ticket:create_or_update(ErrorMsg, Stacktrace, Context),
|
|
|
|
?assertEqual(ErrorMsg, Ticket#ticket.error_message),
|
|
?assertEqual(Stacktrace, Ticket#ticket.stacktrace),
|
|
?assertEqual(1, Ticket#ticket.count),
|
|
?assertEqual(open, Ticket#ticket.status),
|
|
?assert(is_binary(Ticket#ticket.id)),
|
|
?assert(is_binary(Ticket#ticket.error_hash)).
|
|
|
|
test_update_ticket() ->
|
|
ErrorMsg = <<"Test error">>,
|
|
Stacktrace = <<"line 1">>,
|
|
Context = #{},
|
|
|
|
{ok, Ticket1} = core_ticket:create_or_update(ErrorMsg, Stacktrace, Context),
|
|
?assertEqual(1, Ticket1#ticket.count),
|
|
|
|
{ok, Ticket2} = core_ticket:create_or_update(ErrorMsg, Stacktrace, Context),
|
|
?assertEqual(Ticket1#ticket.id, Ticket2#ticket.id),
|
|
?assertEqual(2, Ticket2#ticket.count),
|
|
?assert(Ticket2#ticket.last_seen >= Ticket1#ticket.last_seen).
|
|
|
|
test_get_by_id() ->
|
|
{ok, Ticket} = core_ticket:create_or_update(<<"Error">>, <<"">>, #{}),
|
|
|
|
{ok, Found} = core_ticket:get_by_id(Ticket#ticket.id),
|
|
?assertEqual(Ticket#ticket.id, Found#ticket.id),
|
|
|
|
{error, not_found} = core_ticket:get_by_id(<<"nonexistent">>).
|
|
|
|
test_get_by_error_hash() ->
|
|
ErrorMsg = <<"Unique error">>,
|
|
Stacktrace = <<"stack">>,
|
|
{ok, Ticket} = core_ticket:create_or_update(ErrorMsg, Stacktrace, #{}),
|
|
|
|
{ok, Found} = core_ticket:get_by_error_hash(Ticket#ticket.error_hash),
|
|
?assertEqual(Ticket#ticket.id, Found#ticket.id),
|
|
|
|
{error, not_found} = core_ticket:get_by_error_hash(<<"badhash">>).
|
|
|
|
test_list_all() ->
|
|
{ok, _} = core_ticket:create_or_update(<<"Error 1">>, <<"">>, #{}),
|
|
{ok, _} = core_ticket:create_or_update(<<"Error 2">>, <<"">>, #{}),
|
|
{ok, _} = core_ticket:create_or_update(<<"Error 3">>, <<"">>, #{}),
|
|
|
|
{ok, Tickets} = core_ticket:list_all(),
|
|
?assertEqual(3, length(Tickets)).
|
|
|
|
test_list_by_status() ->
|
|
{ok, _T1} = core_ticket:create_or_update(<<"E1">>, <<"">>, #{}),
|
|
{ok, T2} = core_ticket:create_or_update(<<"E2">>, <<"">>, #{}),
|
|
|
|
core_ticket:update_status(T2#ticket.id, resolved),
|
|
|
|
{ok, Open} = core_ticket:list_by_status(open),
|
|
?assertEqual(1, length(Open)),
|
|
|
|
{ok, Resolved} = core_ticket:list_by_status(resolved),
|
|
?assertEqual(1, length(Resolved)).
|
|
|
|
test_update_status() ->
|
|
{ok, Ticket} = core_ticket:create_or_update(<<"Error">>, <<"">>, #{}),
|
|
|
|
{ok, Updated} = core_ticket:update_status(Ticket#ticket.id, in_progress),
|
|
?assertEqual(in_progress, Updated#ticket.status),
|
|
|
|
{ok, Resolved} = core_ticket:update_status(Ticket#ticket.id, resolved),
|
|
?assertEqual(resolved, Resolved#ticket.status).
|
|
|
|
test_assign_ticket() ->
|
|
AdminId = <<"admin123">>,
|
|
{ok, Ticket} = core_ticket:create_or_update(<<"Error">>, <<"">>, #{}),
|
|
|
|
{ok, Assigned} = core_ticket:assign(Ticket#ticket.id, AdminId),
|
|
?assertEqual(AdminId, Assigned#ticket.assigned_to),
|
|
?assertEqual(in_progress, Assigned#ticket.status).
|
|
|
|
test_add_resolution() ->
|
|
Note = <<"Fixed in version 1.0">>,
|
|
{ok, Ticket} = core_ticket:create_or_update(<<"Error">>, <<"">>, #{}),
|
|
|
|
{ok, Updated} = core_ticket:add_resolution(Ticket#ticket.id, Note),
|
|
?assertEqual(Note, Updated#ticket.resolution_note). |