loopback-datasource-juggler/test/date-string.test.js

86 lines
2.8 KiB
JavaScript

// Copyright IBM Corp. 2017,2019. All Rights Reserved.
// Node module: loopback-datasource-juggler
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
'use strict';
require('should');
const DateString = require('../lib/date-string');
const fmt = require('util').format;
const inspect = require('util').inspect;
const os = require('os');
describe('DateString', function() {
describe('constructor', function() {
it('should support a valid date string', function() {
const theDate = '2015-01-01';
const date = new DateString(theDate);
date.should.not.eql(null);
date.when.should.eql(theDate);
date.toString().should.eql(theDate);
});
testValidInput('should allow date with time', '2015-01-01 02:00:00');
testValidInput('should allow full UTC datetime', '2015-06-30T20:00:00.000Z');
testValidInput('should allow date with UTC offset', '2015-01-01 20:00:00 GMT-5');
testInvalidInput('should throw on non-date string', 'notadate', 'Invalid date');
testInvalidInput('should throw on incorrect date-like value',
'2015-01-01 25:00:00', 'Invalid date');
testInvalidInput('should throw on non-string input', 20150101,
'Input must be a string');
testInvalidInput('should throw on null input', null, 'Input must be a string');
it('should update internal date on set', function() {
const date = new DateString('2015-01-01');
date.when = '2016-01-01';
date.when.should.eql('2016-01-01');
const d = new Date('2016-01-01');
// The internal date representation should also be updated!
date._date.toString().should.eql(d.toString());
});
it('should accept DateString instance', function() {
const input = new DateString('2015-01-01');
const inst = new DateString(input);
inst.toString().should.equal('2015-01-01');
});
it('should return custom inspect output', function() {
const date = new DateString('2015-01-01');
const result = inspect(date);
result.should.not.eql(null);
result.should.eql(fmt('DateString ' + inspect({
when: date.when,
_date: date._date,
})));
});
it('should return JSON output', function() {
const date = new DateString('2015-01-01');
const result = date.toJSON();
result.should.eql(JSON.stringify({when: date.when}));
});
function testValidInput(msg, val) {
it(msg, function() {
const theDate = new DateString(val);
theDate.when.should.eql(val);
const d = new Date(val);
theDate._date.toString().should.eql(d.toString());
});
}
function testInvalidInput(msg, val, err) {
it(msg, () => {
const fn = () => {
const theDate = new DateString(val);
};
fn.should.throw(err);
});
}
});
});