package workertest

import (
	"errors"
	"testing"
)

func TestInjectorFailsExactlyOnceAtSelectedBoundary(t *testing.T) {
	injector, err := NewInjector(AfterClaim)
	if err != nil {
		t.Fatal(err)
	}
	if err := injector.Probe(BeforeAcceptance); err != nil {
		t.Fatalf("wrong point failed: %v", err)
	}
	if err := injector.Probe(AfterClaim); !errors.Is(err, ErrInjectedCrash) {
		t.Fatalf("selected point error=%v", err)
	}
	if err := injector.Probe(AfterClaim); err != nil {
		t.Fatalf("selected point failed twice: %v", err)
	}
	if !injector.Triggered() {
		t.Fatal("injector did not record trigger")
	}
}

func TestInjectorRejectsUnknownPoint(t *testing.T) {
	if _, err := NewInjector("custom"); err == nil {
		t.Fatal("unknown crash point accepted")
	}
}

func TestDurableCriticalCrashPointsReturnsCopy(t *testing.T) {
	points := DurableCriticalCrashPoints()
	points[0] = "mutated"
	if DurableCriticalCrashPoints()[0] != BeforeAcceptance {
		t.Fatal("caller mutated canonical crash matrix")
	}
}
