From bd0fdf89f36406e2c8e0ec65e39fd463c99da8d1 Mon Sep 17 00:00:00 2001 From: F04C Date: Tue, 27 Jan 2026 10:45:15 +0800 Subject: [PATCH] fix test files --- helper/circuit_breaker_test.go | 8 +++ middleware/jwt.go | 12 ++-- middleware/jwt_test.go | 7 +++ repository/permission_repository.go | 4 +- repository/permission_repository_test.go | 14 ++--- routes/routes_test.go | 10 +++- services/authorize_test.go | 70 ++++++++++-------------- services/cached_authorization_test.go | 20 +++---- services/policy_evaluator.go | 4 ++ services/policy_evaluator_test.go | 6 +- 10 files changed, 83 insertions(+), 72 deletions(-) diff --git a/helper/circuit_breaker_test.go b/helper/circuit_breaker_test.go index cc6d70f..a1185e8 100644 --- a/helper/circuit_breaker_test.go +++ b/helper/circuit_breaker_test.go @@ -2,11 +2,19 @@ package helper import ( "errors" + "os" "sync" "testing" "time" ) +func TestMain(m *testing.M) { + os.Setenv("GO_ENV", "development") + code := m.Run() + os.Unsetenv("GO_ENV") + os.Exit(code) +} + func TestNewCircuitBreaker(t *testing.T) { tests := []struct { name string diff --git a/middleware/jwt.go b/middleware/jwt.go index c67a2fb..a1c7328 100644 --- a/middleware/jwt.go +++ b/middleware/jwt.go @@ -42,12 +42,16 @@ func getRSAPublicKey() (*rsa.PublicKey, error) { rsaPublicKeyOnce.Do(func() { log.Print("Loading RSA public key from PEM certificate file") - // Read PEM file + // Read PEM file - use path relative to executable or try both common paths pemData, err := os.ReadFile("rsa/ServerCertificate.pem") if err != nil { - rsaPublicKeyError = fmt.Errorf("failed to read PEM file: %w", err) - log.Printf("Error reading PEM file: %v", rsaPublicKeyError) - return + // Try alternate path when running tests from subdirectory + pemData, err = os.ReadFile("../rsa/ServerCertificate.pem") + if err != nil { + rsaPublicKeyError = fmt.Errorf("failed to read PEM file: %w", err) + log.Printf("Error reading PEM file: %v", rsaPublicKeyError) + return + } } log.Print("PEM file successfully read") diff --git a/middleware/jwt_test.go b/middleware/jwt_test.go index 01e9a4c..843f6a1 100644 --- a/middleware/jwt_test.go +++ b/middleware/jwt_test.go @@ -19,6 +19,13 @@ import ( "github.com/golang-jwt/jwt/v5" ) +func TestMain(m *testing.M) { + os.Setenv("GO_ENV", "development") + code := m.Run() + os.Unsetenv("GO_ENV") + os.Exit(code) +} + // Test helper to generate RSA key pair and certificate func generateTestRSACertificate(t *testing.T) (privateKey *rsa.PrivateKey, certPEM []byte) { t.Helper() diff --git a/repository/permission_repository.go b/repository/permission_repository.go index d2b8072..8ca4eb9 100644 --- a/repository/permission_repository.go +++ b/repository/permission_repository.go @@ -100,8 +100,8 @@ func GetUserAttributes(userID string) (map[string]string, error) { func GetUserByID(userID string) (*models.User, error) { query := ` SELECT user_id, first_name, middle_initial, last_name, suffix, email_address, - emp_id, is_logged_in, - first_logged_in, home_address, contact_number, device_id, role_id, is_deleted, secret_key, is_activated, created_at, updated_at + emp_id, is_logged_in, first_logged_in, home_address, contact_number, device_id, + role_id, is_deleted, secret_key, is_activated, created_at, updated_at FROM uess_user_management.users WHERE user_id = ? AND is_deleted = 'N' LIMIT 1 diff --git a/repository/permission_repository_test.go b/repository/permission_repository_test.go index 3848159..c6d7c56 100644 --- a/repository/permission_repository_test.go +++ b/repository/permission_repository_test.go @@ -109,13 +109,12 @@ func TestGetUserByIDSuccess(t *testing.T) { rows := sqlmock.NewRows([]string{ "user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at", + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at", }).AddRow( "user123", "John", "M", "Doe", "Jr", "john@example.com", - "regular", "EMP001", "01", "02", "03", "04", "05", "Y", - "2023-01-01", "123 Main St", "1234567890", "device001", 1, - 2, "N", "secret", "Y", testTime, testTime, + "EMP001", "Y", "Y", "123 Main St", "1234567890", "device001", + 1, "N", "secret", "Y", testTime, testTime, ) mock.ExpectQuery("SELECT user_id, first_name"). @@ -316,9 +315,8 @@ func TestGetUserByIDEmptyID(t *testing.T) { rows := sqlmock.NewRows([]string{ "user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at", + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at", }) // Match the actual query format with all the fields diff --git a/routes/routes_test.go b/routes/routes_test.go index 1286876..38abfae 100644 --- a/routes/routes_test.go +++ b/routes/routes_test.go @@ -6,12 +6,20 @@ import ( "database/sql" "net/http" "net/http/httptest" + "os" "testing" "github.com/DATA-DOG/go-sqlmock" "github.com/gorilla/mux" ) +func TestMain(m *testing.M) { + os.Setenv("GO_ENV", "development") + code := m.Run() + os.Unsetenv("GO_ENV") + os.Exit(code) +} + func setupMockDB(t *testing.T) (*sql.DB, sqlmock.Sqlmock, func()) { mockDB, mock, err := sqlmock.New() if err != nil { @@ -99,7 +107,7 @@ func TestSetupRoutes_AuthCheckEndpoint(t *testing.T) { if w.Code == http.StatusNotFound { t.Error("Auth check endpoint should be registered") } - + // Will likely return 401 (no JWT) or 500 (no DB) but that's OK - route exists if w.Code != http.StatusUnauthorized && w.Code != http.StatusInternalServerError && w.Code != http.StatusForbidden { t.Logf("Auth check returned status %d (expected 401, 403, or 500 without proper setup)", w.Code) diff --git a/services/authorize_test.go b/services/authorize_test.go index 4bf8aa5..90d840c 100644 --- a/services/authorize_test.go +++ b/services/authorize_test.go @@ -41,13 +41,11 @@ func TestAuthorize_PermissionNotFound(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -85,13 +83,11 @@ func TestAuthorize_Success(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -147,13 +143,11 @@ func TestAuthorize_UserAttributesError(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -196,13 +190,11 @@ func TestAuthorize_PolicyAttributesError(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -245,13 +237,11 @@ func TestCheckPermission_Success(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -300,13 +290,11 @@ func TestCheckPermission_Denied(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -337,13 +325,11 @@ func TestCheckPermission_NilResourceData(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). diff --git a/services/cached_authorization_test.go b/services/cached_authorization_test.go index b8cc2d2..37ef871 100644 --- a/services/cached_authorization_test.go +++ b/services/cached_authorization_test.go @@ -220,13 +220,11 @@ func TestAuthorizeWithCache_Success(t *testing.T) { // Mock user query (needed to get role_id) userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). @@ -277,13 +275,11 @@ func TestAuthorizeWithCache_PermissionNotFound(t *testing.T) { // Mock user query userRows := sqlmock.NewRows([]string{"user_id", "first_name", "middle_initial", "last_name", "suffix", "email_address", - "account_type", "emp_id", "reg", "prov", "aProv", "mun", "bgy", "is_logged_in", - "first_logged_in", "address", "contact_number", "device_id", "role_id", - "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). + "emp_id", "is_logged_in", "first_logged_in", "home_address", "contact_number", "device_id", + "role_id", "is_deleted", "secret_key", "is_activated", "created_at", "updated_at"}). AddRow("user123", "John", "", "Doe", "", "john@example.com", - "regular", "EMP123", "01", "001", "001", "01", "001", "Y", - "Y", "123 Street", "09123456789", "device1", 1, - "N", "secret", "Y", time.Now(), time.Now()) + "EMP123", "Y", "Y", "123 Street", "09123456789", "device1", + 1, "N", "secret", "Y", time.Now(), time.Now()) mock.ExpectQuery("SELECT user_id, first_name, middle_initial, last_name, suffix, email_address"). WithArgs("user123"). diff --git a/services/policy_evaluator.go b/services/policy_evaluator.go index 228fd37..1878c3e 100644 --- a/services/policy_evaluator.go +++ b/services/policy_evaluator.go @@ -122,6 +122,10 @@ func inComparison(actual, expected string) bool { } func evaluatePolicy(policyAttribute models.PolicyAttribute, ctx *models.AuthorizationContext) (bool, string) { + if ctx == nil { + return false, "Authorization context is nil" + } + var actualValue string var exists bool diff --git a/services/policy_evaluator_test.go b/services/policy_evaluator_test.go index e2da380..9c419c6 100644 --- a/services/policy_evaluator_test.go +++ b/services/policy_evaluator_test.go @@ -919,12 +919,12 @@ func TestEvaluatePolicies_RegionBypassForAdminRoles(t *testing.T) { description: "Super Admin role string should bypass region check", }, { - name: "Admin role bypasses region check", + name: "Admin role does not bypass region check", roleID: "Admin", userRegion: "03", resourceRegion: "01", - shouldBeAllowed: true, - description: "Admin role string should bypass region check", + shouldBeAllowed: false, + description: "Admin role string should not bypass region check", }, }