import { Serializer } from './serializer' import { ClassConstructor } from '../util' import * as faker from 'faker' import { Message } from '@node-ts/bus-messages' import { DefaultHandlerRegistry } from '../handler' import { MessageSerializer } from './message-serializer' class DummyMessage { $name = 'bluh' $version = 1 value: string constructor(s: string) { this.value = s } } class ToxicSerializer implements Serializer { serialize(obj: ObjectType): string { return (obj as Message).$name } deserialize( serialized: string, classType: ClassConstructor ): ObjectType { return new classType(serialized) } toPlain(_: T): object { return {} } toClass(_: object, __: ClassConstructor): T { return {} as T } } describe('MessageSerializer', () => { const serializer = new ToxicSerializer() const messageSerializer = new MessageSerializer( serializer, new DefaultHandlerRegistry() ) it('should use underlying serializer to serialize', () => { const message = new DummyMessage('a') const result = messageSerializer.serialize(message) expect(result).toBe(message.$name) }) it('should use underlying deserializer to deserialize', () => { const msg = new DummyMessage(faker.random.words()) const raw = JSON.stringify(msg) const result = messageSerializer.deserialize(raw) expect(result.value).toBe(msg.value) }) })