Passed
Push — master ( c9d870...ccc043 )
by Serhii
02:31 queued 49s
created

timeago.TestGetWords   A

Complexity

Conditions 4

Size

Total Lines 29
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 22
dl 0
loc 29
rs 9.352
c 0
b 0
f 0
nop 1
1
package timeago
2
3
import (
4
	"testing"
5
	"time"
6
)
7
8
func TestGetWords(t *testing.T) {
9
	cases := []struct {
10
		timeKind string
11
		num      int
12
		result   string
13
		lang     string
14
	}{
15
		// english
16
		{"days", 11, "11 days ago", "en"},
17
		{"days", 21, "21 days ago", "en"},
18
		{"seconds", 30, "30 seconds ago", "en"},
19
		{"seconds", 31, "31 seconds ago", "en"},
20
		{"hours", 10, "10 hours ago", "en"},
21
		{"years", 2, "2 years ago", "en"},
22
		// russian
23
		{"hours", 5, "5 часов назад", "ru"},
24
		{"days", 11, "11 дней назад", "ru"},
25
		{"years", 21, "21 год назад", "ru"},
26
		{"minutes", 59, "59 минут назад", "ru"},
27
	}
28
29
	for _, tc := range cases {
30
		t.Run(tc.result, func(test *testing.T) {
31
			SetConfig(Config{
32
				Language: tc.lang,
33
			})
34
35
			if res := getWords(tc.timeKind, tc.num); res != tc.result {
36
				test.Errorf("Result must be `%s` but got `%s` instead", tc.result, res)
37
			}
38
		})
39
	}
40
}
41
42
func TestParseFunctionCanExceptTimestamp(t *testing.T) {
43
	cases := []struct {
44
		timestamp int
45
		result    string
46
	}{
47
		{getTimestampOfPastDate(time.Minute), "1 minute ago"},
48
		{getTimestampOfPastDate(time.Minute * 5), "5 minutes ago"},
49
		{getTimestampOfPastDate(time.Hour), "1 hour ago"},
50
		{getTimestampOfPastDate(time.Hour * 3), "3 hours ago"},
51
		{getTimestampOfPastDate(time.Hour * 24), "1 day ago"},
52
		{getTimestampOfPastDate(time.Hour * 48), "2 days ago"},
53
	}
54
55
	SetConfig(Config{
56
		Language: "en",
57
	})
58
59
	for _, tc := range cases {
60
		t.Run(tc.result, func(test *testing.T) {
61
			if res := Parse(tc.timestamp); res != tc.result {
62
				test.Errorf("Result must be %v, but got %v instead", tc.result, res)
63
			}
64
		})
65
	}
66
}
67
68
func TestParseFunctionCanExceptTimePackage(t *testing.T) {
69
	cases := []struct {
70
		time   time.Time
71
		result string
72
	}{
73
		{time.Now().Add(-time.Minute), "1 minute ago"},
74
		{time.Now().Add(-time.Minute * 2), "2 minutes ago"},
75
		{time.Now().Add(-time.Minute * 3), "3 minutes ago"},
76
		{time.Now().Add(-time.Minute * 4), "4 minutes ago"},
77
		{time.Now().Add(-time.Minute * 5), "5 minutes ago"},
78
		{time.Now().Add(-time.Minute * 6), "6 minutes ago"},
79
		{time.Now().Add(-time.Hour * 7), "7 hours ago"},
80
		{time.Now().Add(-time.Hour * 8), "8 hours ago"},
81
		{time.Now().Add(-time.Hour * 9), "9 hours ago"},
82
		{time.Now().Add(-time.Hour * 10), "10 hours ago"},
83
		{time.Now().Add(-time.Hour * 11), "11 hours ago"},
84
	}
85
86
	SetConfig(Config{
87
		Language: "en",
88
	})
89
90
	for _, tc := range cases {
91
		t.Run("Test for date "+tc.time.String(), func(test *testing.T) {
92
			if res := Parse(tc.time); res != tc.result {
93
				test.Errorf("Result must be %v, but got %v instead", tc.result, res)
94
			}
95
		})
96
	}
97
}
98
99
func TestParseFuncWillCalculateIntervalToFutureDate(t *testing.T) {
100
	testCases := []struct {
101
		time   time.Time
102
		result string
103
	}{
104
		{time.Now().Add(time.Minute * 2), "2 minutes"},
105
		{time.Now().Add(time.Minute * 5), "5 minutes"},
106
		{time.Now().Add(time.Minute * 10), "10 minutes"},
107
		{time.Now().Add(time.Hour), "1 hour"},
108
		{time.Now().Add(time.Hour * 24), "1 day"},
109
		{time.Now().Add(time.Hour * 48), "2 days"},
110
	}
111
112
	SetConfig(Config{
113
		Language: "en",
114
	})
115
116
	for _, tc := range testCases {
117
		t.Run("Test for date: "+tc.time.String(), func(test *testing.T) {
118
			if res := Parse(tc.time); res != tc.result {
119
				test.Errorf("Result must be %v, but got %v instead", tc.result, res)
120
			}
121
		})
122
	}
123
}
124