Skip to content

Commit 3207223

Browse files
committed
Add test
1 parent 4db49fe commit 3207223

File tree

2 files changed

+106
-47
lines changed

2 files changed

+106
-47
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
// Copyright 2024 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package git
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestFollowLink(t *testing.T) {
13+
r, err := openRepositoryWithDefaultContext("tests/repos/repo1_bare")
14+
assert.NoError(t, err)
15+
defer r.Close()
16+
17+
commit, err := r.GetCommit("37991dec2c8e592043f47155ce4808d4580f9123")
18+
assert.NoError(t, err)
19+
20+
// get the symlink
21+
lnk, err := commit.Tree.GetTreeEntryByPath("foo/bar/link_to_hello")
22+
assert.NoError(t, err)
23+
assert.True(t, lnk.IsLink())
24+
25+
// should be able to dereference to target
26+
target, err := lnk.FollowLink()
27+
assert.NoError(t, err)
28+
assert.Equal(t, "hello", target.Name())
29+
assert.Equal(t, "foo/nar/hello", target.FullPath())
30+
assert.False(t, target.IsLink())
31+
assert.Equal(t, "b14df6442ea5a1b382985a6549b85d435376c351", target.ID.String())
32+
33+
// should error when called on normal file
34+
target, err = commit.Tree.GetTreeEntryByPath("file1.txt")
35+
assert.NoError(t, err)
36+
_, err = target.FollowLink()
37+
assert.ErrorAs(t, err, ErrBadLink{})
38+
39+
// should error for broken links
40+
target, err = commit.Tree.GetTreeEntryByPath("foo/broken_link")
41+
assert.NoError(t, err)
42+
assert.True(t, target.IsLink())
43+
_, err = target.FollowLink()
44+
assert.ErrorAs(t, err, ErrBadLink{})
45+
46+
// should error for external links
47+
target, err = commit.Tree.GetTreeEntryByPath("foo/outside_repo")
48+
assert.NoError(t, err)
49+
assert.True(t, target.IsLink())
50+
_, err = target.FollowLink()
51+
assert.ErrorAs(t, err, ErrBadLink{})
52+
53+
// testing fix for short link bug
54+
target, err = commit.Tree.GetTreeEntryByPath("foo/link_short")
55+
assert.NoError(t, err)
56+
_, err = target.FollowLink()
57+
assert.ErrorAs(t, err, ErrBadLink{})
58+
}
59+
60+
func TestTryFollowingLinks(t *testing.T) {
61+
r, err := openRepositoryWithDefaultContext("tests/repos/repo1_bare")
62+
assert.NoError(t, err)
63+
defer r.Close()
64+
65+
commit, err := r.GetCommit("37991dec2c8e592043f47155ce4808d4580f9123")
66+
assert.NoError(t, err)
67+
68+
// get the symlink
69+
list, err := commit.Tree.GetTreeEntryByPath("foo/bar/link_to_hello")
70+
assert.NoError(t, err)
71+
assert.True(t, list.IsLink())
72+
73+
// should be able to dereference to target
74+
target := list.TryFollowingLinks()
75+
assert.NotEqual(t, target, list)
76+
assert.Equal(t, "hello", target.Name())
77+
assert.Equal(t, "foo/nar/hello", target.FullPath())
78+
assert.False(t, target.IsLink())
79+
assert.Equal(t, "b14df6442ea5a1b382985a6549b85d435376c351", target.ID.String())
80+
81+
// should default to original when called on normal file
82+
link, err := commit.Tree.GetTreeEntryByPath("file1.txt")
83+
assert.NoError(t, err)
84+
target = link.TryFollowingLinks()
85+
assert.Same(t, link, target)
86+
87+
// should default to original for broken links
88+
link, err = commit.Tree.GetTreeEntryByPath("foo/broken_link")
89+
assert.NoError(t, err)
90+
assert.True(t, link.IsLink())
91+
target = link.TryFollowingLinks()
92+
assert.Same(t, link, target)
93+
94+
// should default to original for external links
95+
link, err = commit.Tree.GetTreeEntryByPath("foo/outside_repo")
96+
assert.NoError(t, err)
97+
assert.True(t, link.IsLink())
98+
target = link.TryFollowingLinks()
99+
assert.Same(t, link, target)
100+
101+
// testing fix for short link bug
102+
link, err = commit.Tree.GetTreeEntryByPath("foo/link_short")
103+
assert.NoError(t, err)
104+
target = link.TryFollowingLinks()
105+
assert.Same(t, link, target)
106+
}

modules/git/tree_entry_test.go

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -53,50 +53,3 @@ func TestEntriesCustomSort(t *testing.T) {
5353
assert.Equal(t, "bcd", entries[6].Name())
5454
assert.Equal(t, "abc", entries[7].Name())
5555
}
56-
57-
func TestFollowLink(t *testing.T) {
58-
r, err := openRepositoryWithDefaultContext("tests/repos/repo1_bare")
59-
assert.NoError(t, err)
60-
defer r.Close()
61-
62-
commit, err := r.GetCommit("37991dec2c8e592043f47155ce4808d4580f9123")
63-
assert.NoError(t, err)
64-
65-
// get the symlink
66-
lnk, err := commit.Tree.GetTreeEntryByPath("foo/bar/link_to_hello")
67-
assert.NoError(t, err)
68-
assert.True(t, lnk.IsLink())
69-
70-
// should be able to dereference to target
71-
target, err := lnk.FollowLink()
72-
assert.NoError(t, err)
73-
assert.Equal(t, "hello", target.Name())
74-
assert.False(t, target.IsLink())
75-
assert.Equal(t, "b14df6442ea5a1b382985a6549b85d435376c351", target.ID.String())
76-
77-
// should error when called on normal file
78-
target, err = commit.Tree.GetTreeEntryByPath("file1.txt")
79-
assert.NoError(t, err)
80-
_, err = target.FollowLink()
81-
assert.EqualError(t, err, "file1.txt: not a symlink")
82-
83-
// should error for broken links
84-
target, err = commit.Tree.GetTreeEntryByPath("foo/broken_link")
85-
assert.NoError(t, err)
86-
assert.True(t, target.IsLink())
87-
_, err = target.FollowLink()
88-
assert.EqualError(t, err, "broken_link: broken link")
89-
90-
// should error for external links
91-
target, err = commit.Tree.GetTreeEntryByPath("foo/outside_repo")
92-
assert.NoError(t, err)
93-
assert.True(t, target.IsLink())
94-
_, err = target.FollowLink()
95-
assert.EqualError(t, err, "outside_repo: points outside of repo")
96-
97-
// testing fix for short link bug
98-
target, err = commit.Tree.GetTreeEntryByPath("foo/link_short")
99-
assert.NoError(t, err)
100-
_, err = target.FollowLink()
101-
assert.EqualError(t, err, "link_short: broken link")
102-
}

0 commit comments

Comments
 (0)