Passed
Push — master ( 3df1d0...111a66 )
by Serhii
02:56 queued 01:25
created

tests.TestTakeUkWithOnlineFlag   B

Complexity

Conditions 4

Size

Total Lines 66
Code Lines 62

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 62
dl 0
loc 66
rs 8.2436
c 0
b 0
f 0
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
package tests
2
3
import (
4
	"testing"
5
	"time"
6
7
	"github.com/SerhiiCho/timeago"
8
)
9
10
func TestTakeUk(t *testing.T) {
11
	cases := []struct {
12
		date   string
13
		result string
14
		lang   string
15
	}{
16
		{smallSubTime(-60 * time.Second), "1 хвилина назад", "uk"},
17
		{smallSubTime(-1 * time.Minute), "1 хвилина назад", "uk"},
18
		{smallSubTime(-2 * time.Minute), "2 хвилини назад", "uk"},
19
		{smallSubTime(-5 * time.Minute), "5 хвилин назад", "uk"},
20
		{smallSubTime(-9 * time.Minute), "9 хвилин назад", "uk"},
21
		{smallSubTime(-10 * time.Minute), "10 хвилин назад", "uk"},
22
		{smallSubTime(-11 * time.Minute), "11 хвилин назад", "uk"},
23
		{smallSubTime(-20 * time.Minute), "20 хвилин назад", "uk"},
24
		{smallSubTime(-21 * time.Minute), "21 хвилина назад", "uk"},
25
		{smallSubTime(-22 * time.Minute), "22 хвилини назад", "uk"},
26
		{smallSubTime(-30 * time.Minute), "30 хвилин назад", "uk"},
27
		{smallSubTime(-31 * time.Minute), "31 хвилина назад", "uk"},
28
		{smallSubTime(-59 * time.Minute), "59 хвилин назад", "uk"},
29
		{smallSubTime(-60 * time.Minute), "1 година назад", "uk"},
30
		{smallSubTime(-1 * time.Hour), "1 година назад", "uk"},
31
		{smallSubTime(-2 * time.Hour), "2 години назад", "uk"},
32
		{smallSubTime(-9 * time.Hour), "9 годин назад", "uk"},
33
		{smallSubTime(-10 * time.Hour), "10 годин назад", "uk"},
34
		{smallSubTime(-11 * time.Hour), "11 годин назад", "uk"},
35
		{smallSubTime(-20 * time.Hour), "20 годин назад", "uk"},
36
		{smallSubTime(-21 * time.Hour), "21 година назад", "uk"},
37
		{smallSubTime(-23 * time.Hour), "23 години назад", "uk"},
38
		{smallSubTime(-24 * time.Hour), "1 день назад", "uk"},
39
		{smallSubTime(-30 * time.Hour), "1 день назад", "uk"},
40
		{smallSubTime((-24 * 2) * time.Hour), "2 дня назад", "uk"},
41
		{smallSubTime((-24 * 6) * time.Hour), "6 днів назад", "uk"},
42
		{smallSubTime((-24 * 7) * time.Hour), "1 тиждень назад", "uk"},
43
		{smallSubTime((-24 * 14) * time.Hour), "2 тижні назад", "uk"},
44
		{smallSubTime((-24 * 21) * time.Hour), "3 тижні назад", "uk"},
45
		{bigSubTime(0, 1, 1), "1 місяць назад", "uk"},
46
		{bigSubTime(0, 2, 1), "2 місяці назад", "uk"},
47
		{bigSubTime(0, 9, 1), "9 місяців назад", "uk"},
48
		{bigSubTime(0, 11, 1), "11 місяців назад", "uk"},
49
		{bigSubTime(0, 12, 1), "1 рік назад", "uk"},
50
		{bigSubTime(1, 0, 1), "1 рік назад", "uk"},
51
		{bigSubTime(2, 0, 1), "2 року назад", "uk"},
52
		{bigSubTime(5, 0, 1), "5 років назад", "uk"},
53
		{bigSubTime(6, 0, 1), "6 років назад", "uk"},
54
		{bigSubTime(7, 0, 1), "7 років назад", "uk"},
55
		{bigSubTime(21, 0, 1), "21 рік назад", "uk"},
56
		{bigSubTime(31, 0, 1), "31 рік назад", "uk"},
57
		{bigSubTime(100, 0, 1), "100 років назад", "uk"},
58
	}
59
60
	for _, tc := range cases {
61
		t.Run("result for "+tc.date, func(test *testing.T) {
62
			timeago.Set("language", tc.lang)
63
			timeago.Set("location", "Europe/Kiev")
64
65
			if res := timeago.Take(tc.date); res != tc.result {
66
				test.Errorf("Result must be %s, but got %s instead", tc.result, res)
67
			}
68
		})
69
	}
70
}
71
72
func TestTakeUkWithOnlineFlag(t *testing.T) {
73
	cases := []struct {
74
		date   string
75
		result string
76
		lang   string
77
	}{
78
		{smallSubTime(time.Second * 2), "В мережі", "uk"},
79
		{smallSubTime(time.Second), "В мережі", "uk"},
80
		{smallSubTime(-1 * time.Second), "В мережі", "uk"},
81
		{smallSubTime(-2 * time.Second), "В мережі", "uk"},
82
		{smallSubTime(-9 * time.Second), "В мережі", "uk"},
83
		{smallSubTime(-10 * time.Second), "В мережі", "uk"},
84
		{smallSubTime(-11 * time.Second), "В мережі", "uk"},
85
		{smallSubTime(-20 * time.Second), "В мережі", "uk"},
86
		{smallSubTime(-21 * time.Second), "В мережі", "uk"},
87
		{smallSubTime(-22 * time.Second), "В мережі", "uk"},
88
		{smallSubTime(-30 * time.Second), "В мережі", "uk"},
89
		{smallSubTime(-31 * time.Second), "В мережі", "uk"},
90
		{smallSubTime(-60 * time.Second), "1 хвилина назад", "uk"},
91
		{smallSubTime(-1 * time.Minute), "1 хвилина назад", "uk"},
92
		{smallSubTime(-2 * time.Minute), "2 хвилини назад", "uk"},
93
		{smallSubTime(-9 * time.Minute), "9 хвилин назад", "uk"},
94
		{smallSubTime(-10 * time.Minute), "10 хвилин назад", "uk"},
95
		{smallSubTime(-11 * time.Minute), "11 хвилин назад", "uk"},
96
		{smallSubTime(-20 * time.Minute), "20 хвилин назад", "uk"},
97
		{smallSubTime(-21 * time.Minute), "21 хвилина назад", "uk"},
98
		{smallSubTime(-22 * time.Minute), "22 хвилини назад", "uk"},
99
		{smallSubTime(-30 * time.Minute), "30 хвилин назад", "uk"},
100
		{smallSubTime(-31 * time.Minute), "31 хвилина назад", "uk"},
101
		{smallSubTime(-60 * time.Minute), "1 година назад", "uk"},
102
		{smallSubTime(-1 * time.Hour), "1 година назад", "uk"},
103
		{smallSubTime(-2 * time.Hour), "2 години назад", "uk"},
104
		{smallSubTime(-9 * time.Hour), "9 годин назад", "uk"},
105
		{smallSubTime(-10 * time.Hour), "10 годин назад", "uk"},
106
		{smallSubTime(-11 * time.Hour), "11 годин назад", "uk"},
107
		{smallSubTime(-20 * time.Hour), "20 годин назад", "uk"},
108
		{smallSubTime(-21 * time.Hour), "21 година назад", "uk"},
109
		{smallSubTime(-23 * time.Hour), "23 години назад", "uk"},
110
		{smallSubTime(-24 * time.Hour), "1 день назад", "uk"},
111
		{smallSubTime(-30 * time.Hour), "1 день назад", "uk"},
112
		{smallSubTime((-24 * 2) * time.Hour), "2 дня назад", "uk"},
113
		{smallSubTime((-24 * 6) * time.Hour), "6 днів назад", "uk"},
114
		{smallSubTime((-24 * 7) * time.Hour), "1 тиждень назад", "uk"},
115
		{smallSubTime((-24 * 14) * time.Hour), "2 тижні назад", "uk"},
116
		{smallSubTime((-24 * 21) * time.Hour), "3 тижні назад", "uk"},
117
		{bigSubTime(0, 1, 1), "1 місяць назад", "uk"},
118
		{bigSubTime(0, 2, 1), "2 місяці назад", "uk"},
119
		{bigSubTime(0, 9, 1), "9 місяців назад", "uk"},
120
		{bigSubTime(0, 11, 1), "11 місяців назад", "uk"},
121
		{bigSubTime(0, 12, 1), "1 рік назад", "uk"},
122
		{bigSubTime(1, 0, 1), "1 рік назад", "uk"},
123
		{bigSubTime(2, 0, 1), "2 року назад", "uk"},
124
		{bigSubTime(5, 0, 1), "5 років назад", "uk"},
125
		{bigSubTime(6, 0, 1), "6 років назад", "uk"},
126
		{bigSubTime(7, 0, 1), "7 років назад", "uk"},
127
		{bigSubTime(21, 0, 1), "21 рік назад", "uk"},
128
		{bigSubTime(31, 0, 1), "31 рік назад", "uk"},
129
		{bigSubTime(100, 0, 1), "100 років назад", "uk"},
130
	}
131
132
	for _, tc := range cases {
133
		t.Run("result for "+tc.date+"|online", func(test *testing.T) {
134
			timeago.Set("language", tc.lang)
135
136
			if res := timeago.Take(tc.date + "|online"); res != tc.result {
137
				test.Errorf("Result must be %s, but got %s instead", tc.result, res)
138
			}
139
		})
140
	}
141
}
142
143
func TestTakeUkWithSeconds(t *testing.T) {
144
	cases := []struct {
145
		date   string
146
		result []string
147
		lang   string
148
	}{
149
		{smallSubTime(time.Second * 2), []string{"0 секунд назад", "1 секунда назад"}, "uk"},
150
		{smallSubTime(time.Second), []string{"0 секунд назад", "1 секунда назад"}, "uk"},
151
		{smallSubTime(-1 * time.Second), []string{"1 секунда назад", "2 секунди назад"}, "uk"},
152
		{smallSubTime(-2 * time.Second), []string{"2 секунди назад", "3 секунди назад"}, "uk"},
153
		{smallSubTime(-3 * time.Second), []string{"3 секунди назад", "4 секунди назад"}, "uk"},
154
		{smallSubTime(-4 * time.Second), []string{"4 секунди назад", "5 секунд назад"}, "uk"},
155
		{smallSubTime(-9 * time.Second), []string{"9 секунд назад", "10 секунд назад"}, "uk"},
156
		{smallSubTime(-10 * time.Second), []string{"10 секунд назад", "11 секунд назад"}, "uk"},
157
		{smallSubTime(-11 * time.Second), []string{"11 секунд назад", "12 секунд назад"}, "uk"},
158
		{smallSubTime(-29 * time.Second), []string{"29 секунд назад", "30 секунд назад"}, "uk"},
159
		{smallSubTime(-30 * time.Second), []string{"30 секунд назад", "31 секунда назад"}, "uk"},
160
		{smallSubTime(-31 * time.Second), []string{"31 секунда назад", "32 секунди назад"}, "uk"},
161
	}
162
163
	for _, tc := range cases {
164
		t.Run("result for "+tc.date, func(test *testing.T) {
165
			timeago.Set("language", tc.lang)
166
			timeago.Set("location", "Europe/Kiev")
167
168
			if res := timeago.Take(tc.date); res != tc.result[0] && res != tc.result[1] {
169
				test.Errorf("Result must be %s or %s, but got %s instead", tc.result[0], tc.result[1], res)
170
			}
171
		})
172
	}
173
}
174