Expose publication recovery facade
This commit is contained in:
40
recovery_test.go
Normal file
40
recovery_test.go
Normal file
@@ -0,0 +1,40 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user