package main import ( "context" "sync/atomic" "testing" "time" "tera-clone/services/tera-api/internal/domain" ) type pressedResetButton struct{} func (pressedResetButton) ResetButtonPressed(context.Context) (bool, error) { return true, nil } type countingFactoryResetStore struct{ calls atomic.Int32 } func (s *countingFactoryResetStore) FactoryReset(context.Context) (domain.Operation, error) { s.calls.Add(1) return domain.Operation{OperationID: "factory-reset-test"}, nil } func TestFactoryResetButtonMonitorTriggersOnceWhileHeld(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) store := &countingFactoryResetStore{} done := make(chan struct{}) go func() { defer close(done) runFactoryResetButtonMonitor(ctx, pressedResetButton{}, store, 2*time.Millisecond, 5*time.Millisecond, nil, func(err error) { t.Error(err) }) }() deadline := time.Now().Add(250 * time.Millisecond) for store.calls.Load() == 0 && time.Now().Before(deadline) { time.Sleep(time.Millisecond) } time.Sleep(20 * time.Millisecond) cancel() <-done if store.calls.Load() != 1 { t.Fatalf("factory reset calls = %d, want 1", store.calls.Load()) } }