Skip to content
go-libfossil Artifact [078181f70a]
Login

Artifact [078181f70a]

Artifact 078181f70a1c1c9c5295a778db598fea829805e15f8e2149b9198cbc8d341bb8:


package manifest

import (
	"testing"
	"time"

	"github.com/danmestas/go-libfossil/internal/cone"
	"github.com/danmestas/go-libfossil/internal/content"
	"github.com/danmestas/go-libfossil/internal/deck"
)

func TestFilteredDeltaOverElidedTree(t *testing.T) {
	f := newTreeFixture(t)
	inside := f.file("src/a")
	outside := f.file("vendor/a")
	left, right := f.leaf(inside), f.leaf(outside)
	base := f.store(treeDeck(time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), []deck.SubmanifestCard{left, right}))
	replacement := f.file("src/b")
	delta := f.store(&deck.Deck{C: "delta", D: time.Date(2026, 1, 2, 0, 0, 0, 0, time.UTC), B: base,
		F: []deck.FileCard{{Name: inside.Name}, replacement}, U: deck.User("u")})
	elideWriterNode(t, f.r, right.UUID)
	c, err := cone.New([]string{"src"}, nil)
	if err != nil {
		t.Fatal(err)
	}
	rid, ok := content.AvailableByUUID(f.r.DB(), delta)
	if !ok {
		t.Fatal("delta not stored")
	}
	files, err := ListFilesFiltered(f.r, rid, c)
	if err != nil || len(files) != 1 || files[0].Name != replacement.Name || files[0].UUID != replacement.UUID {
		t.Fatalf("filtered delta = %+v, %v; want replacement only", files, err)
	}
	if _, err := ListFiles(f.r, rid); err == nil {
		t.Fatal("dense enumeration succeeded without baseline subtree")
	} else if uuid, ok := MissingSubmanifest(err); !ok || uuid != right.UUID {
		t.Fatalf("dense enumeration = %v; want missing %s", err, right.UUID)
	}
}