|
1 | 1 | const { store } = require(`../../../redux`)
|
2 | 2 | const { build } = require(`../..`)
|
3 |
| -const { isDate } = require(`../date`) |
| 3 | +const { isDate, looksLikeADate } = require(`../date`) |
4 | 4 | require(`../../../db/__tests__/fixtures/ensure-loki`)()
|
5 | 5 |
|
6 | 6 | // Timestamps grabbed from https://github.com/moment/moment/blob/2e2a5b35439665d4b0200143d808a7c26d6cd30f/src/test/moment/is_valid.js
|
@@ -152,6 +152,132 @@ describe(`isDate`, () => {
|
152 | 152 | })
|
153 | 153 | })
|
154 | 154 |
|
| 155 | +describe(`looksLikeADate`, () => { |
| 156 | + it.each([ |
| 157 | + `1970`, |
| 158 | + `2019`, |
| 159 | + `1970-01`, |
| 160 | + `2019-01`, |
| 161 | + `1970-01-01`, |
| 162 | + `2010-01-01`, |
| 163 | + `2010-01-30`, |
| 164 | + `19700101`, |
| 165 | + `20100101`, |
| 166 | + `20100130`, |
| 167 | + `2010-01-30T23+00:00`, |
| 168 | + `2010-01-30T23:59+00:00`, |
| 169 | + `2010-01-30T23:59:59+00:00`, |
| 170 | + `2010-01-30T23:59:59.999+00:00`, |
| 171 | + `2010-01-30T23:59:59.999-07:00`, |
| 172 | + `2010-01-30T00:00:00.000+07:00`, |
| 173 | + `2010-01-30T23:59:59.999-07`, |
| 174 | + `2010-01-30T00:00:00.000+07`, |
| 175 | + `2010-01-30T23Z`, |
| 176 | + `2010-01-30T23:59Z`, |
| 177 | + `2010-01-30T23:59:59Z`, |
| 178 | + `2010-01-30T23:59:59.999Z`, |
| 179 | + `2010-01-30T00:00:00.000Z`, |
| 180 | + `1970-01-01T00:00:00.000001Z`, |
| 181 | + `2012-04-01T00:00:00-05:00`, |
| 182 | + `2012-11-12T00:00:00+01:00`, |
| 183 | + ])(`should return true for valid ISO 8601: %s`, dateString => { |
| 184 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 185 | + }) |
| 186 | + |
| 187 | + it.each([ |
| 188 | + `2010-01-30 23+00:00`, |
| 189 | + `2010-01-30 23:59+00:00`, |
| 190 | + `2010-01-30 23:59:59+00:00`, |
| 191 | + `2010-01-30 23:59:59.999+00:00`, |
| 192 | + `2010-01-30 23:59:59.999-07:00`, |
| 193 | + `2010-01-30 00:00:00.000+07:00`, |
| 194 | + `2010-01-30 23:59:59.999-07`, |
| 195 | + `2010-01-30 00:00:00.000+07`, |
| 196 | + `1970-01-01 00:00:00.000Z`, |
| 197 | + `2012-04-01 00:00:00-05:00`, |
| 198 | + `2012-11-12 00:00:00+01:00`, |
| 199 | + `1970-01-01 00:00:00.0000001 Z`, |
| 200 | + `1970-01-01 00:00:00.000 Z`, |
| 201 | + `1970-01-01 00:00:00 Z`, |
| 202 | + `1970-01-01 000000 Z`, |
| 203 | + `1970-01-01 00:00 Z`, |
| 204 | + `1970-01-01 00 Z`, |
| 205 | + ])(`should return true for ISO 8601 (no T, extra space): %s`, dateString => { |
| 206 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 207 | + }) |
| 208 | + |
| 209 | + it.each([`1970-W31`, `2006-W01`, `1970W31`, `2009-W53-7`, `2009W537`])( |
| 210 | + `should return true for ISO 8601 week dates: %s`, |
| 211 | + dateString => { |
| 212 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 213 | + } |
| 214 | + ) |
| 215 | + |
| 216 | + it.each([`1970-334`, `1970334`, `2090-001`, `2090001`])( |
| 217 | + `should return true for ISO 8601 ordinal dates: %s`, |
| 218 | + dateString => { |
| 219 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 220 | + } |
| 221 | + ) |
| 222 | + |
| 223 | + it.skip.each([ |
| 224 | + `2018-08-31T23:25:16.019345+02:00`, |
| 225 | + `2018-08-31T23:25:16.019345Z`, |
| 226 | + ])(`should return true for microsecond precision: %s`, dateString => { |
| 227 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 228 | + }) |
| 229 | + |
| 230 | + it.skip.each([ |
| 231 | + `2018-08-31T23:25:16.019345123+02:00`, |
| 232 | + `2018-08-31T23:25:16.019345123Z`, |
| 233 | + ])(`should return true for nanosecond precision: %s`, dateString => { |
| 234 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 235 | + }) |
| 236 | + |
| 237 | + it.skip.each([`2018-08-31T23:25:16.012345678901+02:00`])( |
| 238 | + `should return false for precision beyond 9 digits: %s`, |
| 239 | + dateString => { |
| 240 | + expect(looksLikeADate(dateString)).toBeFalsy() |
| 241 | + } |
| 242 | + ) |
| 243 | + |
| 244 | + it.each([ |
| 245 | + `2010-00-00`, |
| 246 | + `2010-01-00`, |
| 247 | + `2010-01-40`, |
| 248 | + `2010-01-01T24:01`, // 24:00:00 is actually valid |
| 249 | + `2010-01-40T24:01+00:00`, |
| 250 | + `2010-01-01T23:60`, |
| 251 | + `2010-01-01T23:59:60`, |
| 252 | + `2010-01-40T23:60+00:00`, |
| 253 | + `2010-01-40T23:59:60+00:00`, |
| 254 | + ])(`should return true for some valid ISO 8601: %s`, dateString => { |
| 255 | + expect(looksLikeADate(dateString)).toBeTruthy() |
| 256 | + }) |
| 257 | + |
| 258 | + it.each([ |
| 259 | + `2010-01-40T23:59:59.9999`, |
| 260 | + `2010-01-40T23:59:59.9999+00:00`, |
| 261 | + `2010-01-40T23:59:59,9999+00:00`, |
| 262 | + `2010-00-00T+00:00`, |
| 263 | + `2010-01-00T+00:00`, |
| 264 | + `2010-01-40T+00:00`, |
| 265 | + `2012-04-01T00:00:00-5:00`, // should be -05:00 |
| 266 | + `2012-04-01T00:00:00+1:00`, // should be +01:00 |
| 267 | + undefined, |
| 268 | + `undefined`, |
| 269 | + null, |
| 270 | + `null`, |
| 271 | + [], |
| 272 | + {}, |
| 273 | + ``, |
| 274 | + ` `, |
| 275 | + `2012-04-01T00:basketball`, |
| 276 | + ])(`should return false for invalid ISO 8601: %s`, dateString => { |
| 277 | + expect(looksLikeADate(dateString)).toBeFalsy() |
| 278 | + }) |
| 279 | +}) |
| 280 | + |
155 | 281 | const nodes = [
|
156 | 282 | {
|
157 | 283 | id: `id1`,
|
|
0 commit comments