UNPKG

@bjesuiter/serializr-helpers

Version:

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

156 lines (155 loc) 7.82 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 () { const testIsoLocalString = '2019-06-10T08:50:23.559+02:00'; const testIsoUtcString = '2019-06-10T06:50:23.559Z'; describe('MomentIsoSerialization', () => { describe('with TestIsoModel', () => { it('serialize local -> local time', () => { const testIsoModel = new TestIsoModel(moment(testIsoLocalString)); const js = serialize(testIsoModel); expect(js.testMoment).toEqual(testIsoLocalString); }); it('serialize utc -> local time', () => { const testIsoModel = new TestIsoModel(moment(testIsoUtcString)); const js = serialize(testIsoModel); expect(js.testMoment).toEqual(testIsoLocalString); }); it('deserialize local -> local time', () => { const isoLocalMoment = moment(testIsoLocalString); const recovered = deserializeFromJson(TestIsoModel, `{ "testMoment": "${testIsoLocalString}" }`); expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true); }); it('deserialize utc -> local time', () => { const isoLocalMoment = moment(testIsoLocalString); const recovered = deserializeFromJson(TestIsoModel, `{ "testMoment": "${testIsoUtcString}" }`); expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true); }); }); describe('with TestIsoUtcModel', () => { it('serialize utc -> utc time', () => { const testIsoUtcModel = new TestIsoUtcModel(moment(testIsoUtcString)); const js = serialize(testIsoUtcModel); expect(js.testMoment).toEqual(testIsoUtcString); }); it('serialize local -> utc time', () => { const testIsoUtcModel = new TestIsoUtcModel(moment(testIsoLocalString)); const js = serialize(testIsoUtcModel); expect(js.testMoment).toEqual(testIsoUtcString); }); it('deserialize utc -> utc time', () => { const isoUtcMoment = moment(testIsoUtcString); const recovered = deserializeFromJson(TestIsoUtcModel, `{ "testMoment": "${testIsoUtcString}" }`); expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true); }); it('deserialize local -> utc time', () => { const isoUtcMoment = moment(testIsoUtcString); const recovered = deserializeFromJson(TestIsoUtcModel, `{ "testMoment": "${testIsoLocalString}" }`); expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true); }); }); }); describe('Test buildSerializer function', () => { it('should skip undefined moment in serialization', () => { const serializeFunction = buildSerializer(); const result = serializeFunction(undefined); expect(result).toEqual(SKIP); }); it('should serialize default value string: "null"', () => { const defaultString = 'null'; const serializeFunction = buildSerializer(defaultString); const result = serializeFunction(undefined); expect(result).toEqual(defaultString); }); it('should serialize default value moment: moment("1990-01-01T00:00:00.000Z")', () => { const unixStartTimeString = "1990-01-01T00:00:00.000Z"; const defaultMoment = moment(unixStartTimeString); const serializeFunction = buildSerializer(defaultMoment, true); const result = serializeFunction(undefined); expect(result).toEqual(unixStartTimeString); }); it('should serialize in utc instead of local time', () => { const unixStartTimeInGermany = "1990-01-01T02:00:00.000+02:00"; const unixStartTime = "1990-01-01T00:00:00.000Z"; const serializeFunction = buildSerializer(undefined, true); const result = serializeFunction(moment(unixStartTimeInGermany)); expect(result).toEqual(unixStartTime); }); it('should serialize in custom format', () => { const unixStartTime = "1990-01-01T00:00:00.000Z"; const serializeFunction = buildSerializer(undefined, true, 'YYYY-MM-DD'); const result = serializeFunction(moment(unixStartTime)); expect(result).toEqual('1990-01-01'); }); it('should serialize in localtime with custom format', () => { const unixStartTime = "1990-01-01T00:00:00.000Z"; const serializeFunction = buildSerializer(undefined, false, 'YYYY-MM-DD'); const result = serializeFunction(moment(unixStartTime)); expect(result).toEqual('1990-01-01'); }); }); describe('Test buildDeserializer function', () => { describe('Test deserializationErrorPolicies', () => { it('should throw error', () => { const deserializeFunc = buildDeserializer('throw'); expect(() => deserializeFunc('some-illegal-moment', () => { })) .toThrowErrorMatchingSnapshot(); }); it('should log error', () => { const mockLogger = { error: jest.fn(), info: jest.fn(), debug: jest.fn(), log: jest.fn(), warn: jest.fn(), }; const deserializeFunc = buildDeserializer('log-error', false, undefined, mockLogger); deserializeFunc('some-illegal-moment', () => { }); expect(mockLogger.error).toHaveBeenCalledTimes(1); }); it('should log warning', () => { const mockLogger = { error: jest.fn(), info: jest.fn(), debug: jest.fn(), log: jest.fn(), warn: jest.fn(), }; const deserializeFunc = buildDeserializer('log-warn', false, undefined, mockLogger); deserializeFunc('some-illegal-moment', () => { }); expect(mockLogger.warn).toHaveBeenCalledTimes(1); }); }); describe('Test defaultDeserializationValue', () => { it('should deserialize to default value', () => { const defaultMoment = moment("1990-01-01T00:00:00.000Z"); const deserializeFunc = buildDeserializer('silent', true, defaultMoment); const result = deserializeFunc('some-illegal-moment', () => { }); expect(result.isValid()).toBe(true); expect(result.isSame(defaultMoment)).toBe(true); }); it('should throw error when default deserialization value is invalid', () => { const deserializeFunc = buildDeserializer('silent', false, moment('default-illegal-moment')); expect(() => deserializeFunc('some-illegal-moment', () => { })) .toThrowErrorMatchingSnapshot(); }); }); }); });