You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB

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")
}
}