package probe import ( "context" "errors" "testing" "time" "yovision/sense/internal/device" ) type fakeRepository struct { devices []device.Device states map[string]device.ActualState } func (f *fakeRepository) ListEnabledVideoDevices(context.Context, int) ([]device.Device, error) { return f.devices, nil } func (f *fakeRepository) UpdateActualState(_ context.Context, id string, state device.ActualState, _ time.Time) error { if f.states == nil { f.states = make(map[string]device.ActualState) } f.states[id] = state return nil } type fakeRuntime struct { ready map[string]bool errors map[string]error } func (f fakeRuntime) PathReady(_ context.Context, name string) (bool, error) { return f.ready[name], f.errors[name] } func TestCheckerMapsReadyAndUnavailablePaths(t *testing.T) { t.Parallel() repository := &fakeRepository{devices: []device.Device{ {ID: "online", PathName: "online"}, {ID: "offline", PathName: "offline"}, }} checker := New(repository, fakeRuntime{ ready: map[string]bool{"online": true}, errors: map[string]error{"offline": errors.New("unavailable")}, }) err := checker.RunOnce(context.Background()) if err == nil { t.Fatal("probe transport error must remain observable") } if repository.states["online"] != device.ActualOnline || repository.states["offline"] != device.ActualOffline { t.Fatalf("unexpected actual states: %+v", repository.states) } }