Skip to content
quarry Artifact [f3bc5548eb]
Login

Artifact [f3bc5548eb]

Artifact f3bc5548eb1822da3e334699edcebeb188f6da3f28750062b737d0c640a0baaf:


package index

import (
	"database/sql"
	"errors"
	"testing"
)

// TipOf answers what its single OR query answered (the newest check-in on
// the branch or wearing its name), without walking every check-in. Each
// name is checked against that query on a history built to tell them
// apart.
func TestTipOfAnswersWhatTheWholeQueryDid(t *testing.T) {
	ix := openIndex(t)
	ci(t, ix, "t1", "trunk", "2026-01-01T00:00:00", "base")
	ci(t, ix, "t2", "trunk", "2026-01-02T00:00:00", "next", "t1")
	ci(t, ix, "f1", "feat", "2026-01-03T00:00:00", "feature", "t2")
	ci(t, ix, "f2", "feat", "2026-01-04T00:00:00", "feature more", "f1")
	ci(t, ix, "x1", "other", "2026-01-05T00:00:00", "wears trunk's name", "t2")
	ci(t, ix, "z1", "feat", "2026-01-04T00:00:00", "same second as f2", "f1")
	sym := func(c, name string) {
		if _, err := ix.db.Exec(`INSERT INTO checkin_sym (checkin, name) VALUES (?, ?)`, c, name); err != nil {
			t.Fatal(err)
		}
	}
	sym("t1", "trunk")
	sym("t2", "trunk")
	sym("x1", "trunk") // newer than trunk's own tip
	sym("t1", "v1.0")  // a tag on no branch of its name
	sym("f2", "feat")
	old := func(name string) (string, bool) {
		var h string
		err := ix.db.QueryRow(`SELECT c.hash FROM checkin c
			WHERE c.branch = ?1 OR EXISTS (SELECT 1 FROM checkin_sym s WHERE s.checkin = c.hash AND s.name = ?1)
			ORDER BY c.date DESC, c.hash DESC LIMIT 1`, name).Scan(&h)
		if errors.Is(err, sql.ErrNoRows) {
			return "", false
		}
		if err != nil {
			t.Fatal(err)
		}
		return h, true
	}
	for _, name := range []string{"trunk", "feat", "other", "v1.0", "nothing"} {
		want, wantOK := old(name)
		got, ok, err := ix.TipOf(name)
		if err != nil {
			t.Fatal(err)
		}
		if ok != wantOK || got.Tip != want || (ok && got.Name != name) {
			t.Errorf("FAIL: TipOf(%q) = %q,%v; the whole query says %q,%v", name, got.Tip, ok, want, wantOK)
		}
	}
}