package api import ( "encoding/json" "net/http" "net/http/httptest" "reflect" "testing" "tera-clone/services/tera-api/internal/adapters/mock" "tera-clone/services/tera-api/internal/domain" ) func TestPortConfigurationReadSkipsTelemetryAndPreservesSettings(t *testing.T) { store := mock.NewStore(fixedClock) controller := &countingRuntimeSerialController{} handler := NewRouterWithOptions(store, RouterOptions{ SerialController: controller, SessionController: runtimeSessionController{}, }) request := httptest.NewRequest(http.MethodGet, "/api/v1/ports?limit=48&runtime=false", nil) request.Header.Set("X-Mock-Actor", "mock-admin") response := httptest.NewRecorder() handler.ServeHTTP(response, request) if response.Code != http.StatusOK { t.Fatalf("status=%d body=%s", response.Code, response.Body.String()) } if controller.calls() != 0 { t.Fatal("configuration read waited for serial telemetry") } var actual []domain.Port if err := json.Unmarshal(response.Body.Bytes(), &actual); err != nil { t.Fatal(err) } expected, err := store.Ports(request.Context()) if err != nil { t.Fatal(err) } for i := range expected { expected[i].Status = "unknown" expected[i].Runtime = nil expected[i].ConnectedUsers = 0 expected[i].Writer = "" } // Normalize JSON omission semantics while comparing every configuration field. encoded, err := json.Marshal(expected) if err != nil { t.Fatal(err) } var normalized []domain.Port if err := json.Unmarshal(encoded, &normalized); err != nil { t.Fatal(err) } if !reflect.DeepEqual(actual, normalized) { t.Fatal("configuration fields changed") } request = httptest.NewRequest(http.MethodGet, "/api/v1/ports?limit=48", nil) request.Header.Set("X-Mock-Actor", "mock-admin") response = httptest.NewRecorder() handler.ServeHTTP(response, request) if response.Code != http.StatusOK || controller.calls() != 1 { t.Fatal("default read no longer collects live telemetry") } }