timeago_test.go   A
last analyzed

Size/Duplication

Total Lines 143
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 122
dl 0
loc 143
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C timeago.TestParse 0 133 5
1
package timeago
2
3
import (
4
	"strconv"
5
	"testing"
6
	"time"
7
8
	"github.com/SerhiiCho/timeago/v3/internal/utils"
9
)
10
11
func TestParse(t *testing.T) {
12
	cases := []struct {
13
		date interface{}
14
		res  string
15
	}{
16
		// Integer timestamp input parsing
17
		{utils.UnixFromPastDate(time.Minute * 5), "5 minutes ago"},
18
		{utils.UnixFromPastDate(time.Hour), "1 hour ago"},
19
		{utils.UnixFromPastDate(time.Hour * 3), "3 hours ago"},
20
		{utils.UnixFromPastDate(time.Hour * 5), "5 hours ago"},
21
		{utils.UnixFromPastDate(time.Hour * 24), "1 day ago"},
22
		{utils.UnixFromPastDate(time.Hour * 24 * 2), "2 days ago"},
23
		{utils.UnixFromPastDate(time.Hour * 24 * 3), "3 days ago"},
24
		{utils.UnixFromPastDate(time.Hour * 24 * 4), "4 days ago"},
25
		{utils.UnixFromPastDate(time.Hour * 24 * 5), "5 days ago"},
26
		{utils.UnixFromPastDate(time.Hour * 24 * 6), "6 days ago"},
27
		{utils.UnixFromPastDate(time.Hour * 24 * 7), "1 week ago"},
28
		// Integer 64 timestamp input parsing
29
		{int64(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
30
		{int64(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
31
		{int64(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
32
		{int64(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
33
		{int64(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
34
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
35
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
36
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
37
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
38
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
39
		{int64(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
40
		// Unsigned Integer timestamp input parsing
41
		{uint(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
42
		{uint(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
43
		{uint(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
44
		{uint(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
45
		{uint(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
46
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
47
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
48
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
49
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
50
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
51
		{uint(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
52
		// Unsigned Integer 32 timestamp input parsing
53
		{uint32(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
54
		{uint32(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
55
		{uint32(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
56
		{uint32(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
57
		{uint32(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
58
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
59
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
60
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
61
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
62
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
63
		{uint32(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
64
		// Unsigned Integer 64 timestamp input parsing
65
		{uint64(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
66
		{uint64(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
67
		{uint64(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
68
		{uint64(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
69
		{uint64(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
70
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
71
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
72
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
73
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
74
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
75
		{uint64(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
76
		// Integer 32 timestamp input parsing
77
		{int32(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
78
		{int32(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
79
		{int32(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
80
		{int32(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
81
		{int32(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
82
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
83
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
84
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
85
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
86
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
87
		{int32(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
88
		// Negative integer timestamp input parsing
89
		{utils.UnixFromFutureDate(time.Minute * 5), "5 minutes"},
90
		{utils.UnixFromFutureDate(time.Hour), "1 hour"},
91
		{utils.UnixFromFutureDate(time.Hour * 3), "3 hours"},
92
		{utils.UnixFromFutureDate(time.Hour * 5), "5 hours"},
93
		{utils.UnixFromFutureDate(time.Hour * 24), "1 day"},
94
		{utils.UnixFromFutureDate(time.Hour * 24 * 2), "2 days"},
95
		{utils.UnixFromFutureDate(time.Hour * 24 * 3), "3 days"},
96
		{utils.UnixFromFutureDate(time.Hour * 24 * 4), "4 days"},
97
		{utils.UnixFromFutureDate(time.Hour * 24 * 5), "5 days"},
98
		{utils.UnixFromFutureDate(time.Hour * 24 * 6), "6 days"},
99
		{utils.UnixFromFutureDate(time.Hour * 24 * 7), "1 week"},
100
		// time.Time input parsing
101
		{utils.SubMinutes(2), "2 minutes ago"},
102
		{utils.SubMinutes(3), "3 minutes ago"},
103
		{utils.SubMinutes(4), "4 minutes ago"},
104
		{utils.SubMinutes(5), "5 minutes ago"},
105
		{utils.SubMinutes(6), "6 minutes ago"},
106
		{utils.SubHours(7), "7 hours ago"},
107
		{utils.SubHours(8), "8 hours ago"},
108
		{utils.SubHours(9), "9 hours ago"},
109
		{utils.SubHours(10), "10 hours ago"},
110
		{utils.SubHours(11), "11 hours ago"},
111
		// time.Time future date parsing
112
		{utils.AddMinutes(2), "2 minutes"},
113
		{utils.AddMinutes(5), "5 minutes"},
114
		{utils.AddMinutes(10), "10 minutes"},
115
		{utils.AddHours(1), "1 hour"},
116
		{utils.AddHours(24), "1 day"},
117
		{utils.AddHours(48), "2 days"},
118
		// Timestamp string input parsing
119
		{strconv.Itoa(utils.UnixFromPastDate(time.Minute * 5)), "5 minutes ago"},
120
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour)), "1 hour ago"},
121
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 3)), "3 hours ago"},
122
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 5)), "5 hours ago"},
123
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24)), "1 day ago"},
124
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 2)), "2 days ago"},
125
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 3)), "3 days ago"},
126
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 4)), "4 days ago"},
127
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 5)), "5 days ago"},
128
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 6)), "6 days ago"},
129
		{strconv.Itoa(utils.UnixFromPastDate(time.Hour * 24 * 7)), "1 week ago"},
130
	}
131
132
	Reconfigure(Config{Language: LangEn})
133
134
	for _, tc := range cases {
135
		t.Run(tc.res, func(t *testing.T) {
136
			res, err := Parse(tc.date)
137
138
			if err != nil {
139
				t.Errorf("Error must be nil, but got %q instead", err)
140
			}
141
142
			if res != tc.res {
143
				t.Errorf("Result must be %q, but got %q instead", tc.res, res)
144
			}
145
		})
146
	}
147
}
148