Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact cd7ec5e952b656057069dac3b9d21572a15b2bd5f7975118afcdc730a9599d24:


-module(nova_error_controller_tests).
-include_lib("eunit/include/eunit.hrl").

-define(SETUP, fun() -> nova_test_helper:setup_nova_env() end).
-define(CLEANUP, fun(Prev) -> nova_test_helper:cleanup_nova_env(Prev) end).

%%====================================================================
%% status_code/1
%%====================================================================

status_code_from_req_test() ->
    Req = #{resp_status_code => 404},
    ?assertEqual({status, 404}, nova_error_controller:status_code(Req)).

status_code_default_test() ->
    ?assertEqual({status, 200}, nova_error_controller:status_code(#{})).

%%====================================================================
%% format_stacktrace/1
%%====================================================================

format_stacktrace_empty_test() ->
    ?assertEqual([], nova_error_controller:format_stacktrace([])).

format_stacktrace_single_entry_test() ->
    Entry = {my_mod, my_fun, 2, [{file, "my_mod.erl"}, {line, 42}]},
    [Formatted] = nova_error_controller:format_stacktrace([Entry]),
    ?assertEqual(<<"my_mod">>, maps:get(module, Formatted)),
    ?assertEqual(<<"my_fun">>, maps:get(function, Formatted)),
    ?assertEqual(<<"my_mod.erl">>, maps:get(file, Formatted)),
    ?assertEqual(42, maps:get(line, Formatted)).

format_stacktrace_no_file_line_test() ->
    Entry = {some_mod, some_fun, 1, []},
    [Formatted] = nova_error_controller:format_stacktrace([Entry]),
    ?assertEqual(undefined, maps:get(file, Formatted)),
    ?assertEqual(undefined, maps:get(line, Formatted)).

format_stacktrace_multiple_entries_test() ->
    Entries = [
        {mod_a, fun_a, 1, [{file, "a.erl"}, {line, 10}]},
        {mod_b, fun_b, 0, [{file, "b.erl"}, {line, 20}]}
    ],
    Result = nova_error_controller:format_stacktrace(Entries),
    ?assertEqual(2, length(Result)).

format_stacktrace_not_enabled_test() ->
    ?assertEqual([], nova_error_controller:format_stacktrace(not_enabled)).

%%====================================================================
%% format_arity/1
%%====================================================================

format_arity_integer_test() ->
    ?assertEqual(3, nova_error_controller:format_arity(3)).

format_arity_function_test() ->
    F = fun() -> ok end,
    ?assertEqual(<<"fun">>, nova_error_controller:format_arity(F)).

%%====================================================================
%% not_found/1
%%====================================================================

not_found_json_accept_test_() ->
    {setup, ?SETUP, ?CLEANUP,
     fun() ->
         Req = nova_test_helper:mock_req(<<"GET">>, <<"/missing">>),
         Req1 = nova_test_helper:with_header(<<"accept">>, <<"application/json">>, Req),
         {status, 404, Headers, Body} = nova_error_controller:not_found(Req1),
         ?assertEqual(<<"application/json">>, maps:get(<<"content-type">>, Headers)),
         ?assert(is_binary(Body))
     end}.

%% When no accept header, defaults to JSON
not_found_no_accept_test_() ->
    {setup, ?SETUP, ?CLEANUP,
     fun() ->
         Req = nova_test_helper:mock_req(<<"GET">>, <<"/missing">>),
         {status, 404, Headers, _Body} = nova_error_controller:not_found(Req),
         ?assertEqual(<<"application/json">>, maps:get(<<"content-type">>, Headers))
     end}.

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.