package admin import ( "net/http" "net/http/httptest" "strings" "testing" "github.com/gin-gonic/gin" "github.com/google/uuid" ) func TestGetPlatformMetrics_NoAuth(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPost, "/admin/platform/users/invalid/suspend", strings.NewReader(`{"reason":"test"}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "userId", Value: "not-a-uuid"}} // No user_id in context handler.SuspendUser(c) if w.Code != http.StatusUnauthorized { t.Errorf("expected 401, got %d", w.Code) } } func TestGetUserDetail_InvalidID(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodGet, "/admin/platform/users/invalid", nil) c.Params = gin.Params{{Key: "userId", Value: "not-a-uuid"}} handler.GetUserDetail(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestSuspendUser_InvalidUserID(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPost, "/admin/platform/users/invalid/suspend", strings.NewReader(`{"reason":"test"}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "userId", Value: "not-a-uuid"}} c.Set("user_id", uuid.MustParse("00000000-0000-0000-0000-000000000001")) handler.SuspendUser(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestUpdateUserRole_InvalidBody(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPut, "/admin/platform/users/00000000-0000-0000-0000-000000000001/role", strings.NewReader(`{}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "userId", Value: "00000000-0000-0000-0000-000000000001"}} handler.UpdateUserRole(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestHideContent_InvalidContentID(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPost, "/admin/platform/content/bad-id/hide", strings.NewReader(`{"content_type":"track","reason":"test"}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "id", Value: "not-a-uuid"}} c.Set("user_id", uuid.MustParse("00000000-0000-0000-0000-000000000001")) handler.HideContent(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestRefundOrder_InvalidOrderID(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPost, "/admin/platform/orders/bad/refund", strings.NewReader(`{"reason":"duplicate payment"}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "id", Value: "not-a-uuid"}} c.Set("user_id", uuid.MustParse("00000000-0000-0000-0000-000000000001")) handler.RefundOrder(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } } func TestRefundOrder_MissingReason(t *testing.T) { gin.SetMode(gin.TestMode) handler := NewPlatformAdminHandler(nil, nil) w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = httptest.NewRequest(http.MethodPost, "/admin/platform/orders/00000000-0000-0000-0000-000000000001/refund", strings.NewReader(`{}`)) c.Request.Header.Set("Content-Type", "application/json") c.Params = gin.Params{{Key: "id", Value: "00000000-0000-0000-0000-000000000001"}} c.Set("user_id", uuid.MustParse("00000000-0000-0000-0000-000000000001")) handler.RefundOrder(c) if w.Code != http.StatusBadRequest { t.Errorf("expected 400, got %d", w.Code) } }