From 8f337aaff88828c397772aad7f6f2c48fd950926 Mon Sep 17 00:00:00 2001 From: Stavros Date: Mon, 4 May 2026 20:25:16 +0300 Subject: [PATCH] tests: move to testify for testing in utils --- internal/utils/app_utils_test.go | 41 +++++++++---------- internal/utils/decoders/label_decoder_test.go | 7 ++-- internal/utils/fs_utils_test.go | 10 ++--- internal/utils/label_utils_test.go | 13 +++--- internal/utils/security_utils_test.go | 21 +++++----- internal/utils/string_utils_test.go | 3 +- internal/utils/tlog/log_wrapper_test.go | 28 ++++++------- 7 files changed, 59 insertions(+), 64 deletions(-) diff --git a/internal/utils/app_utils_test.go b/internal/utils/app_utils_test.go index 93285938..46dacafc 100644 --- a/internal/utils/app_utils_test.go +++ b/internal/utils/app_utils_test.go @@ -3,9 +3,8 @@ package utils_test import ( "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/utils" - - "gotest.tools/v3/assert" ) func TestGetRootDomain(t *testing.T) { @@ -13,14 +12,14 @@ func TestGetRootDomain(t *testing.T) { domain := "http://sub.tinyauth.app" expected := "tinyauth.app" result, err := utils.GetCookieDomain(domain) - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, expected, result) // Domain with multiple subdomains domain = "http://b.c.tinyauth.app" expected = "c.tinyauth.app" result, err = utils.GetCookieDomain(domain) - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, expected, result) // Invalid domain (only TLD) @@ -42,14 +41,14 @@ func TestGetRootDomain(t *testing.T) { domain = "https://sub.tinyauth.app/path" expected = "tinyauth.app" result, err = utils.GetCookieDomain(domain) - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, expected, result) // URL with port domain = "http://sub.tinyauth.app:8080" expected = "tinyauth.app" result, err = utils.GetCookieDomain(domain) - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, expected, result) // Domain managed by ICANN @@ -96,35 +95,35 @@ func TestFilter(t *testing.T) { testFunc := func(n int) bool { return n%2 == 0 } expected := []int{2, 4} result := utils.Filter(slice, testFunc) - assert.DeepEqual(t, expected, result) + assert.Equal(t, expected, result) // Case with no matches slice = []int{1, 3, 5} testFunc = func(n int) bool { return n%2 == 0 } expected = []int{} result = utils.Filter(slice, testFunc) - assert.DeepEqual(t, expected, result) + assert.Equal(t, expected, result) // Case with all matches slice = []int{2, 4, 6} testFunc = func(n int) bool { return n%2 == 0 } expected = []int{2, 4, 6} result = utils.Filter(slice, testFunc) - assert.DeepEqual(t, expected, result) + assert.Equal(t, expected, result) // Case with empty slice slice = []int{} testFunc = func(n int) bool { return n%2 == 0 } expected = []int{} result = utils.Filter(slice, testFunc) - assert.DeepEqual(t, expected, result) + assert.Equal(t, expected, result) // Case with different type (string) sliceStr := []string{"apple", "banana", "cherry"} testFuncStr := func(s string) bool { return len(s) > 5 } expectedStr := []string{"banana", "cherry"} resultStr := utils.Filter(sliceStr, testFuncStr) - assert.DeepEqual(t, expectedStr, resultStr) + assert.Equal(t, expectedStr, resultStr) } func TestIsRedirectSafe(t *testing.T) { @@ -134,50 +133,50 @@ func TestIsRedirectSafe(t *testing.T) { // Case with no subdomain redirectURL := "http://example.com/welcome" result := utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, true, result) + assert.True(t, result) // Case with different domain redirectURL = "http://malicious.com/phishing" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, false, result) + assert.False(t, result) // Case with subdomain redirectURL = "http://sub.example.com/page" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, true, result) + assert.True(t, result) // Case with sub-subdomain redirectURL = "http://a.b.example.com/home" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, true, result) + assert.True(t, result) // Case with empty redirect URL redirectURL = "" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, false, result) + assert.False(t, result) // Case with invalid URL redirectURL = "http://[::1]:namedport" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, false, result) + assert.False(t, result) // Case with URL having port redirectURL = "http://sub.example.com:8080/page" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, true, result) + assert.True(t, result) // Case with URL having different subdomain redirectURL = "http://another.example.com/page" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, true, result) + assert.True(t, result) // Case with URL having different TLD redirectURL = "http://example.org/page" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, false, result) + assert.False(t, result) // Case with malicious domain redirectURL = "https://malicious-example.com/yoyo" result = utils.IsRedirectSafe(redirectURL, domain) - assert.Equal(t, false, result) + assert.False(t, result) } diff --git a/internal/utils/decoders/label_decoder_test.go b/internal/utils/decoders/label_decoder_test.go index 035dd1f3..9048e7bc 100644 --- a/internal/utils/decoders/label_decoder_test.go +++ b/internal/utils/decoders/label_decoder_test.go @@ -3,10 +3,9 @@ package decoders_test import ( "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/utils/decoders" - - "gotest.tools/v3/assert" ) func TestDecodeLabels(t *testing.T) { @@ -64,6 +63,6 @@ func TestDecodeLabels(t *testing.T) { // Test result, err := decoders.DecodeLabels[model.Apps](test, "apps") - assert.NilError(t, err) - assert.DeepEqual(t, expected, result) + assert.NoError(t, err) + assert.Equal(t, expected, result) } diff --git a/internal/utils/fs_utils_test.go b/internal/utils/fs_utils_test.go index 54033ba5..5cb12ee4 100644 --- a/internal/utils/fs_utils_test.go +++ b/internal/utils/fs_utils_test.go @@ -4,24 +4,24 @@ import ( "os" "testing" - "gotest.tools/v3/assert" + "github.com/stretchr/testify/assert" ) func TestReadFile(t *testing.T) { // Setup file, err := os.Create("/tmp/tinyauth_test_file") - assert.NilError(t, err) + assert.NoError(t, err) _, err = file.WriteString("file content\n") - assert.NilError(t, err) + assert.NoError(t, err) err = file.Close() - assert.NilError(t, err) + assert.NoError(t, err) defer os.Remove("/tmp/tinyauth_test_file") // Normal case content, err := ReadFile("/tmp/tinyauth_test_file") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, "file content\n", content) // Non-existing file diff --git a/internal/utils/label_utils_test.go b/internal/utils/label_utils_test.go index 1d1554bb..7da1947d 100644 --- a/internal/utils/label_utils_test.go +++ b/internal/utils/label_utils_test.go @@ -3,9 +3,8 @@ package utils_test import ( "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/utils" - - "gotest.tools/v3/assert" ) func TestParseHeaders(t *testing.T) { @@ -18,7 +17,7 @@ func TestParseHeaders(t *testing.T) { "X-Custom-Header": "Value", "Another-Header": "AnotherValue", } - assert.DeepEqual(t, expected, utils.ParseHeaders(headers)) + assert.Equal(t, expected, utils.ParseHeaders(headers)) // Case insensitivity and trimming headers = []string{ @@ -29,7 +28,7 @@ func TestParseHeaders(t *testing.T) { "X-Custom-Header": "Value", "Another-Header": "AnotherValue", } - assert.DeepEqual(t, expected, utils.ParseHeaders(headers)) + assert.Equal(t, expected, utils.ParseHeaders(headers)) // Invalid headers (missing '=', empty key/value) headers = []string{ @@ -39,7 +38,7 @@ func TestParseHeaders(t *testing.T) { " = ", } expected = map[string]string{} - assert.DeepEqual(t, expected, utils.ParseHeaders(headers)) + assert.Equal(t, expected, utils.ParseHeaders(headers)) // Headers with unsafe characters headers = []string{ @@ -52,7 +51,7 @@ func TestParseHeaders(t *testing.T) { "Another-Header": "AnotherValue", "Good-Header": "GoodValue", } - assert.DeepEqual(t, expected, utils.ParseHeaders(headers)) + assert.Equal(t, expected, utils.ParseHeaders(headers)) // Header with spaces in key (should be ignored) headers = []string{ @@ -62,7 +61,7 @@ func TestParseHeaders(t *testing.T) { expected = map[string]string{ "Valid-Header": "ValidValue", } - assert.DeepEqual(t, expected, utils.ParseHeaders(headers)) + assert.Equal(t, expected, utils.ParseHeaders(headers)) } func TestSanitizeHeader(t *testing.T) { diff --git a/internal/utils/security_utils_test.go b/internal/utils/security_utils_test.go index 36f1e8bc..1432b736 100644 --- a/internal/utils/security_utils_test.go +++ b/internal/utils/security_utils_test.go @@ -4,21 +4,20 @@ import ( "os" "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/utils" - - "gotest.tools/v3/assert" ) func TestGetSecret(t *testing.T) { // Setup file, err := os.Create("/tmp/tinyauth_test_secret") - assert.NilError(t, err) + assert.NoError(t, err) _, err = file.WriteString(" secret \n") - assert.NilError(t, err) + assert.NoError(t, err) err = file.Close() - assert.NilError(t, err) + assert.NoError(t, err) defer os.Remove("/tmp/tinyauth_test_secret") // Get from config @@ -78,27 +77,27 @@ func TestEncodeBasicAuth(t *testing.T) { func TestFilterIP(t *testing.T) { // Exact match IPv4 ok, err := utils.FilterIP("10.10.0.1", "10.10.0.1") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, true, ok) // Non-match IPv4 ok, err = utils.FilterIP("10.10.0.1", "10.10.0.2") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, false, ok) // CIDR match IPv4 ok, err = utils.FilterIP("10.10.0.0/24", "10.10.0.2") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, true, ok) // CIDR match IPv4 with '-' instead of '/' ok, err = utils.FilterIP("10.10.10.0-24", "10.10.10.5") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, true, ok) // CIDR non-match IPv4 ok, err = utils.FilterIP("10.10.0.0/24", "10.5.0.1") - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, false, ok) // Invalid CIDR @@ -145,5 +144,5 @@ func TestGenerateUUID(t *testing.T) { // Different output for different input id3 := utils.GenerateUUID("differentstring") - assert.Assert(t, id1 != id3) + assert.NotEqual(t, id2, id3) } diff --git a/internal/utils/string_utils_test.go b/internal/utils/string_utils_test.go index 1db3bf17..30c192c9 100644 --- a/internal/utils/string_utils_test.go +++ b/internal/utils/string_utils_test.go @@ -3,9 +3,8 @@ package utils_test import ( "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/utils" - - "gotest.tools/v3/assert" ) func TestCapitalize(t *testing.T) { diff --git a/internal/utils/tlog/log_wrapper_test.go b/internal/utils/tlog/log_wrapper_test.go index ecc68394..8dfe4f47 100644 --- a/internal/utils/tlog/log_wrapper_test.go +++ b/internal/utils/tlog/log_wrapper_test.go @@ -5,11 +5,11 @@ import ( "encoding/json" "testing" + "github.com/stretchr/testify/assert" "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/utils/tlog" "github.com/rs/zerolog" - "gotest.tools/v3/assert" ) func TestNewLogger(t *testing.T) { @@ -25,25 +25,25 @@ func TestNewLogger(t *testing.T) { logger := tlog.NewLogger(cfg) - assert.Assert(t, logger != nil) - assert.Assert(t, logger.HTTP.GetLevel() == zerolog.InfoLevel) - assert.Assert(t, logger.App.GetLevel() == zerolog.DebugLevel) - assert.Assert(t, logger.Audit.GetLevel() == zerolog.Disabled) + assert.NotNil(t, logger) + assert.Equal(t, zerolog.InfoLevel, logger.HTTP.GetLevel()) + assert.Equal(t, zerolog.DebugLevel, logger.App.GetLevel()) + assert.Equal(t, zerolog.Disabled, logger.Audit.GetLevel()) } func TestNewSimpleLogger(t *testing.T) { logger := tlog.NewSimpleLogger() - assert.Assert(t, logger != nil) - assert.Assert(t, logger.HTTP.GetLevel() == zerolog.InfoLevel) - assert.Assert(t, logger.App.GetLevel() == zerolog.InfoLevel) - assert.Assert(t, logger.Audit.GetLevel() == zerolog.Disabled) + assert.NotNil(t, logger) + assert.Equal(t, zerolog.InfoLevel, logger.HTTP.GetLevel()) + assert.Equal(t, zerolog.DebugLevel, logger.App.GetLevel()) + assert.Equal(t, zerolog.Disabled, logger.Audit.GetLevel()) } func TestLoggerInit(t *testing.T) { logger := tlog.NewSimpleLogger() logger.Init() - assert.Assert(t, tlog.App.GetLevel() != zerolog.Disabled) + assert.Equal(t, zerolog.Disabled, tlog.App.GetLevel()) } func TestLoggerWithDisabledStreams(t *testing.T) { @@ -59,9 +59,9 @@ func TestLoggerWithDisabledStreams(t *testing.T) { logger := tlog.NewLogger(cfg) - assert.Assert(t, logger.HTTP.GetLevel() == zerolog.Disabled) - assert.Assert(t, logger.App.GetLevel() == zerolog.Disabled) - assert.Assert(t, logger.Audit.GetLevel() == zerolog.Disabled) + assert.Equal(t, zerolog.Disabled, logger.HTTP.GetLevel()) + assert.Equal(t, zerolog.Disabled, logger.App.GetLevel()) + assert.Equal(t, zerolog.Disabled, logger.Audit.GetLevel()) } func TestLogStreamField(t *testing.T) { @@ -86,7 +86,7 @@ func TestLogStreamField(t *testing.T) { var logEntry map[string]interface{} err := json.Unmarshal(buf.Bytes(), &logEntry) - assert.NilError(t, err) + assert.NoError(t, err) assert.Equal(t, "http", logEntry["log_stream"]) assert.Equal(t, "test message", logEntry["message"])