Skip to content

Commit 035f8b2

Browse files
committed
test(integration): improve NIP-62 assertions
1 parent 6d12777 commit 035f8b2

2 files changed

Lines changed: 19 additions & 41 deletions

File tree

test/integration/features/nip-62/nip-62.feature.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ Then(
2525
async function (name: string, count: string, author: string) {
2626
const ws = this.parameters.clients[name] as WebSocket
2727
const subscription = this.parameters.subscriptions[name][this.parameters.subscriptions[name].length - 1]
28-
const events = await waitForEventCount(ws, subscription.name, Number(count), true)
29-
30-
expect(events.length).to.equal(Number(count))
31-
expect(events[0].kind).to.equal(EventKinds.REQUEST_TO_VANISH)
32-
expect(events[0].pubkey).to.equal(this.parameters.identities[author].pubkey)
28+
const expectedCount = Number(count)
29+
const expectedPubkey = this.parameters.identities[author].pubkey
30+
const events = await waitForEventCount(ws, subscription.name, expectedCount, true)
31+
32+
expect(events.length).to.equal(expectedCount)
33+
for (const event of events) {
34+
expect(event.kind).to.equal(EventKinds.REQUEST_TO_VANISH)
35+
expect(event.pubkey).to.equal(expectedPubkey)
36+
}
3337
},
3438
)
3539

@@ -39,6 +43,10 @@ Then(
3943
const ws = this.parameters.clients[name] as WebSocket
4044
const event = this.parameters.events[name].findLast((event: Event) => event[isDraft])
4145

46+
if (!event) {
47+
throw new Error(`No draft event found for ${name}`)
48+
}
49+
4250
delete event[isDraft]
4351

4452
const command = await sendEvent(ws, event, false)

test/integration/features/shared.ts

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { After, AfterAll, Before, BeforeAll, Given, Then, When, World, setDefaultTimeout } from '@cucumber/cucumber'
1+
import { After, AfterAll, Before, BeforeAll, Given, Then, When, World } from '@cucumber/cucumber'
22
import { assocPath, pipe } from 'ramda'
33
import { fromEvent, map, Observable, ReplaySubject, Subject, takeUntil } from 'rxjs'
44
import WebSocket, { MessageEvent } from 'ws'
@@ -15,32 +15,19 @@ import { workerFactory } from '../../../src/factories/worker-factory'
1515
export const isDraft = Symbol('draft')
1616

1717
let worker: AppWorker
18+
1819
let dbClient: DatabaseClient
1920
let rrDbClient: DatabaseClient
2021

2122
export const streams = new WeakMap<WebSocket, Observable<unknown>>()
2223

23-
setDefaultTimeout(30000)
24-
25-
BeforeAll(async function () {
24+
BeforeAll({ timeout: 1000 }, async function () {
2625
process.env.RELAY_PORT = '18808'
2726
process.env.SECRET = Math.random().toString().repeat(6)
28-
29-
process.env.DB_HOST ??= 'localhost'
30-
process.env.DB_PORT ??= '5432'
31-
process.env.DB_USER ??= 'postgres'
32-
process.env.DB_PASSWORD ??= 'postgres'
33-
process.env.DB_NAME ??= 'nostr_ts_relay_test'
34-
process.env.DB_MIN_POOL_SIZE ??= '1'
35-
process.env.DB_MAX_POOL_SIZE ??= '2'
36-
process.env.DB_ACQUIRE_CONNECTION_TIMEOUT ??= '10000'
37-
3827
dbClient = getMasterDbClient()
3928
rrDbClient = getReadReplicaDbClient()
40-
4129
await dbClient.raw('SELECT 1=1')
4230
await rrDbClient.raw('SELECT 1=1')
43-
4431
Sinon.stub(SettingsStatic, 'watchSettings')
4532
const settings = SettingsStatic.createSettings()
4633

@@ -58,16 +45,9 @@ BeforeAll(async function () {
5845
})
5946

6047
AfterAll({ timeout: 30000 }, async function () {
61-
const clients = [...new Set([dbClient, rrDbClient].filter(Boolean))]
62-
6348
await new Promise<void>((resolve) => {
64-
if (!worker) {
65-
void Promise.all(clients.map((client) => client.destroy())).then(() => resolve())
66-
return
67-
}
68-
6949
worker.close(async () => {
70-
await Promise.all(clients.map((client) => client.destroy()))
50+
await Promise.all([dbClient.destroy(), rrDbClient.destroy()])
7151
resolve()
7252
})
7353
})
@@ -83,13 +63,11 @@ Before(function () {
8363
After(async function () {
8464
this.parameters.events = {}
8565
this.parameters.subscriptions = {}
86-
8766
for (const ws of Object.values(this.parameters.clients as Record<string, WebSocket>)) {
8867
if (ws && ws.readyState === WebSocket.OPEN) {
8968
ws.close()
9069
}
9170
}
92-
9371
this.parameters.clients = {}
9472

9573
await dbClient('events')
@@ -100,22 +78,20 @@ After(async function () {
10078
),
10179
)
10280
.delete()
103-
10481
this.parameters.identities = {}
10582
})
10683

10784
Given(/someone called (\w+)/, async function (name: string) {
10885
const connection = await connect(name)
109-
11086
this.parameters.identities[name] = this.parameters.identities[name] ?? createIdentity(name)
11187
this.parameters.clients[name] = connection
11288
this.parameters.subscriptions[name] = []
11389
this.parameters.events[name] = []
114-
11590
const close = new Subject()
11691
connection.once('close', close.next.bind(close))
11792

11893
const projection = (raw: MessageEvent) => JSON.parse(raw.data.toString('utf8'))
94+
11995
const replaySubject = new ReplaySubject(2, 1000)
12096

12197
fromEvent(connection, 'message')
@@ -128,12 +104,7 @@ Given(/someone called (\w+)/, async function (name: string) {
128104
When(/(\w+) subscribes to author (\w+)$/, async function (this: World<Record<string, any>>, from: string, to: string) {
129105
const ws = this.parameters.clients[from] as WebSocket
130106
const pubkey = this.parameters.identities[to].pubkey
131-
132-
const subscription = {
133-
name: `test-${Math.random()}`,
134-
filters: [{ authors: [pubkey] }],
135-
}
136-
107+
const subscription = { name: `test-${Math.random()}`, filters: [{ authors: [pubkey] }] }
137108
this.parameters.subscriptions[from].push(subscription)
138109

139110
await createSubscription(ws, subscription.name, subscription.filters)
@@ -142,7 +113,6 @@ When(/(\w+) subscribes to author (\w+)$/, async function (this: World<Record<str
142113
Then(/(\w+) unsubscribes from author \w+/, async function (from: string) {
143114
const ws = this.parameters.clients[from] as WebSocket
144115
const subscription = this.parameters.subscriptions[from].pop()
145-
146116
return new Promise<void>((resolve, reject) => {
147117
ws.send(JSON.stringify(['CLOSE', subscription.name]), (err) => (err ? reject(err) : resolve()))
148118
})

0 commit comments

Comments
 (0)