@bjesuiter/serializr-helpers
Version:
Provides some helper functions and serialization PropertySchemas for mobxjs/serializr - library
148 lines (147 loc) • 7.99 kB
JavaScript
import moment from "moment";
import { TestIsoModel } from "../test-utils/test-iso-model";
import { serialize, SKIP } from "serializr";
import { TestIsoUtcModel } from "../test-utils/test-iso-utc-model";
import { deserializeFromJson } from "./serializr-helpers";
import { buildDeserializer, buildSerializer } from "./moment-serialization-schema";
describe('MomentSerializationScheme', function () {
var testIsoLocalString = '2019-06-10T08:50:23.559+02:00';
var testIsoUtcString = '2019-06-10T06:50:23.559Z';
describe('MomentIsoSerialization', function () {
describe('with TestIsoModel', function () {
it('serialize local -> local time', function () {
var testIsoModel = new TestIsoModel(moment(testIsoLocalString));
var js = serialize(testIsoModel);
expect(js.testMoment).toEqual(testIsoLocalString);
});
it('serialize utc -> local time', function () {
var testIsoModel = new TestIsoModel(moment(testIsoUtcString));
var js = serialize(testIsoModel);
expect(js.testMoment).toEqual(testIsoLocalString);
});
it('deserialize local -> local time', function () {
var isoLocalMoment = moment(testIsoLocalString);
var recovered = deserializeFromJson(TestIsoModel, "{\n \"testMoment\": \"" + testIsoLocalString + "\"\n }");
expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true);
});
it('deserialize utc -> local time', function () {
var isoLocalMoment = moment(testIsoLocalString);
var recovered = deserializeFromJson(TestIsoModel, "{\n \"testMoment\": \"" + testIsoUtcString + "\"\n }");
expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true);
});
});
describe('with TestIsoUtcModel', function () {
it('serialize utc -> utc time', function () {
var testIsoUtcModel = new TestIsoUtcModel(moment(testIsoUtcString));
var js = serialize(testIsoUtcModel);
expect(js.testMoment).toEqual(testIsoUtcString);
});
it('serialize local -> utc time', function () {
var testIsoUtcModel = new TestIsoUtcModel(moment(testIsoLocalString));
var js = serialize(testIsoUtcModel);
expect(js.testMoment).toEqual(testIsoUtcString);
});
it('deserialize utc -> utc time', function () {
var isoUtcMoment = moment(testIsoUtcString);
var recovered = deserializeFromJson(TestIsoUtcModel, "{\n \"testMoment\": \"" + testIsoUtcString + "\"\n }");
expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true);
});
it('deserialize local -> utc time', function () {
var isoUtcMoment = moment(testIsoUtcString);
var recovered = deserializeFromJson(TestIsoUtcModel, "{\n \"testMoment\": \"" + testIsoLocalString + "\"\n }");
expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true);
});
});
});
describe('Test buildSerializer function', function () {
it('should skip undefined moment in serialization', function () {
var serializeFunction = buildSerializer();
var result = serializeFunction(undefined);
expect(result).toEqual(SKIP);
});
it('should serialize default value string: "null"', function () {
var defaultString = 'null';
var serializeFunction = buildSerializer(defaultString);
var result = serializeFunction(undefined);
expect(result).toEqual(defaultString);
});
it('should serialize default value moment: moment("1990-01-01T00:00:00.000Z")', function () {
var unixStartTimeString = "1990-01-01T00:00:00.000Z";
var defaultMoment = moment(unixStartTimeString);
var serializeFunction = buildSerializer(defaultMoment, true);
var result = serializeFunction(undefined);
expect(result).toEqual(unixStartTimeString);
});
it('should serialize in utc instead of local time', function () {
var unixStartTimeInGermany = "1990-01-01T02:00:00.000+02:00";
var unixStartTime = "1990-01-01T00:00:00.000Z";
var serializeFunction = buildSerializer(undefined, true);
var result = serializeFunction(moment(unixStartTimeInGermany));
expect(result).toEqual(unixStartTime);
});
it('should serialize in custom format', function () {
var unixStartTime = "1990-01-01T00:00:00.000Z";
var serializeFunction = buildSerializer(undefined, true, 'YYYY-MM-DD');
var result = serializeFunction(moment(unixStartTime));
expect(result).toEqual('1990-01-01');
});
it('should serialize in localtime with custom format', function () {
var unixStartTime = "1990-01-01T00:00:00.000Z";
var serializeFunction = buildSerializer(undefined, false, 'YYYY-MM-DD');
var result = serializeFunction(moment(unixStartTime));
expect(result).toEqual('1990-01-01');
});
});
describe('Test buildDeserializer function', function () {
describe('Test deserializationErrorPolicies', function () {
it('should throw error', function () {
var deserializeFunc = buildDeserializer('throw');
expect(function () { return deserializeFunc('some-illegal-moment', function () {
}); })
.toThrowErrorMatchingSnapshot();
});
it('should log error', function () {
var mockLogger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
log: jest.fn(),
warn: jest.fn(),
};
var deserializeFunc = buildDeserializer('log-error', false, undefined, mockLogger);
deserializeFunc('some-illegal-moment', function () {
});
expect(mockLogger.error).toHaveBeenCalledTimes(1);
});
it('should log warning', function () {
var mockLogger = {
error: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
log: jest.fn(),
warn: jest.fn(),
};
var deserializeFunc = buildDeserializer('log-warn', false, undefined, mockLogger);
deserializeFunc('some-illegal-moment', function () {
});
expect(mockLogger.warn).toHaveBeenCalledTimes(1);
});
});
describe('Test defaultDeserializationValue', function () {
it('should deserialize to default value', function () {
var defaultMoment = moment("1990-01-01T00:00:00.000Z");
var deserializeFunc = buildDeserializer('silent', true, defaultMoment);
var result = deserializeFunc('some-illegal-moment', function () {
});
expect(result.isValid()).toBe(true);
expect(result.isSame(defaultMoment)).toBe(true);
});
it('should throw error when default deserialization value is invalid', function () {
var deserializeFunc = buildDeserializer('silent', false, moment('default-illegal-moment'));
expect(function () { return deserializeFunc('some-illegal-moment', function () {
}); })
.toThrowErrorMatchingSnapshot();
});
});
});
});