1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package web
4
5import (
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9
10 pb "bnema.dev/ermite-api/gen/ermite"
11)
12
13func ref(kind pb.RefKind, short string) *pb.Ref {
14 return &pb.Ref{Name: "refs/x/" + short, ShortName: short, Kind: kind, CommitId: "c-" + short}
15}
16
17// AC3: a ref with slashes is found by the longest matching prefix.
18func TestResolveRef(t *testing.T) {
19 b, tag := pb.RefKind_REF_KIND_BRANCH, pb.RefKind_REF_KIND_TAG
20 refs := []*pb.Ref{
21 ref(b, "main"), ref(b, "feature"), ref(b, "feature/x"), ref(b, "feature/x/y"), ref(tag, "v1/rc"),
22 ref(pb.RefKind_REF_KIND_HEAD, "main"), ref(tag, "main"),
23 }
24 tests := []struct {
25 path, ref, rest string
26 kind pb.RefKind
27 ok bool
28 }{
29 {"main", "main", "", b, true},
30 {"main/src/a.go", "main", "src/a.go", b, true},
31 {"feature/x/y/z.txt", "feature/x/y", "z.txt", b, true},
32 {"feature/x/z.txt", "feature/x", "z.txt", b, true},
33 {"feature/other", "feature", "other", b, true},
34 {"/feature/x/", "feature/x", "", b, true},
35 {"v1/rc/README", "v1/rc", "README", tag, true},
36 {"v1/README", "", "", 0, false},
37 {"nope/main", "", "", 0, false},
38 {"", "", "", 0, false},
39 }
40 for _, tt := range tests {
41 t.Run(tt.path, func(t *testing.T) {
42 r, rest, ok := resolveRef(refs, tt.path)
43 assert.Equal(t, tt.ok, ok)
44 if !ok {
45 return
46 }
47 assert.Equal(t, tt.ref, r.GetShortName())
48 assert.Equal(t, tt.kind, r.GetKind(), "a branch wins over a tag of the same name")
49 assert.Equal(t, tt.rest, rest)
50 })
51 }
52}
53
54func TestRepoHref(t *testing.T) {
55 assert.Equal(t, "/demo", repoHref("demo"))
56 assert.Equal(t, "/demo/tree/feature/x/a%20b/c%23.go", repoHref("demo", "tree", "feature/x", "a b/c#.go"))
57 assert.Equal(t, "/demo/blob/main/%3Fq", repoHref("demo", "blob", "main", "", "?q"))
58}