Skip to content

Commit 28022cb

Browse files
test: add missing unit tests for createCommandResult, createSubscriptionMessage and createRelayedEventMessage (#470)
These three message factory functions in src/utils/messages.ts were exported and used across the relay but had no tests in the spec file. - createCommandResult (NIP-20): covers success=true with empty reason and success=false with a rejection reason string - createSubscriptionMessage (NIP-01 REQ): covers single-filter and multi-filter cases, verifying the spread into index positions 2+ - createRelayedEventMessage: covers both code paths — the branch that returns a 2-element tuple when no secret is passed, and the branch that appends the secret as a third element Co-authored-by: Ricardo Cabral <me@ricardocabral.io>
1 parent 3f278f6 commit 28022cb

1 file changed

Lines changed: 80 additions & 2 deletions

File tree

test/unit/utils/messages.spec.ts

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import { expect } from 'chai'
22

3-
import { createEndOfStoredEventsNoticeMessage, createNoticeMessage, createOutgoingEventMessage } from '../../../src/utils/messages'
4-
import { Event } from '../../../src/@types/event'
3+
import {
4+
createCommandResult,
5+
createEndOfStoredEventsNoticeMessage,
6+
createNoticeMessage,
7+
createOutgoingEventMessage,
8+
createRelayedEventMessage,
9+
createSubscriptionMessage,
10+
} from '../../../src/utils/messages'
11+
import { Event, RelayedEvent } from '../../../src/@types/event'
512
import { MessageType } from '../../../src/@types/messages'
613

714
describe('createNotice', () => {
@@ -25,3 +32,74 @@ describe('createEndOfStoredEventsNoticeMessage', () => {
2532
})
2633
})
2734

35+
// NIP-20: Command Results
36+
describe('createCommandResult', () => {
37+
it('returns an OK message with success=true and a reason', () => {
38+
const eventId = 'b1601d26958e6508b7b9df0af609c652346c09392b6534d93aead9819a51b4ef'
39+
expect(createCommandResult(eventId, true, '')).to.deep.equal([
40+
MessageType.OK,
41+
eventId,
42+
true,
43+
'',
44+
])
45+
})
46+
47+
it('returns an OK message with success=false and a rejection reason', () => {
48+
const eventId = 'b1601d26958e6508b7b9df0af609c652346c09392b6534d93aead9819a51b4ef'
49+
expect(createCommandResult(eventId, false, 'blocked: content not allowed')).to.deep.equal([
50+
MessageType.OK,
51+
eventId,
52+
false,
53+
'blocked: content not allowed',
54+
])
55+
})
56+
})
57+
58+
// NIP-01: Subscription messages (REQ)
59+
describe('createSubscriptionMessage', () => {
60+
it('returns a REQ message with a single filter', () => {
61+
const result = createSubscriptionMessage('sub1', [{ kinds: [1] }])
62+
expect(result[0]).to.equal(MessageType.REQ)
63+
expect(result[1]).to.equal('sub1')
64+
expect(result[2]).to.deep.equal({ kinds: [1] })
65+
})
66+
67+
it('returns a REQ message with multiple filters', () => {
68+
const filters = [{ kinds: [1] }, { kinds: [0], authors: ['somepubkey'] }]
69+
const result = createSubscriptionMessage('sub2', filters)
70+
expect(result[0]).to.equal(MessageType.REQ)
71+
expect(result[1]).to.equal('sub2')
72+
expect(result[2]).to.deep.equal(filters[0])
73+
expect(result[3]).to.deep.equal(filters[1])
74+
})
75+
})
76+
77+
// Relayed event messages (used for event mirroring between relays)
78+
describe('createRelayedEventMessage', () => {
79+
let event: RelayedEvent
80+
81+
beforeEach(() => {
82+
event = {
83+
id: 'b1601d26958e6508b7b9df0af609c652346c09392b6534d93aead9819a51b4ef',
84+
kind: 1,
85+
pubkey: '22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793',
86+
created_at: 1648339664,
87+
tags: [],
88+
content: 'hello',
89+
sig: 'abc123',
90+
} as any
91+
})
92+
93+
it('returns an EVENT message without secret when no secret is provided', () => {
94+
expect(createRelayedEventMessage(event)).to.deep.equal([MessageType.EVENT, event])
95+
})
96+
97+
it('returns an EVENT message with secret appended when a secret is provided', () => {
98+
expect(createRelayedEventMessage(event, 'my-secret')).to.deep.equal([
99+
MessageType.EVENT,
100+
event,
101+
'my-secret',
102+
])
103+
})
104+
})
105+

0 commit comments

Comments
 (0)