UNPKG

@bjesuiter/serializr-helpers

Version:

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

161 lines (160 loc) 8.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const moment_1 = __importDefault(require("moment")); const test_iso_model_1 = require("../test-utils/test-iso-model"); const serializr_1 = require("serializr"); const test_iso_utc_model_1 = require("../test-utils/test-iso-utc-model"); const serializr_helpers_1 = require("./serializr-helpers"); const moment_serialization_schema_1 = require("./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 test_iso_model_1.TestIsoModel(moment_1.default(testIsoLocalString)); const js = serializr_1.serialize(testIsoModel); expect(js.testMoment).toEqual(testIsoLocalString); }); it('serialize utc -> local time', () => { const testIsoModel = new test_iso_model_1.TestIsoModel(moment_1.default(testIsoUtcString)); const js = serializr_1.serialize(testIsoModel); expect(js.testMoment).toEqual(testIsoLocalString); }); it('deserialize local -> local time', () => { const isoLocalMoment = moment_1.default(testIsoLocalString); const recovered = serializr_helpers_1.deserializeFromJson(test_iso_model_1.TestIsoModel, `{ "testMoment": "${testIsoLocalString}" }`); expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true); }); it('deserialize utc -> local time', () => { const isoLocalMoment = moment_1.default(testIsoLocalString); const recovered = serializr_helpers_1.deserializeFromJson(test_iso_model_1.TestIsoModel, `{ "testMoment": "${testIsoUtcString}" }`); expect(recovered.testMoment.isSame(isoLocalMoment)).toBe(true); }); }); describe('with TestIsoUtcModel', () => { it('serialize utc -> utc time', () => { const testIsoUtcModel = new test_iso_utc_model_1.TestIsoUtcModel(moment_1.default(testIsoUtcString)); const js = serializr_1.serialize(testIsoUtcModel); expect(js.testMoment).toEqual(testIsoUtcString); }); it('serialize local -> utc time', () => { const testIsoUtcModel = new test_iso_utc_model_1.TestIsoUtcModel(moment_1.default(testIsoLocalString)); const js = serializr_1.serialize(testIsoUtcModel); expect(js.testMoment).toEqual(testIsoUtcString); }); it('deserialize utc -> utc time', () => { const isoUtcMoment = moment_1.default(testIsoUtcString); const recovered = serializr_helpers_1.deserializeFromJson(test_iso_utc_model_1.TestIsoUtcModel, `{ "testMoment": "${testIsoUtcString}" }`); expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true); }); it('deserialize local -> utc time', () => { const isoUtcMoment = moment_1.default(testIsoUtcString); const recovered = serializr_helpers_1.deserializeFromJson(test_iso_utc_model_1.TestIsoUtcModel, `{ "testMoment": "${testIsoLocalString}" }`); expect(recovered.testMoment.isSame(isoUtcMoment)).toBe(true); }); }); }); describe('Test buildSerializer function', () => { it('should skip undefined moment in serialization', () => { const serializeFunction = moment_serialization_schema_1.buildSerializer(); const result = serializeFunction(undefined); expect(result).toEqual(serializr_1.SKIP); }); it('should serialize default value string: "null"', () => { const defaultString = 'null'; const serializeFunction = moment_serialization_schema_1.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_1.default(unixStartTimeString); const serializeFunction = moment_serialization_schema_1.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 = moment_serialization_schema_1.buildSerializer(undefined, true); const result = serializeFunction(moment_1.default(unixStartTimeInGermany)); expect(result).toEqual(unixStartTime); }); it('should serialize in custom format', () => { const unixStartTime = "1990-01-01T00:00:00.000Z"; const serializeFunction = moment_serialization_schema_1.buildSerializer(undefined, true, 'YYYY-MM-DD'); const result = serializeFunction(moment_1.default(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 = moment_serialization_schema_1.buildSerializer(undefined, false, 'YYYY-MM-DD'); const result = serializeFunction(moment_1.default(unixStartTime)); expect(result).toEqual('1990-01-01'); }); }); describe('Test buildDeserializer function', () => { describe('Test deserializationErrorPolicies', () => { it('should throw error', () => { const deserializeFunc = moment_serialization_schema_1.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 = moment_serialization_schema_1.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 = moment_serialization_schema_1.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_1.default("1990-01-01T00:00:00.000Z"); const deserializeFunc = moment_serialization_schema_1.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 = moment_serialization_schema_1.buildDeserializer('silent', false, moment_1.default('default-illegal-moment')); expect(() => deserializeFunc('some-illegal-moment', () => { })) .toThrowErrorMatchingSnapshot(); }); }); }); });