Bluesky app fork with some witchin' additions 馃挮
at main 213 lines 4.9 kB view raw
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})