package releasekit_test import ( "context" "errors" "os" "path/filepath" "testing" releasekit "go.maximumdirect.net/releasekit" ) func TestRecoveryFacadeLoadsPartialEvidenceAndPreservesCause(t *testing.T) { path := filepath.Join(t.TempDir(), "attempt.json") if err := os.WriteFile(path, []byte(`{"format_version":1,"evidence":{}}`), 0600); err != nil { t.Fatal(err) } evidence, err := releasekit.LoadPublicationEvidence(path) if err != nil || evidence != (releasekit.PublicationEvidence{}) { t.Fatalf("LoadPublicationEvidence()=%#v, %v", evidence, err) } result, err := releasekit.ReconcilePublication(context.Background(), evidence) var recovery *releasekit.PublicationRecoveryError if !errors.As(err, &recovery) || recovery.Kind != "missing_evidence" || result.State != releasekit.PublicationUnknown { t.Fatalf("ReconcilePublication()=%#v, %v", result, err) } if len(recovery.MissingFields) != 2 || recovery.MissingFields[0] != "endpoint" || recovery.MissingFields[1] != "tag" { t.Fatalf("missing fields=%v", recovery.MissingFields) } } func TestRecoveryFacadeErrorUnwrapsCancellation(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) cancel() _, err := releasekit.ReconcilePublication(ctx, releasekit.PublicationEvidence{Endpoint: "file:///unused", Tag: "v1.2.3"}) var recovery *releasekit.PublicationRecoveryError if !errors.As(err, &recovery) || recovery.Kind != "canceled" || !errors.Is(err, context.Canceled) { t.Fatalf("error=%v", err) } }