diff --git a/nip42.test.ts b/nip42.test.ts index 53f8f9d..550cfe4 100644 --- a/nip42.test.ts +++ b/nip42.test.ts @@ -6,11 +6,11 @@ import { MockRelay } from './test-helpers.ts' test('auth flow', async () => { const mockRelay = new MockRelay() - const relay = await Relay.connect(mockRelay.getUrl()) + const relay = await Relay.connect(mockRelay.url) const auth = makeAuthEvent(relay.url, 'chachacha') expect(auth.tags).toHaveLength(2) - expect(auth.tags[0]).toEqual(['relay', mockRelay.getUrl()]) + expect(auth.tags[0]).toEqual(['relay', mockRelay.url]) expect(auth.tags[1]).toEqual(['challenge', 'chachacha']) expect(auth.kind).toEqual(22242) }) diff --git a/pool.test.ts b/pool.test.ts index b02ac65..85659b1 100644 --- a/pool.test.ts +++ b/pool.test.ts @@ -11,16 +11,11 @@ let relayURLs: string[] beforeEach(() => { pool = new SimplePool() mockRelays = Array.from({ length: 10 }, () => new MockRelay()) - relayURLs = mockRelays.map(mr => mr.getUrl()) + relayURLs = mockRelays.map(mr => mr.url) }) afterEach(() => { pool.close(relayURLs) - - for (let mr of mockRelays) { - mr.close() - mr.stop() - } }) test('removing duplicates when subscribing', async () => { @@ -102,7 +97,7 @@ test('query a bunch of events and cancel on eose', async () => { }) test('querySync()', async () => { - let authors = mockRelays.flatMap(mr => mr.getAuthors()) + let authors = mockRelays.flatMap(mr => mr.authors) let events = await pool.querySync(relayURLs, { authors: authors, @@ -118,7 +113,7 @@ test('querySync()', async () => { }) test('get()', async () => { - let ids = mockRelays.flatMap(mr => mr.getEventsIds()) + let ids = mockRelays.flatMap(mr => mr.ids) let event = await pool.get(relayURLs, { ids: [ids[0]], diff --git a/relay.test.ts b/relay.test.ts index c43dfbe..73b3ae3 100644 --- a/relay.test.ts +++ b/relay.test.ts @@ -7,52 +7,39 @@ import { MockRelay } from './test-helpers.ts' test('connectivity', async () => { const mockRelay = new MockRelay() - const relay = new Relay(mockRelay.getUrl()) + const relay = new Relay(mockRelay.url) await relay.connect() expect(relay.connected).toBeTrue() relay.close() - mockRelay.close() - mockRelay.stop() }) test('connectivity, with Relay.connect()', async () => { const mockRelay = new MockRelay() - - const relay = await Relay.connect(mockRelay.getUrl()) - + const relay = await Relay.connect(mockRelay.url) expect(relay.connected).toBeTrue() - relay.close() - mockRelay.close() - mockRelay.stop() }) test('querying', async done => { const mockRelay = new MockRelay() - const kind = 0 - - const relay = new Relay(mockRelay.getUrl()) + const relay = new Relay(mockRelay.url) await relay.connect() - relay.subscribe( [ { - authors: mockRelay.getAuthors(), + authors: mockRelay.authors, kinds: [kind], }, ], { onevent(event) { - expect(mockRelay.getAuthors()).toContain(event.pubkey) + expect(mockRelay.authors).toContain(event.pubkey) expect(event).toHaveProperty('kind', kind) relay.close() - mockRelay.close() - mockRelay.stop() - done() }, }, @@ -66,7 +53,7 @@ test('listening and publishing and closing', async done => { const pk = getPublicKey(sk) const kind = 23571 - const relay = new Relay(mockRelay.getUrl()) + const relay = new Relay(mockRelay.url) await relay.connect() let sub = relay.subscribe( @@ -86,10 +73,6 @@ test('listening and publishing and closing', async done => { }, onclose() { relay.close() - - mockRelay.close() - mockRelay.stop() - done() }, }, diff --git a/test-helpers.ts b/test-helpers.ts index 61fe877..4ba1f7d 100644 --- a/test-helpers.ts +++ b/test-helpers.ts @@ -16,30 +16,20 @@ export function buildEvent(params: Partial): Event { } } -/** - * A mock Relay class for testing purposes. - * This mock relay returns some events before eose and then will be ok with everything. - * @class - * @example - * const mockRelay = new MockRelay() - * const relay = new Relay(mockRelay.getUrl()) - * await relay.connect() - * // Do some testing - * relay.close() - * mockRelay.close() - * mockRelay.stop() - */ +let serial = 0 + export class MockRelay { - private _url: string private _server: Server - private _secretKeys: Uint8Array[] - private _preloadedEvents: Event[] + + public url: string + public secretKeys: Uint8Array[] + public preloadedEvents: Event[] constructor(url?: string | undefined) { - this._url = url ?? `wss://random.mock.relay/${Math.floor(Math.random() * 10000)}` - this._server = new Server(this._url) - this._secretKeys = [generateSecretKey(), generateSecretKey(), generateSecretKey(), generateSecretKey()] - this._preloadedEvents = this._secretKeys.map(sk => + serial++ + this.url = url ?? `wss://random.mock.relay/${serial}` + this.secretKeys = [generateSecretKey(), generateSecretKey(), generateSecretKey(), generateSecretKey()] + this.preloadedEvents = this.secretKeys.map(sk => finalizeEvent( { kind: 1, @@ -51,6 +41,7 @@ export class MockRelay { ), ) + this._server = new Server(this.url) this._server.on('connection', (conn: any) => { let subs: { [subId: string]: { conn: any; filters: Filter[] } } = {} @@ -63,7 +54,7 @@ export class MockRelay { let filters = data.slice(2) subs[subId] = { conn, filters } - this._preloadedEvents.forEach(event => { + this.preloadedEvents.forEach(event => { conn.send(JSON.stringify(['EVENT', subId, event])) }) @@ -71,7 +62,7 @@ export class MockRelay { const kinds = filter.kinds?.length ? filter.kinds : [1] kinds.forEach(kind => { - this._secretKeys.forEach(sk => { + this.secretKeys.forEach(sk => { const event = finalizeEvent( { kind, @@ -117,41 +108,11 @@ export class MockRelay { }) } - /** - * Get the URL of the mock relay. - * @returns The URL of the mock relay. - */ - getUrl() { - return this._url + get authors() { + return this.secretKeys.map(getPublicKey) } - /** - * Get the public keys of the authors of the events. - * @returns An array of public keys. - */ - getAuthors() { - return this._secretKeys.map(getPublicKey) - } - - /** - * Get the IDs of the events. - * @returns An array of event IDs. - */ - getEventsIds() { - return this._preloadedEvents.map(evt => evt.id) - } - - /** - * Close the mock relay server. - */ - close() { - this._server.close() - } - - /** - * Stop the mock relay server. - */ - stop() { - this._server.stop() + get ids() { + return this.preloadedEvents.map(evt => evt.id) } }