Passed
Push — v3.0.0 ( 670783...5b9f70 )
by Serhii
01:17
created

tests.TestParseUk   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/v3"
8
	"github.com/SerhiiCho/timeago/v3/config"
9
)
10
11
const langUk = "uk"
12
13
func TestParseUk(t *testing.T) {
14
	cases := []struct {
15
		date   time.Time
16
		result string
17
	}{
18
		{subSeconds(60), "1 хвилина тому"},
19
		{subMinutes(1), "1 хвилина тому"},
20
		{subMinutes(2), "2 хвилини тому"},
21
		{subMinutes(5), "5 хвилин тому"},
22
		{subMinutes(9), "9 хвилин тому"},
23
		{subMinutes(10), "10 хвилин тому"},
24
		{subMinutes(11), "11 хвилин тому"},
25
		{subMinutes(20), "20 хвилин тому"},
26
		{subMinutes(21), "21 хвилина тому"},
27
		{subMinutes(22), "22 хвилини тому"},
28
		{subMinutes(30), "30 хвилин тому"},
29
		{subMinutes(31), "31 хвилина тому"},
30
		{subMinutes(59), "59 хвилин тому"},
31
		{subMinutes(60), "1 година тому"},
32
		{subHours(1), "1 година тому"},
33
		{subHours(2), "2 години тому"},
34
		{subHours(9), "9 годин тому"},
35
		{subHours(10), "10 годин тому"},
36
		{subHours(11), "11 годин тому"},
37
		{subHours(20), "20 годин тому"},
38
		{subHours(21), "21 година тому"},
39
		{subHours(23), "23 години тому"},
40
		{subHours(24), "1 день тому"},
41
		{subDays(1), "1 день тому"},
42
		{subDays(2), "2 дні тому"},
43
		{subDays(3), "3 дні тому"},
44
		{subDays(4), "4 дні тому"},
45
		{subDays(5), "5 днів тому"},
46
		{subDays(6), "6 днів тому"},
47
		{subDays(7), "1 тиждень тому"},
48
		{subWeeks(1), "1 тиждень тому"},
49
		{subWeeks(2), "2 тижні тому"},
50
		{subWeeks(3), "3 тижні тому"},
51
		{subMonths(1), "1 місяць тому"},
52
		{subMonths(2), "2 місяці тому"},
53
		{subMonths(3), "3 місяці тому"},
54
		{subMonths(4), "4 місяці тому"},
55
		{subMonths(5), "5 місяців тому"},
56
		{subMonths(6), "6 місяців тому"},
57
		{subMonths(7), "7 місяців тому"},
58
		{subMonths(8), "8 місяців тому"},
59
		{subMonths(9), "9 місяців тому"},
60
		{subMonths(10), "10 місяців тому"},
61
		{subMonths(11), "11 місяців тому"},
62
		{subMonths(12), "1 рік тому"},
63
		{subYears(1), "1 рік тому"},
64
		{subYears(2), "2 роки тому"},
65
		{subYears(5), "5 років тому"},
66
		{subYears(6), "6 років тому"},
67
		{subYears(7), "7 років тому"},
68
		{subYears(21), "21 рік тому"},
69
		{subYears(31), "31 рік тому"},
70
		{subYears(100), "100 років тому"},
71
	}
72
73
	for _, tc := range cases {
74
		t.Run("result for "+tc.date.String(), func(test *testing.T) {
75
			timeago.Configure(&config.Config{Language: langUk})
76
77
			if res := timeago.Parse(tc.date); res != tc.result {
78
				test.Errorf("Result must be %s, but got %s instead", tc.result, res)
79
			}
80
		})
81
	}
82
}
83
84
func TestParseUkWithSeconds(t *testing.T) {
85
	cases := []struct {
86
		date   time.Time
87
		result []string
88
	}{
89
		{subSeconds(0), []string{"0 секунд тому", "1 секунда тому"}},
90
		{subSeconds(1), []string{"1 секунда тому", "2 секунди тому"}},
91
		{subSeconds(2), []string{"2 секунди тому", "3 секунди тому"}},
92
		{subSeconds(3), []string{"3 секунди тому", "4 секунди тому"}},
93
		{subSeconds(4), []string{"4 секунди тому", "5 секунд тому"}},
94
		{subSeconds(9), []string{"9 секунд тому", "10 секунд тому"}},
95
		{subSeconds(10), []string{"10 секунд тому", "11 секунд тому"}},
96
		{subSeconds(11), []string{"11 секунд тому", "12 секунд тому"}},
97
		{subSeconds(29), []string{"29 секунд тому", "30 секунд тому"}},
98
		{subSeconds(30), []string{"30 секунд тому", "31 секунда тому"}},
99
		{subSeconds(31), []string{"31 секунда тому", "32 секунди тому"}},
100
		{subSeconds(59), []string{"59 секунд тому", "1 хвилина тому"}},
101
	}
102
103
	for _, tc := range cases {
104
		t.Run("result for "+tc.date.String(), func(test *testing.T) {
105
			timeago.Configure(&config.Config{Language: langUk})
106
107
			if res := timeago.Parse(tc.date); res != tc.result[0] && res != tc.result[1] {
108
				test.Errorf("Result must be %s or %s, but got %s instead", tc.result[0], tc.result[1], res)
109
			}
110
		})
111
	}
112
}
113