From d9e8fee64b6bcbe00aa363fcf4e48c6b54b5ed6c Mon Sep 17 00:00:00 2001 From: kyy Date: Wed, 1 Apr 2026 15:06:46 +0900 Subject: [PATCH] =?UTF-8?q?dev=20=EB=B8=8C=EB=9F=B0=EC=B9=98=20=EB=B3=91?= =?UTF-8?q?=ED=95=A9=20code-check=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adminfront/package.json | 4 ++-- backend/internal/handler/auth_handler_signup_test.go | 2 +- backend/internal/handler/user_handler.go | 2 +- backend/internal/service/user_group_service.go | 2 +- backend/internal/service/user_group_service_test.go | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/adminfront/package.json b/adminfront/package.json index 5c4a5309..fbcba5b6 100644 --- a/adminfront/package.json +++ b/adminfront/package.json @@ -13,9 +13,9 @@ "lint:fix": "biome check . --write", "format": "biome format . --write", "preview": "vite preview", - "test": "playwright test", + "test": "npx playwright test", "test:unit": "vitest run", - "test:ui": "playwright test --ui", + "test:ui": "npx playwright test --ui", "i18n-scan": "cd .. && node tools/i18n-scanner/index.js && node tools/i18n-scanner/report.js" }, "dependencies": { diff --git a/backend/internal/handler/auth_handler_signup_test.go b/backend/internal/handler/auth_handler_signup_test.go index d4b8c335..23086a62 100644 --- a/backend/internal/handler/auth_handler_signup_test.go +++ b/backend/internal/handler/auth_handler_signup_test.go @@ -110,7 +110,7 @@ func TestSignup_CompanyCodeValidation(t *testing.T) { body, _ := json.Marshal(reqBody) newTenant := &domain.Tenant{ID: "t_new", Slug: "new-slug", Status: domain.TenantStatusActive} - + mockTenantSvc.On("GetTenantByDomain", mock.Anything, "gmail.com").Return(nil, nil) mockTenantSvc.On("GetTenantBySlug", mock.Anything, "new-slug").Return(nil, nil) mockTenantSvc.On("RegisterTenant", mock.Anything, "new-slug", "new-slug", domain.TenantTypeCompany, mock.Anything, mock.Anything, mock.Anything, "").Return(newTenant, nil) diff --git a/backend/internal/handler/user_handler.go b/backend/internal/handler/user_handler.go index 6ed76d90..1855b699 100644 --- a/backend/internal/handler/user_handler.go +++ b/backend/internal/handler/user_handler.go @@ -1253,7 +1253,7 @@ func (h *UserHandler) UpdateUser(c *fiber.Ctx) error { if err := domain.ValidateLoginID(finalLoginID, userEmail, userPhone); err != nil { return errorJSON(c, fiber.StatusBadRequest, err.Error()) } - + // resolvePasswordLoginID might be doing something else but we already have finalLoginID. // We should just use finalLoginID if it's the intended identifier. // But let's check if resolvePasswordLoginID exists and what it returns. Assuming it returns a string. diff --git a/backend/internal/service/user_group_service.go b/backend/internal/service/user_group_service.go index 52a684ed..f019757e 100644 --- a/backend/internal/service/user_group_service.go +++ b/backend/internal/service/user_group_service.go @@ -260,7 +260,7 @@ func (s *userGroupService) AddMember(ctx context.Context, groupID, userID string Subject: "User:" + userID, Action: domain.KetoOutboxActionCreate, }) - + // Also add direct Tenant membership to Keto for member counting _ = s.outboxRepo.Create(ctx, &domain.KetoOutbox{ Namespace: "Tenant", diff --git a/backend/internal/service/user_group_service_test.go b/backend/internal/service/user_group_service_test.go index b173af94..25c8f792 100644 --- a/backend/internal/service/user_group_service_test.go +++ b/backend/internal/service/user_group_service_test.go @@ -201,15 +201,15 @@ func TestUserGroupService_AddMember(t *testing.T) { mockUserGroupRepo.On("FindByID", mock.Anything, groupID).Return(&domain.UserGroup{ID: groupID, TenantID: tenantID, Name: "Sales"}, nil) mockUserRepo.On("FindByID", mock.Anything, userID).Return(&domain.User{ID: userID}, nil) mockTenantRepo.On("FindByID", mock.Anything, tenantID).Return(&domain.Tenant{ID: tenantID, Slug: tenantSlug}, nil) - + // Mock Kratos mockKratos.On("GetIdentity", mock.Anything, userID).Return(&KratosIdentity{ - ID: userID, + ID: userID, Traits: map[string]interface{}{"email": "user@test.com"}, - State: "active", + State: "active", }, nil) mockKratos.On("UpdateIdentity", mock.Anything, userID, mock.Anything, "active").Return(&KratosIdentity{}, nil) - + // Mock local user repo update (Ignored since Update is hardcoded to return nil without calling m.Called) // mockUserRepo.On("Update", mock.Anything, mock.MatchedBy(func(u *domain.User) bool { // return u.CompanyCode == tenantSlug && *u.TenantID == tenantID && u.Department == "Sales" @@ -219,7 +219,7 @@ func TestUserGroupService_AddMember(t *testing.T) { mockOutbox.On("Create", mock.Anything, mock.MatchedBy(func(e *domain.KetoOutbox) bool { return e.Namespace == "Tenant" && e.Object == groupID && e.Relation == "members" && e.Subject == "User:"+userID })).Return(nil).Once() - + // Second Outbox Create for Tenant mockOutbox.On("Create", mock.Anything, mock.MatchedBy(func(e *domain.KetoOutbox) bool { return e.Namespace == "Tenant" && e.Object == tenantID && e.Relation == "members" && e.Subject == "User:"+userID