|
|
|
@ -46,6 +46,58 @@ func TestMapError(t *testing.T) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TestMapError_AllCodes ensures all known error codes map to expected HTTP status codes.
|
|
|
|
|
|
|
|
func TestMapError_AllCodes(t *testing.T) {
|
|
|
|
|
|
|
|
cases := []struct {
|
|
|
|
|
|
|
|
code errorspkg.ErrorCode
|
|
|
|
|
|
|
|
statusCode int
|
|
|
|
|
|
|
|
}{
|
|
|
|
|
|
|
|
{errorspkg.CodeNotFound, http.StatusNotFound},
|
|
|
|
|
|
|
|
{errorspkg.CodeQuestionNotFound, http.StatusNotFound},
|
|
|
|
|
|
|
|
{errorspkg.CodeUserNotFound, http.StatusNotFound},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeInvalidInput, http.StatusBadRequest},
|
|
|
|
|
|
|
|
{errorspkg.CodeValidationFailed, http.StatusBadRequest},
|
|
|
|
|
|
|
|
{errorspkg.CodeInvalidPlayerName, http.StatusBadRequest},
|
|
|
|
|
|
|
|
{errorspkg.CodeInvalidAnswer, http.StatusBadRequest},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeUnauthorized, http.StatusUnauthorized},
|
|
|
|
|
|
|
|
{errorspkg.CodeInvalidToken, http.StatusUnauthorized},
|
|
|
|
|
|
|
|
{errorspkg.CodeTokenExpired, http.StatusUnauthorized},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeForbidden, http.StatusForbidden},
|
|
|
|
|
|
|
|
{errorspkg.CodeMFARequired, http.StatusForbidden},
|
|
|
|
|
|
|
|
{errorspkg.CodeEmailNotVerified, http.StatusForbidden},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeConflict, http.StatusConflict},
|
|
|
|
|
|
|
|
{errorspkg.CodeUserAlreadyExists, http.StatusConflict},
|
|
|
|
|
|
|
|
{errorspkg.CodeGameInProgress, http.StatusConflict},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeRateLimitExceeded, http.StatusTooManyRequests},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeSessionExpired, http.StatusGone},
|
|
|
|
|
|
|
|
{errorspkg.CodeSessionNotActive, http.StatusGone},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeMaxAttemptsReached, http.StatusUnprocessableEntity},
|
|
|
|
|
|
|
|
{errorspkg.CodeNoQuestionsAvailable, http.StatusUnprocessableEntity},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{errorspkg.CodeInternal, http.StatusInternalServerError},
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for _, tc := range cases {
|
|
|
|
|
|
|
|
status, resp := MapError(errorspkg.New(tc.code, "message"))
|
|
|
|
|
|
|
|
require.Equal(t, tc.statusCode, status)
|
|
|
|
|
|
|
|
require.Equal(t, tc.code.String(), resp.Code)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TestMapError_UnknownCode ensures unknown codes fall back to 500.
|
|
|
|
|
|
|
|
func TestMapError_UnknownCode(t *testing.T) {
|
|
|
|
|
|
|
|
status, resp := MapError(errorspkg.New(errorspkg.ErrorCode("UNKNOWN"), "oops"))
|
|
|
|
|
|
|
|
require.Equal(t, http.StatusInternalServerError, status)
|
|
|
|
|
|
|
|
require.Equal(t, "UNKNOWN", resp.Code)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// TestSendError verifies SendError writes the correct status and payload.
|
|
|
|
// TestSendError verifies SendError writes the correct status and payload.
|
|
|
|
func TestSendError(t *testing.T) {
|
|
|
|
func TestSendError(t *testing.T) {
|
|
|
|
app := fiber.New()
|
|
|
|
app := fiber.New()
|
|
|
|
|