Skip to content
go-libfossil Artifact [617c267ab0]
Login

Artifact [617c267ab0]

Artifact 617c267ab0101680f5339ff343fc52a5d9f3bc2eed6df90c8fecf7649f3a281a:


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 TestCompleteChildWaitsForPartialTreeParent(t *testing.T) {
	f := newTreeFixture(t)
	inside := f.file("src/a")
	outside := f.leaf(f.file("vendor/a"))
	parent := f.store(treeDeck(time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), []deck.SubmanifestCard{f.leaf(inside), outside}))
	child := f.store(&deck.Deck{C: "flat child", D: time.Date(2026, 1, 2, 0, 0, 0, 0, time.UTC), F: []deck.FileCard{inside}, P: []string{parent}, U: deck.User("u")})
	elideWriterNode(t, f.r, outside.UUID)
	c, err := cone.New([]string{"src"}, nil)
	if err != nil {
		t.Fatal(err)
	}
	if err := content.SetStoreCone(f.r.DB(), c); err != nil {
		t.Fatal(err)
	}
	if _, err := Crosslink(f.r); err != nil {
		t.Fatal(err)
	}
	rid, _ := content.AvailableByUUID(f.r.DB(), child)
	for _, check := range []struct {
		query string
		want  int
	}{
		{"SELECT count(*) FROM event WHERE objid=?", 1},
		{"SELECT count(*) FROM mlink WHERE mid=?", 0},
	} {
		var got int
		if err := f.r.DB().QueryRow(check.query, rid).Scan(&got); err != nil {
			t.Fatal(err)
		}
		if got != check.want {
			t.Fatalf("child with incomplete parent: %s = %d, want %d", check.query, got, check.want)
		}
	}
	var waiting int
	if err := f.r.DB().QueryRow("SELECT count(*) FROM orphan WHERE rid=?", rid).Scan(&waiting); err != nil {
		t.Fatal(err)
	}
	if waiting != 1 {
		t.Fatalf("child has %d dependency markers, want 1", waiting)
	}
}