UNPKG

@segment/isodate-traverse

Version:

Traverse an object and convert all ISO strings into Dates.

75 lines (63 loc) 2.48 kB
'use strict'; var assert = require('proclaim'); var traverse = require('../lib'); var toISOString = require('@segment/to-iso-string'); describe('isodate-traverse', function() { it('should convert isostrings', function() { var obj = { date: '2013-09-04T00:57:26.434Z' }; traverse(obj); assert.strictEqual(toISOString(obj.date), '2013-09-04T00:57:26.434Z'); }); it('should not affect irrelevant object properties', function() { var obj = { a: '2013-12-13T23:35:50.000Z', b: 'foo', c: null }; traverse(obj); assert.strictEqual(obj.b, 'foo'); assert.strictEqual(obj.c, null); }); it('should not affect irrelevant array indexes', function() { var obj = [ '2013-12-13T23:35:50.000Z', 'foo', null ]; traverse(obj); assert.strictEqual(obj[1], 'foo'); assert.strictEqual(obj[2], null); }); it('should not convert numbers by default', function() { var obj = { number: '4000' }; traverse(obj); assert.strictEqual(obj.number, '4000'); }); it.skip('should convert numbers if strict mode is disabled', function() { var obj = { date: '2012' }; traverse(obj, false); assert.strictEqual(obj.date.getFullYear(), 2011); }); it('should iterate through arrays', function() { var arr = [{ date: '2013-09-04T00:57:26.434Z' }]; traverse(arr); assert.strictEqual(toISOString(arr[0].date), '2013-09-04T00:57:26.434Z'); }); it('should iterate through nested arrays', function() { var arr = [{ date: '2013-09-04T00:57:26.434Z', array: [{ date: '2013-09-04T00:57:26.434Z' }] }]; traverse(arr); assert.strictEqual(toISOString(arr[0].date), '2013-09-04T00:57:26.434Z'); assert.strictEqual(toISOString(arr[0].array[0].date), '2013-09-04T00:57:26.434Z'); }); it.skip('should propagate the "strict" parameter for both types of traversals', function() { var obj = { a: '2012', b: [{ c: '2012' }] }; traverse(obj, false); assert.strictEqual(obj.a.getFullYear(), 2011); assert.strictEqual(obj.b[0].c.getFullYear(), 2011); }); it('should do nothing for non-objects or non-arrays', function() { var date = new Date(); var ret = traverse(date, false); assert.strictEqual(ret, date); }); it('should not break for objects with a `length` property', function() { var obj = { date: '2013-09-04T00:57:26.434Z', length: 43 }; traverse(obj); assert.strictEqual(toISOString(obj.date), '2013-09-04T00:57:26.434Z'); }); });