diff options
| author | 2026-02-21 15:18:32 +0800 | |
|---|---|---|
| committer | 2026-02-21 15:18:32 +0800 | |
| commit | 53e166913d9e76b82aa53361b251390a2c0726bd (patch) | |
| tree | c40fe0b4f359912138eb8202a4951541e941a502 /repository/refs_test.go | |
| parent | cmd/show-object: Add command (diff) | |
| signature | No signature | |
repository: Add passthrough ReadStored*; add ref convenience funcs
Diffstat (limited to 'repository/refs_test.go')
| -rw-r--r-- | repository/refs_test.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/repository/refs_test.go b/repository/refs_test.go new file mode 100644 index 00000000..4418c707 --- /dev/null +++ b/repository/refs_test.go @@ -0,0 +1,96 @@ +package repository_test + +import ( + "strings" + "testing" + + "codeberg.org/lindenii/furgit/internal/testgit" + "codeberg.org/lindenii/furgit/objectid" + "codeberg.org/lindenii/furgit/ref" + "codeberg.org/lindenii/furgit/repository" +) + +func TestRefConvenienceMethods(t *testing.T) { + t.Parallel() + + testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper + repoHarness := testgit.NewRepo(t, testgit.RepoOptions{ + ObjectFormat: algo, + Bare: true, + RefFormat: "files", + }) + + _, _, commitID := repoHarness.MakeCommit(t, "refs wrappers") + repoHarness.UpdateRef(t, "refs/heads/main", commitID) + repoHarness.SymbolicRef(t, "HEAD", "refs/heads/main") + repoHarness.UpdateRef(t, "refs/tags/v1", commitID) + + repo, err := repository.Open(repoHarness.Dir()) + if err != nil { + t.Fatalf("repository.Open: %v", err) + } + defer func() { _ = repo.Close() }() + + resolved, err := repo.ResolveRef("HEAD") + if err != nil { + t.Fatalf("ResolveRef(HEAD): %v", err) + } + sym, ok := resolved.(ref.Symbolic) + if !ok { + t.Fatalf("ResolveRef(HEAD) type = %T, want ref.Symbolic", resolved) + } + if sym.Target != "refs/heads/main" { + t.Fatalf("ResolveRef(HEAD) target = %q, want %q", sym.Target, "refs/heads/main") + } + + fully, err := repo.ResolveRefFully("HEAD") + if err != nil { + t.Fatalf("ResolveRefFully(HEAD): %v", err) + } + if fully.ID != commitID { + t.Fatalf("ResolveRefFully(HEAD) id = %s, want %s", fully.ID, commitID) + } + + refs, err := repo.ListRefs("refs/*/*") + if err != nil { + t.Fatalf("ListRefs: %v", err) + } + if len(refs) < 2 { + t.Fatalf("ListRefs returned %d refs, want >= 2", len(refs)) + } + + short, err := repo.ShortenRef("refs/heads/main") + if err != nil { + t.Fatalf("ShortenRef: %v", err) + } + if short != "heads/main" && short != "main" { + t.Fatalf("ShortenRef = %q, want %q or %q", short, "heads/main", "main") + } + }) +} + +func TestResolveRefErrorSurface(t *testing.T) { + t.Parallel() + + testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper + repoHarness := testgit.NewRepo(t, testgit.RepoOptions{ + ObjectFormat: algo, + Bare: true, + RefFormat: "files", + }) + + repo, err := repository.Open(repoHarness.Dir()) + if err != nil { + t.Fatalf("repository.Open: %v", err) + } + defer func() { _ = repo.Close() }() + + _, err = repo.ResolveRef("refs/heads/does-not-exist") + if err == nil { + t.Fatalf("ResolveRef missing: expected error") + } + if !strings.Contains(err.Error(), "not found") { + t.Fatalf("ResolveRef missing error = %v, want not found detail", err) + } + }) +} |
