11import { 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'
512import { MessageType } from '../../../src/@types/messages'
613
714describe ( '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