feat: add admin auth identity repair binding

This commit is contained in:
IanShaw027
2026-04-20 22:22:14 +08:00
parent 3bd3027251
commit 452e55a53c
6 changed files with 628 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ func setupAdminRouter() (*gin.Engine, *stubAdminService) {
router.GET("/api/v1/admin/users/auth-identity-migration-reports/summary", userHandler.GetAuthIdentityMigrationReportSummary)
router.GET("/api/v1/admin/users/auth-identity-migration-reports", userHandler.ListAuthIdentityMigrationReports)
router.GET("/api/v1/admin/users/:id", userHandler.GetByID)
router.POST("/api/v1/admin/users/:id/auth-identities", userHandler.BindAuthIdentity)
router.POST("/api/v1/admin/users", userHandler.Create)
router.PUT("/api/v1/admin/users/:id", userHandler.Update)
router.DELETE("/api/v1/admin/users/:id", userHandler.Delete)
@@ -87,8 +88,26 @@ func TestUserHandlerEndpoints(t *testing.T) {
router.ServeHTTP(rec, req)
require.Equal(t, http.StatusOK, rec.Code)
bindBody := map[string]any{
"provider_type": "wechat",
"provider_key": "wechat-main",
"provider_subject": "union-123",
"metadata": map[string]any{"source": "admin-repair"},
"channel": map[string]any{
"channel": "open",
"channel_app_id": "wx-open",
"channel_subject": "openid-123",
},
}
body, _ := json.Marshal(bindBody)
rec = httptest.NewRecorder()
req = httptest.NewRequest(http.MethodPost, "/api/v1/admin/users/1/auth-identities", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
router.ServeHTTP(rec, req)
require.Equal(t, http.StatusOK, rec.Code)
createBody := map[string]any{"email": "new@example.com", "password": "pass123", "balance": 1, "concurrency": 2}
body, _ := json.Marshal(createBody)
body, _ = json.Marshal(createBody)
rec = httptest.NewRecorder()
req = httptest.NewRequest(http.MethodPost, "/api/v1/admin/users", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
@@ -125,6 +144,33 @@ func TestUserHandlerEndpoints(t *testing.T) {
require.Equal(t, http.StatusOK, rec.Code)
}
func TestUserHandlerBindAuthIdentityMapsRequest(t *testing.T) {
router, adminSvc := setupAdminRouter()
body, err := json.Marshal(map[string]any{
"provider_type": "oidc",
"provider_key": "https://issuer.example",
"provider_subject": "subject-123",
"issuer": "https://issuer.example",
"metadata": map[string]any{"report_id": 12},
})
require.NoError(t, err)
rec := httptest.NewRecorder()
req := httptest.NewRequest(http.MethodPost, "/api/v1/admin/users/9/auth-identities", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
router.ServeHTTP(rec, req)
require.Equal(t, http.StatusOK, rec.Code)
require.Equal(t, int64(9), adminSvc.boundAuthIdentityFor)
require.NotNil(t, adminSvc.boundAuthIdentity)
require.Equal(t, "oidc", adminSvc.boundAuthIdentity.ProviderType)
require.Equal(t, "https://issuer.example", adminSvc.boundAuthIdentity.ProviderKey)
require.Equal(t, "subject-123", adminSvc.boundAuthIdentity.ProviderSubject)
require.Nil(t, adminSvc.boundAuthIdentity.Channel)
require.Equal(t, float64(12), adminSvc.boundAuthIdentity.Metadata["report_id"])
}
func TestGroupHandlerEndpoints(t *testing.T) {
router, _ := setupAdminRouter()