UNPKG

@bjesuiter/serializr-helpers

Version:

Provides some helper functions and serialization PropertySchemas for mobxjs/serializr - library

148 lines (147 loc) 7.99 kB
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(); }); }); }); });