UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

145 lines 4.9 kB
/** * @module Serde */ import { beforeEach } from "vitest"; /** * The `flexibleSerdeAdapterTestSuite` function simplifies the process of testing your custom implementation of {@link IFlexibleSerdeAdapter | `IFlexibleSerdeAdapter`} with `vitest`. * * IMPORT_PATH: `"@daiso-tech/core/serde/test-utilities"` * @group TestUtilities * @example * ```ts * import { describe, expect, test } from "vitest"; * import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/adapters"; * import { flexibleSerdeAdapterTestSuite } from "@daiso-tech/core/serde/test-utilities"; * * describe("class: SuperJsonSerdeAdapter", () => { * flexibleSerdeAdapterTestSuite({ * createAdapter: () => new SuperJsonSerdeAdapter(), * expect, * test, * }); * }); * ``` */ export function flexibleSerdeAdapterTestSuite(settings) { const { expect, test, createAdapter } = settings; let flexibleSerdeAdapter; class User { name; age; static deserialize(serializedUser) { return new User(serializedUser.name, serializedUser.age); } constructor(name, age) { this.name = name; this.age = age; } serialize() { return { name: this.name, age: this.age, }; } getInfo() { return `name: ${this.name}, age: ${this.age.toString()}`; } } const array_ = [0, -1, 1, -1.5, 1.5, true, false, "str"]; const object_ = { a: 0, b: -1, c: 1, d: -1.5, e: 1.5, i: "str", j: true, l: false, }; beforeEach(() => { flexibleSerdeAdapter = createAdapter(); }); test("Should work with positive integer", () => { const value = 1; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with negative integer", () => { const value = -1; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with positive decimal", () => { const value = 1.5; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with negative decimal", () => { const value = -1.5; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with true", () => { const value = true; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with false", () => { const value = false; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with string", () => { const value = "str"; expect(flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value))).toBe(value); }); test("Should work with array of number, boolean, string, object, array", () => { const value = [ ...array_, array_, { ...object_, object_, array: [ ...array_, array_, { ...object_, object_, array_, }, ], }, ]; const deserializedValue = flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value)); expect(deserializedValue).toEqual(value); }); test("Should work with object of number, boolean, string, array, object", () => { const value = { ...object_, object_, array: [ ...array_, array_, { ...object_, object_, array_, }, ], }; const deserializedValue = flexibleSerdeAdapter.deserialize(flexibleSerdeAdapter.serialize(value)); expect(deserializedValue).toEqual(value); }); test("Should work with custom ISerdeTransformerAdapter", () => { const transformer = { name: User.name, isApplicable(value) { return (value instanceof User && value.constructor.name === User.name); }, deserialize(serializedValue) { return User.deserialize(serializedValue); }, serialize(deserializedValue) { return deserializedValue.serialize(); }, }; flexibleSerdeAdapter.registerCustom(transformer); }); } //# sourceMappingURL=flexible-serde-adapter.test-suite.js.map