package web import ( "3588AdminBackend/internal/config" "3588AdminBackend/internal/models" "3588AdminBackend/internal/service" "context" "net" "net/http" "net/http/httptest" "net/url" "os" "strconv" "strings" "testing" "github.com/go-chi/chi/v5" ) func TestUI_ActionDevicesBatchAction_RedirectsToTask(t *testing.T) { cfg := &config.Config{Concurrency: 1, OfflineAfterMs: 1000000} reg := service.NewRegistryService(cfg, nil) reg.UpdateDevice(&models.Device{DeviceID: "dev1", IP: "127.0.0.1", AgentPort: 9100, Online: true}) reg.UpdateDevice(&models.Device{DeviceID: "dev2", IP: "127.0.0.1", AgentPort: 9100, Online: true}) tasks := service.NewTaskService(cfg, nil, reg) ui, err := NewUI(nil, reg, nil, tasks, nil) if err != nil { t.Fatalf("NewUI: %v", err) } form := url.Values{} form.Set("action", "media_start") form.Add("device_id", "dev1") form.Add("device_id", "dev2") form.Set("config", "cam1") req := httptest.NewRequest(http.MethodPost, "/ui/devices/batch-action", strings.NewReader(form.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") rr := httptest.NewRecorder() ui.actionDevicesBatchAction(rr, req) if rr.Code != http.StatusFound { t.Fatalf("expected 302, got %d: %s", rr.Code, rr.Body.String()) } loc := rr.Header().Get("Location") if !strings.HasPrefix(loc, "/ui/tasks/") { t.Fatalf("expected redirect to /ui/tasks/*, got %q", loc) } } func TestUI_DevicePageUsesEdgeVisionConsoleShell(t *testing.T) { cfg := &config.Config{Concurrency: 1, OfflineAfterMs: 1000000} reg := service.NewRegistryService(cfg, nil) reg.UpdateDevice(&models.Device{DeviceID: "edge-01", DeviceName: "入口识别节点", IP: "127.0.0.1", AgentPort: 9100, MediaPort: 9000, Online: true}) tasks := service.NewTaskService(cfg, nil, reg) ui, err := NewUI(nil, reg, nil, tasks, nil) if err != nil { t.Fatalf("NewUI: %v", err) } req := httptest.NewRequest(http.MethodGet, "/ui/devices", nil) rr := httptest.NewRecorder() ui.pageDevices(rr, req) if rr.Code != http.StatusOK { t.Fatalf("expected 200, got %d: %s", rr.Code, rr.Body.String()) } body := rr.Body.String() for _, want := range []string{ "视觉识别边缘控制台", "设备列表", "识别配置", "模型管理", "高级调试", "