forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {describe, expect, it} from '@jest/globals'
2import {addDays, subDays, subHours, subMinutes, subSeconds} from 'date-fns'
3
4import {dateDiff} from '../useTimeAgo'
5
6const base = new Date('2024-06-17T00:00:00Z')
7
8describe('dateDiff', () => {
9 it(`works with numbers`, () => {
10 const earlier = subDays(base, 3)
11 expect(dateDiff(earlier, Number(base))).toEqual({
12 value: 3,
13 unit: 'day',
14 earlier,
15 later: base,
16 })
17 })
18 it(`works with strings`, () => {
19 const earlier = subDays(base, 3)
20 expect(dateDiff(earlier, base.toString())).toEqual({
21 value: 3,
22 unit: 'day',
23 earlier,
24 later: base,
25 })
26 })
27 it(`works with dates`, () => {
28 const earlier = subDays(base, 3)
29 expect(dateDiff(earlier, base)).toEqual({
30 value: 3,
31 unit: 'day',
32 earlier,
33 later: base,
34 })
35 })
36
37 it(`equal values return now`, () => {
38 expect(dateDiff(base, base)).toEqual({
39 value: 0,
40 unit: 'now',
41 earlier: base,
42 later: base,
43 })
44 })
45 it(`future dates return now`, () => {
46 const earlier = addDays(base, 3)
47 expect(dateDiff(earlier, base)).toEqual({
48 value: 0,
49 unit: 'now',
50 earlier,
51 later: base,
52 })
53 })
54
55 it(`values < 5 seconds ago return now`, () => {
56 const then = subSeconds(base, 4)
57 expect(dateDiff(then, base)).toEqual({
58 value: 0,
59 unit: 'now',
60 earlier: then,
61 later: base,
62 })
63 })
64 it(`values >= 5 seconds ago return seconds`, () => {
65 const then = subSeconds(base, 5)
66 expect(dateDiff(then, base)).toEqual({
67 value: 5,
68 unit: 'second',
69 earlier: then,
70 later: base,
71 })
72 })
73
74 it(`values < 1 min return seconds`, () => {
75 const then = subSeconds(base, 59)
76 expect(dateDiff(then, base)).toEqual({
77 value: 59,
78 unit: 'second',
79 earlier: then,
80 later: base,
81 })
82 })
83 it(`values >= 1 min return minutes`, () => {
84 const then = subSeconds(base, 60)
85 expect(dateDiff(then, base)).toEqual({
86 value: 1,
87 unit: 'minute',
88 earlier: then,
89 later: base,
90 })
91 })
92 it(`minutes round down`, () => {
93 const then = subSeconds(base, 119)
94 expect(dateDiff(then, base)).toEqual({
95 value: 1,
96 unit: 'minute',
97 earlier: then,
98 later: base,
99 })
100 })
101
102 it(`values < 1 hour return minutes`, () => {
103 const then = subMinutes(base, 59)
104 expect(dateDiff(then, base)).toEqual({
105 value: 59,
106 unit: 'minute',
107 earlier: then,
108 later: base,
109 })
110 })
111 it(`values >= 1 hour return hours`, () => {
112 const then = subMinutes(base, 60)
113 expect(dateDiff(then, base)).toEqual({
114 value: 1,
115 unit: 'hour',
116 earlier: then,
117 later: base,
118 })
119 })
120 it(`hours round down`, () => {
121 const then = subMinutes(base, 119)
122 expect(dateDiff(then, base)).toEqual({
123 value: 1,
124 unit: 'hour',
125 earlier: then,
126 later: base,
127 })
128 })
129
130 it(`values < 1 day return hours`, () => {
131 const then = subHours(base, 23)
132 expect(dateDiff(then, base)).toEqual({
133 value: 23,
134 unit: 'hour',
135 earlier: then,
136 later: base,
137 })
138 })
139 it(`values >= 1 day return days`, () => {
140 const then = subHours(base, 24)
141 expect(dateDiff(then, base)).toEqual({
142 value: 1,
143 unit: 'day',
144 earlier: then,
145 later: base,
146 })
147 })
148 it(`days round down`, () => {
149 const then = subHours(base, 47)
150 expect(dateDiff(then, base)).toEqual({
151 value: 1,
152 unit: 'day',
153 earlier: then,
154 later: base,
155 })
156 })
157
158 it(`values < 30 days return days`, () => {
159 const then = subDays(base, 29)
160 expect(dateDiff(then, base)).toEqual({
161 value: 29,
162 unit: 'day',
163 earlier: then,
164 later: base,
165 })
166 })
167 it(`values >= 30 days return months`, () => {
168 const then = subDays(base, 30)
169 expect(dateDiff(then, base)).toEqual({
170 value: 1,
171 unit: 'month',
172 earlier: then,
173 later: base,
174 })
175 })
176 it(`months round down`, () => {
177 const then = subDays(base, 59)
178 expect(dateDiff(then, base)).toEqual({
179 value: 1,
180 unit: 'month',
181 earlier: then,
182 later: base,
183 })
184 })
185 it(`values are rounded by increments of 30`, () => {
186 const then = subDays(base, 61)
187 expect(dateDiff(then, base)).toEqual({
188 value: 2,
189 unit: 'month',
190 earlier: then,
191 later: base,
192 })
193 })
194
195 it(`values < 360 days return months`, () => {
196 const then = subDays(base, 359)
197 expect(dateDiff(then, base)).toEqual({
198 value: 11,
199 unit: 'month',
200 earlier: then,
201 later: base,
202 })
203 })
204 it(`values >= 360 days return the earlier value`, () => {
205 const then = subDays(base, 360)
206 expect(dateDiff(then, base)).toEqual({
207 value: 12,
208 unit: 'month',
209 earlier: then,
210 later: base,
211 })
212 })
213})