Skip to content

Commit 85b8b7f

Browse files
authored
Merge pull request #90 from metalmatze/feature/tool-tests
Start to add tests for modules/base/tool
2 parents 8857d70 + e74868a commit 85b8b7f

22 files changed

+4738
-25
lines changed

modules/base/tool.go

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,17 @@ import (
1616
"html/template"
1717
"math"
1818
"net/http"
19+
"strconv"
1920
"strings"
2021
"time"
2122
"unicode"
2223
"unicode/utf8"
2324

2425
"github.com/Unknwon/com"
2526
"github.com/Unknwon/i18n"
26-
27-
"github.com/gogits/chardet"
28-
2927
"github.com/go-gitea/gitea/modules/log"
3028
"github.com/go-gitea/gitea/modules/setting"
29+
"github.com/gogits/chardet"
3130
)
3231

3332
// EncodeMD5 encodes string to md5 hex value.
@@ -44,11 +43,10 @@ func EncodeSha1(str string) string {
4443
return hex.EncodeToString(h.Sum(nil))
4544
}
4645

46+
// ShortSha is basically just truncating.
47+
// It is DEPRECATED and will be removed in the future.
4748
func ShortSha(sha1 string) string {
48-
if len(sha1) > 10 {
49-
return sha1[:10]
50-
}
51-
return sha1
49+
return TruncateString(sha1, 10)
5250
}
5351

5452
func DetectEncoding(content []byte) (string, error) {
@@ -198,30 +196,24 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string
198196
// HashEmail hashes email address to MD5 string.
199197
// https://en.gravatar.com/site/implement/hash/
200198
func HashEmail(email string) string {
201-
email = strings.ToLower(strings.TrimSpace(email))
202-
h := md5.New()
203-
h.Write([]byte(email))
204-
return hex.EncodeToString(h.Sum(nil))
199+
return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
205200
}
206201

207202
// AvatarLink returns relative avatar link to the site domain by given email,
208203
// which includes app sub-url as prefix. However, it is possible
209204
// to return full URL if user enables Gravatar-like service.
210-
func AvatarLink(email string) (url string) {
205+
func AvatarLink(email string) string {
211206
if setting.EnableFederatedAvatar && setting.LibravatarService != nil {
212-
var err error
213-
url, err = setting.LibravatarService.FromEmail(email)
214-
if err != nil {
215-
log.Error(1, "LibravatarService.FromEmail: %v", err)
216-
}
217-
}
218-
if len(url) == 0 && !setting.DisableGravatar {
219-
url = setting.GravatarSource + HashEmail(email)
207+
// TODO: This doesn't check any error. AvatarLink should return (string, error)
208+
url, _ := setting.LibravatarService.FromEmail(email)
209+
return url
220210
}
221-
if len(url) == 0 {
222-
url = setting.AppSubUrl + "/img/avatar_default.png"
211+
212+
if !setting.DisableGravatar {
213+
return setting.GravatarSource + HashEmail(email)
223214
}
224-
return url
215+
216+
return setting.AppSubUrl + "/img/avatar_default.png"
225217
}
226218

227219
// Seconds-based time units
@@ -470,7 +462,10 @@ func Subtract(left interface{}, right interface{}) interface{} {
470462
// EllipsisString returns a truncated short string,
471463
// it appends '...' in the end of the length of string is too large.
472464
func EllipsisString(str string, length int) string {
473-
if len(str) < length {
465+
if length <= 3 {
466+
return "..."
467+
}
468+
if len(str) <= length {
474469
return str
475470
}
476471
return str[:length-3] + "..."
@@ -498,7 +493,7 @@ func StringsToInt64s(strs []string) []int64 {
498493
func Int64sToStrings(ints []int64) []string {
499494
strs := make([]string, len(ints))
500495
for i := range ints {
501-
strs[i] = com.ToStr(ints[i])
496+
strs[i] = strconv.FormatInt(ints[i], 10)
502497
}
503498
return strs
504499
}

modules/base/tool_test.go

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
package base
2+
3+
import (
4+
"testing"
5+
6+
"github.com/go-gitea/gitea/modules/setting"
7+
"github.com/stretchr/testify/assert"
8+
"strk.kbt.io/projects/go/libravatar"
9+
)
10+
11+
func TestEncodeMD5(t *testing.T) {
12+
assert.Equal(t,
13+
"3858f62230ac3c915f300c664312c63f",
14+
EncodeMD5("foobar"),
15+
)
16+
}
17+
18+
func TestEncodeSha1(t *testing.T) {
19+
assert.Equal(t,
20+
"8843d7f92416211de9ebb963ff4ce28125932878",
21+
EncodeSha1("foobar"),
22+
)
23+
}
24+
25+
func TestShortSha(t *testing.T) {
26+
assert.Equal(t, "veryverylo", ShortSha("veryverylong"))
27+
}
28+
29+
// TODO: Test DetectEncoding()
30+
31+
func TestBasicAuthDecode(t *testing.T) {
32+
_, _, err := BasicAuthDecode("?")
33+
assert.Equal(t, "illegal base64 data at input byte 0", err.Error())
34+
35+
user, pass, err := BasicAuthDecode("Zm9vOmJhcg==")
36+
assert.NoError(t, err)
37+
assert.Equal(t, "foo", user)
38+
assert.Equal(t, "bar", pass)
39+
}
40+
41+
func TestBasicAuthEncode(t *testing.T) {
42+
assert.Equal(t, "Zm9vOmJhcg==", BasicAuthEncode("foo", "bar"))
43+
}
44+
45+
func TestGetRandomString(t *testing.T) {
46+
assert.Len(t, GetRandomString(4), 4)
47+
}
48+
49+
// TODO: Test PBKDF2()
50+
// TODO: Test VerifyTimeLimitCode()
51+
// TODO: Test CreateTimeLimitCode()
52+
53+
func TestHashEmail(t *testing.T) {
54+
assert.Equal(t,
55+
"d41d8cd98f00b204e9800998ecf8427e",
56+
HashEmail(""),
57+
)
58+
assert.Equal(t,
59+
"353cbad9b58e69c96154ad99f92bedc7",
60+
HashEmail("[email protected]"),
61+
)
62+
}
63+
64+
func TestAvatarLink(t *testing.T) {
65+
setting.EnableFederatedAvatar = false
66+
setting.LibravatarService = nil
67+
setting.DisableGravatar = true
68+
69+
assert.Equal(t, "/img/avatar_default.png", AvatarLink(""))
70+
71+
setting.DisableGravatar = false
72+
assert.Equal(t,
73+
"353cbad9b58e69c96154ad99f92bedc7",
74+
AvatarLink("[email protected]"),
75+
)
76+
77+
setting.EnableFederatedAvatar = true
78+
assert.Equal(t,
79+
"353cbad9b58e69c96154ad99f92bedc7",
80+
AvatarLink("[email protected]"),
81+
)
82+
setting.LibravatarService = libravatar.New()
83+
assert.Equal(t,
84+
"http://cdn.libravatar.org/avatar/353cbad9b58e69c96154ad99f92bedc7",
85+
AvatarLink("[email protected]"),
86+
)
87+
}
88+
89+
// TODO: computeTimeDiff()
90+
// TODO: TimeSincePro()
91+
// TODO: timeSince()
92+
// TODO: RawTimeSince()
93+
// TODO: TimeSince()
94+
95+
func TestFileSize(t *testing.T) {
96+
var size int64
97+
size = 512
98+
assert.Equal(t, "512B", FileSize(size))
99+
size = size * 1024
100+
assert.Equal(t, "512KB", FileSize(size))
101+
size = size * 1024
102+
assert.Equal(t, "512MB", FileSize(size))
103+
size = size * 1024
104+
assert.Equal(t, "512GB", FileSize(size))
105+
size = size * 1024
106+
assert.Equal(t, "512TB", FileSize(size))
107+
size = size * 1024
108+
assert.Equal(t, "512PB", FileSize(size))
109+
//size = size * 1024 TODO: Fix bug for EB
110+
//assert.Equal(t, "512EB", FileSize(size))
111+
}
112+
113+
// TODO: Subtract()
114+
115+
func TestEllipsisString(t *testing.T) {
116+
assert.Equal(t, "...", EllipsisString("foobar", 0))
117+
assert.Equal(t, "...", EllipsisString("foobar", 1))
118+
assert.Equal(t, "...", EllipsisString("foobar", 2))
119+
assert.Equal(t, "...", EllipsisString("foobar", 3))
120+
assert.Equal(t, "f...", EllipsisString("foobar", 4))
121+
assert.Equal(t, "fo...", EllipsisString("foobar", 5))
122+
assert.Equal(t, "foobar", EllipsisString("foobar", 6))
123+
assert.Equal(t, "foobar", EllipsisString("foobar", 10))
124+
}
125+
126+
func TestTruncateString(t *testing.T) {
127+
assert.Equal(t, "", TruncateString("foobar", 0))
128+
assert.Equal(t, "f", TruncateString("foobar", 1))
129+
assert.Equal(t, "fo", TruncateString("foobar", 2))
130+
assert.Equal(t, "foo", TruncateString("foobar", 3))
131+
assert.Equal(t, "foob", TruncateString("foobar", 4))
132+
assert.Equal(t, "fooba", TruncateString("foobar", 5))
133+
assert.Equal(t, "foobar", TruncateString("foobar", 6))
134+
assert.Equal(t, "foobar", TruncateString("foobar", 7))
135+
}
136+
137+
func TestStringsToInt64s(t *testing.T) {
138+
assert.Equal(t, []int64{}, StringsToInt64s([]string{}))
139+
assert.Equal(t,
140+
[]int64{1, 4, 16, 64, 256},
141+
StringsToInt64s([]string{"1", "4", "16", "64", "256"}),
142+
)
143+
144+
// TODO: StringsToInt64s should return ([]int64, error)
145+
assert.Equal(t, []int64{-1, 0, 0}, StringsToInt64s([]string{"-1", "a", "$"}))
146+
}
147+
148+
func TestInt64sToStrings(t *testing.T) {
149+
assert.Equal(t, []string{}, Int64sToStrings([]int64{}))
150+
assert.Equal(t,
151+
[]string{"1", "4", "16", "64", "256"},
152+
Int64sToStrings([]int64{1, 4, 16, 64, 256}),
153+
)
154+
}
155+
156+
func TestInt64sToMap(t *testing.T) {
157+
assert.Equal(t, map[int64]bool{}, Int64sToMap([]int64{}))
158+
assert.Equal(t,
159+
map[int64]bool{1: true, 4: true, 16: true},
160+
Int64sToMap([]int64{1, 4, 16}),
161+
)
162+
}
163+
164+
func TestIsLetter(t *testing.T) {
165+
assert.True(t, IsLetter('a'))
166+
assert.True(t, IsLetter('e'))
167+
assert.True(t, IsLetter('q'))
168+
assert.True(t, IsLetter('z'))
169+
assert.True(t, IsLetter('A'))
170+
assert.True(t, IsLetter('E'))
171+
assert.True(t, IsLetter('Q'))
172+
assert.True(t, IsLetter('Z'))
173+
assert.True(t, IsLetter('_'))
174+
assert.False(t, IsLetter('-'))
175+
assert.False(t, IsLetter('1'))
176+
assert.False(t, IsLetter('$'))
177+
}
178+
179+
func TestIsTextFile(t *testing.T) {
180+
assert.True(t, IsTextFile([]byte{}))
181+
assert.True(t, IsTextFile([]byte("lorem ipsum")))
182+
}
183+
184+
// TODO: IsImageFile(), currently no idea how to test
185+
// TODO: IsPDFFile(), currently no idea how to test

vendor/github.com/davecgh/go-spew/LICENSE

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)