package plans import ( "context" "errors" "testing" "time" "github.com/carlosframework/platform/internal/release" ) func TestMarkerKey(t *testing.T) { if got := MarkerKey(); got != "control/plans.json" { t.Fatalf("MarkerKey = %q", got) } } func TestMarkerRoundTrip(t *testing.T) { ctx := context.Background() s := release.NewDirStore(t.TempDir()) if m, etag, err := GetMarker(ctx, s); m != nil || etag != "" || err != nil { t.Fatalf("absent: %+v, %q, %v", m, etag, err) } want := &Marker{Enabled: true, CatalogID: "v1@0123456789ab", UpdatedAt: time.Unix(1_800_000_000, 0).UTC()} if _, err := PutMarker(ctx, s, want, ""); err != nil { t.Fatal(err) } got, etag, err := GetMarker(ctx, s) if err != nil || etag == "" { t.Fatalf("get: %q, %v", etag, err) } want.Schema = MarkerSchema if *got != *want { t.Fatalf("got %+v, want %+v", got, want) } } func TestMarkerRefusesUnknownSchema(t *testing.T) { ctx := context.Background() s := release.NewDirStore(t.TempDir()) if _, err := s.Put(ctx, MarkerKey(), []byte(`{"schema": 2, "enabled": true}`), ""); err != nil { t.Fatal(err) } if m, _, err := GetMarker(ctx, s); err == nil { t.Fatalf("accepted schema 2: %+v", m) } } func TestPutMarkerIsCAS(t *testing.T) { ctx := context.Background() s := release.NewDirStore(t.TempDir()) if _, err := PutMarker(ctx, s, &Marker{Enabled: true}, ""); err != nil { t.Fatal(err) } if _, err := PutMarker(ctx, s, &Marker{Enabled: false}, ""); !errors.Is(err, release.ErrCASConflict) { t.Fatalf("second create-only put: %v", err) } }