nostream/test/unit/factories/message-handler-factory.spec.ts
Ricardo Arturo Cabral Mejía f9c53eeeb8 feat: massive update
Signed-off-by: Ricardo Arturo Cabral Mejía <me@ricardocabral.io>
2023-02-02 00:19:26 -05:00

79 lines
2.4 KiB
TypeScript

import { expect } from 'chai'
import { IEventRepository, IUserRepository } from '../../../src/@types/repositories'
import { IncomingMessage, MessageType } from '../../../src/@types/messages'
import { DelegatedEventMessageHandler } from '../../../src/handlers/delegated-event-message-handler'
import { Event } from '../../../src/@types/event'
import { EventMessageHandler } from '../../../src/handlers/event-message-handler'
import { EventTags } from '../../../src/constants/base'
import { IWebSocketAdapter } from '../../../src/@types/adapters'
import { messageHandlerFactory } from '../../../src/factories/message-handler-factory'
import { SubscribeMessageHandler } from '../../../src/handlers/subscribe-message-handler'
import { UnsubscribeMessageHandler } from '../../../src/handlers/unsubscribe-message-handler'
describe('messageHandlerFactory', () => {
let event: Event
let eventRepository: IEventRepository
let userRepository: IUserRepository
let message: IncomingMessage
let adapter: IWebSocketAdapter
let factory
beforeEach(() => {
eventRepository = {} as any
userRepository = {} as any
adapter = {} as any
event = {
tags: [],
} as any
factory = messageHandlerFactory(eventRepository, userRepository)
})
it('returns EventMessageHandler when given an EVENT message', () => {
message = [
MessageType.EVENT,
event,
]
expect(factory([message, adapter])).to.be.an.instanceOf(EventMessageHandler)
})
it('returns DelegatedEventMessageHandler when given an EVENT message with delegated event', () => {
event.tags = [
[EventTags.Delegation, '', '', ''],
]
message = [
MessageType.EVENT,
event,
]
expect(factory([message, adapter])).to.be.an.instanceOf(DelegatedEventMessageHandler)
})
it('returns SubscribeMessageHandler when given a REQ message', () => {
message = [
MessageType.REQ,
'',
{},
] as any
expect(factory([message, adapter])).to.be.an.instanceOf(SubscribeMessageHandler)
})
it('returns UnsubscribeMessageHandler when given a REQ message', () => {
message = [
MessageType.CLOSE,
'',
]
expect(factory([message, adapter])).to.be.an.instanceOf(UnsubscribeMessageHandler)
})
it('throws when given an invalid message', () => {
message = [] as any
expect(() => factory([message, adapter])).to.throw(Error, 'Unknown message type: undefined')
})
})