Skip to content

Commit bb76ed1

Browse files
github-managerclaude
andcommitted
test: update unit tests for NIP-01 compliance changes
Update event-repository specs to expect deterministic event ordering by event_id (asc) alongside event_created_at, matching the behavior added in 764ce00. Also update parameterized-replaceable-event-strategy spec to expect only the first dedup key value, matching the change in 7f56d4a. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 764ce00 commit bb76ed1

2 files changed

Lines changed: 31 additions & 31 deletions

File tree

test/unit/handlers/event-strategies/parameterized-replaceable-event-strategy.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ describe('ParameterizedReplaceableEventStrategy', () => {
7676
await strategy.execute(event)
7777

7878
expect(eventRepositoryUpsertStub).to.have.been.calledOnceWithExactly(event)
79-
expect(eventRepositoryUpsertStub.firstCall.firstArg).to.have.property(EventDeduplicationMetadataKey).and.deep.equal(['one', 'two'])
79+
expect(eventRepositoryUpsertStub.firstCall.firstArg).to.have.property(EventDeduplicationMetadataKey).and.deep.equal(['one'])
8080
})
8181

8282
it('broadcast event if event is created', async () => {

test/unit/repositories/event-repository.spec.ts

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ describe('EventRepository', () => {
5757

5858
const query = repository.findByFilters(filters).toString()
5959

60-
expect(query).to.equal('select * from "events" order by "event_created_at" asc limit 500')
60+
expect(query).to.equal('select * from "events" order by "event_created_at" asc, "event_id" asc limit 500')
6161
})
6262

6363
describe('authors', () => {
@@ -66,15 +66,15 @@ describe('EventRepository', () => {
6666

6767
const query = repository.findByFilters(filters).toString()
6868

69-
expect(query).to.equal('select * from "events" where (1 = 0) order by "event_created_at" asc limit 500')
69+
expect(query).to.equal('select * from "events" where (1 = 0) order by "event_created_at" asc, "event_id" asc limit 500')
7070
})
7171

7272
it('selects events by one author', () => {
7373
const filters = [{ authors: ['22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793'] }]
7474

7575
const query = repository.findByFilters(filters).toString()
7676

77-
expect(query).to.equal('select * from "events" where ("event_pubkey" in (X\'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793\')) order by "event_created_at" asc limit 500')
77+
expect(query).to.equal('select * from "events" where ("event_pubkey" in (X\'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793\')) order by "event_created_at" asc, "event_id" asc limit 500')
7878
})
7979

8080
it('selects events by two authors', () => {
@@ -89,7 +89,7 @@ describe('EventRepository', () => {
8989

9090
const query = repository.findByFilters(filters).toString()
9191

92-
expect(query).to.equal('select * from "events" where ("event_pubkey" in (X\'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793\', X\'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245\')) order by "event_created_at" asc limit 500')
92+
expect(query).to.equal('select * from "events" where ("event_pubkey" in (X\'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793\', X\'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245\')) order by "event_created_at" asc, "event_id" asc limit 500')
9393
})
9494

9595
it('selects events by one author prefix (even length)', () => {
@@ -103,7 +103,7 @@ describe('EventRepository', () => {
103103

104104
const query = repository.findByFilters(filters).toString()
105105

106-
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 3) = X\'22e804\') order by "event_created_at" asc limit 500')
106+
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 3) = X\'22e804\') order by "event_created_at" asc, "event_id" asc limit 500')
107107
})
108108

109109
it('selects events by one author prefix (odd length)', () => {
@@ -117,7 +117,7 @@ describe('EventRepository', () => {
117117

118118
const query = repository.findByFilters(filters).toString()
119119

120-
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 4) BETWEEN E\'\\\\x22e804f0\' AND E\'\\\\x22e804ff\') order by "event_created_at" asc limit 500')
120+
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 4) BETWEEN E\'\\\\x22e804f0\' AND E\'\\\\x22e804ff\') order by "event_created_at" asc, "event_id" asc limit 500')
121121
})
122122

123123
it('selects events by two author prefix (first even, second odd)', () => {
@@ -132,7 +132,7 @@ describe('EventRepository', () => {
132132

133133
const query = repository.findByFilters(filters).toString()
134134

135-
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 3) = X\'22e804\' or substring("event_pubkey" from 1 for 4) BETWEEN E\'\\\\x32e18270\' AND E\'\\\\x32e1827f\') order by "event_created_at" asc limit 500')
135+
expect(query).to.equal('select * from "events" where (substring("event_pubkey" from 1 for 3) = X\'22e804\' or substring("event_pubkey" from 1 for 4) BETWEEN E\'\\\\x32e18270\' AND E\'\\\\x32e1827f\') order by "event_created_at" asc, "event_id" asc limit 500')
136136
})
137137
})
138138

@@ -142,15 +142,15 @@ describe('EventRepository', () => {
142142

143143
const query = repository.findByFilters(filters).toString()
144144

145-
expect(query).to.equal('select * from "events" where (1 = 0) order by "event_created_at" asc limit 500')
145+
expect(query).to.equal('select * from "events" where (1 = 0) order by "event_created_at" asc, "event_id" asc limit 500')
146146
})
147147

148148
it('selects events by one id', () => {
149149
const filters = [{ ids: ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'] }]
150150

151151
const query = repository.findByFilters(filters).toString()
152152

153-
expect(query).to.equal('select * from "events" where ("event_id" in (X\'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\')) order by "event_created_at" asc limit 500')
153+
expect(query).to.equal('select * from "events" where ("event_id" in (X\'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\')) order by "event_created_at" asc, "event_id" asc limit 500')
154154
})
155155

156156
it('selects events by two ids', () => {
@@ -165,7 +165,7 @@ describe('EventRepository', () => {
165165

166166
const query = repository.findByFilters(filters).toString()
167167

168-
expect(query).to.equal('select * from "events" where ("event_id" in (X\'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\', X\'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\')) order by "event_created_at" asc limit 500')
168+
expect(query).to.equal('select * from "events" where ("event_id" in (X\'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\', X\'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\')) order by "event_created_at" asc, "event_id" asc limit 500')
169169
})
170170

171171
it('selects events by one id prefix (even length)', () => {
@@ -179,7 +179,7 @@ describe('EventRepository', () => {
179179

180180
const query = repository.findByFilters(filters).toString()
181181

182-
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 2) = X\'abcd\') order by "event_created_at" asc limit 500')
182+
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 2) = X\'abcd\') order by "event_created_at" asc, "event_id" asc limit 500')
183183
})
184184

185185
it('selects events by one id prefix (odd length)', () => {
@@ -193,7 +193,7 @@ describe('EventRepository', () => {
193193

194194
const query = repository.findByFilters(filters).toString()
195195

196-
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 2) BETWEEN E\'\\\\xabc0\' AND E\'\\\\xabcf\') order by "event_created_at" asc limit 500')
196+
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 2) BETWEEN E\'\\\\xabc0\' AND E\'\\\\xabcf\') order by "event_created_at" asc, "event_id" asc limit 500')
197197
})
198198

199199
it('selects events by two id prefix (first even, second odd)', () => {
@@ -208,7 +208,7 @@ describe('EventRepository', () => {
208208

209209
const query = repository.findByFilters(filters).toString()
210210

211-
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 3) = X\'abcdef\' or substring("event_id" from 1 for 2) BETWEEN E\'\\\\xabc0\' AND E\'\\\\xabcf\') order by "event_created_at" asc limit 500')
211+
expect(query).to.equal('select * from "events" where (substring("event_id" from 1 for 3) = X\'abcdef\' or substring("event_id" from 1 for 2) BETWEEN E\'\\\\xabc0\' AND E\'\\\\xabcf\') order by "event_created_at" asc, "event_id" asc limit 500')
212212
})
213213
})
214214

@@ -218,23 +218,23 @@ describe('EventRepository', () => {
218218

219219
const query = repository.findByFilters(filters).toString()
220220

221-
expect(query).to.equal('select * from "events" where 1 = 0 order by "event_created_at" asc limit 500')
221+
expect(query).to.equal('select * from "events" where 1 = 0 order by "event_created_at" asc, "event_id" asc limit 500')
222222
})
223223

224224
it('selects events by one kind', () => {
225225
const filters = [{ kinds: [1] }]
226226

227227
const query = repository.findByFilters(filters).toString()
228228

229-
expect(query).to.equal('select * from "events" where "event_kind" in (1) order by "event_created_at" asc limit 500')
229+
expect(query).to.equal('select * from "events" where "event_kind" in (1) order by "event_created_at" asc, "event_id" asc limit 500')
230230
})
231231

232232
it('selects events by two kinds', () => {
233233
const filters = [{ kinds: [1, 2] }]
234234

235235
const query = repository.findByFilters(filters).toString()
236236

237-
expect(query).to.equal('select * from "events" where "event_kind" in (1, 2) order by "event_created_at" asc limit 500')
237+
expect(query).to.equal('select * from "events" where "event_kind" in (1, 2) order by "event_created_at" asc, "event_id" asc limit 500')
238238
})
239239
})
240240

@@ -244,7 +244,7 @@ describe('EventRepository', () => {
244244

245245
const query = repository.findByFilters(filters).toString()
246246

247-
expect(query).to.equal('select * from "events" where "event_created_at" >= 1000 order by "event_created_at" asc limit 500')
247+
expect(query).to.equal('select * from "events" where "event_created_at" >= 1000 order by "event_created_at" asc, "event_id" asc limit 500')
248248
})
249249
})
250250

@@ -254,7 +254,7 @@ describe('EventRepository', () => {
254254

255255
const query = repository.findByFilters(filters).toString()
256256

257-
expect(query).to.equal('select * from "events" where "event_created_at" <= 1000 order by "event_created_at" asc limit 500')
257+
expect(query).to.equal('select * from "events" where "event_created_at" <= 1000 order by "event_created_at" asc, "event_id" asc limit 500')
258258
})
259259
})
260260

@@ -264,7 +264,7 @@ describe('EventRepository', () => {
264264

265265
const query = repository.findByFilters(filters).toString()
266266

267-
expect(query).to.equal('select * from "events" order by "event_created_at" DESC limit 1000')
267+
expect(query).to.equal('select * from "events" order by "event_created_at" DESC, "event_id" asc limit 1000')
268268
})
269269
})
270270

@@ -274,23 +274,23 @@ describe('EventRepository', () => {
274274

275275
const query = repository.findByFilters(filters).toString()
276276

277-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc limit 500')
277+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc, "event_id" asc limit 500')
278278
})
279279

280280
it('selects events by one #e tag', () => {
281281
const filters = [{ '#e': ['aaaaaa'] }]
282282

283283
const query = repository.findByFilters(filters).toString()
284284

285-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'e\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc limit 500')
285+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'e\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc, "event_id" asc limit 500')
286286
})
287287

288288
it('selects events by two #e tag', () => {
289289
const filters = [{ '#e': ['aaaaaa', 'bbbbbb'] }]
290290

291291
const query = repository.findByFilters(filters).toString()
292292

293-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'e\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'e\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc limit 500')
293+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'e\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'e\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc, "event_id" asc limit 500')
294294
})
295295
})
296296

@@ -300,23 +300,23 @@ describe('EventRepository', () => {
300300

301301
const query = repository.findByFilters(filters).toString()
302302

303-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc limit 500')
303+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc, "event_id" asc limit 500')
304304
})
305305

306306
it('selects events by one #p tag', () => {
307307
const filters = [{ '#p': ['aaaaaa'] }]
308308

309309
const query = repository.findByFilters(filters).toString()
310310

311-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'p\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc limit 500')
311+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'p\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc, "event_id" asc limit 500')
312312
})
313313

314314
it('selects events by two #p tag', () => {
315315
const filters = [{ '#p': ['aaaaaa', 'bbbbbb'] }]
316316

317317
const query = repository.findByFilters(filters).toString()
318318

319-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'p\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'p\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc limit 500')
319+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'p\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'p\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc, "event_id" asc limit 500')
320320
})
321321
})
322322

@@ -326,23 +326,23 @@ describe('EventRepository', () => {
326326

327327
const query = repository.findByFilters(filters).toString()
328328

329-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc limit 500')
329+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (1 = 0) order by "event_created_at" asc, "event_id" asc limit 500')
330330
})
331331

332332
it('selects events by one #r tag', () => {
333333
const filters = [{ '#r': ['aaaaaa'] }]
334334

335335
const query = repository.findByFilters(filters).toString()
336336

337-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'r\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc limit 500')
337+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'r\' AND event_tags.tag_value = \'aaaaaa\') order by "event_created_at" asc, "event_id" asc limit 500')
338338
})
339339

340340
it('selects events by two #r tag', () => {
341341
const filters = [{ '#r': ['aaaaaa', 'bbbbbb'] }]
342342

343343
const query = repository.findByFilters(filters).toString()
344344

345-
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'r\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'r\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc limit 500')
345+
expect(query).to.equal('select "events".* from "events" left join "event_tags" on "events"."event_id" = "event_tags"."event_id" where (event_tags.tag_name = \'r\' AND event_tags.tag_value = \'aaaaaa\' or event_tags.tag_name = \'r\' AND event_tags.tag_value = \'bbbbbb\') order by "event_created_at" asc, "event_id" asc limit 500')
346346
})
347347
})
348348
})
@@ -353,7 +353,7 @@ describe('EventRepository', () => {
353353

354354
const query = repository.findByFilters(filters).toString()
355355

356-
expect(query).to.equal('(select * from "events") union (select * from "events" order by "event_created_at" asc limit 500) order by "event_created_at" asc limit 500')
356+
expect(query).to.equal('(select * from "events") union (select * from "events" order by "event_created_at" asc, "event_id" asc limit 500) order by "event_created_at" asc, "event_id" asc limit 500')
357357
})
358358
})
359359

@@ -363,7 +363,7 @@ describe('EventRepository', () => {
363363

364364
const query = repository.findByFilters(filters).toString()
365365

366-
expect(query).to.equal('(select * from "events" where "event_kind" in (1)) union (select * from "events" where (substring("event_id" from 1 for 3) BETWEEN E\'\\\\xaaaaa0\' AND E\'\\\\xaaaaaf\') order by "event_created_at" asc limit 500) union (select * from "events" where (substring("event_pubkey" from 1 for 3) BETWEEN E\'\\\\xbbbbb0\' AND E\'\\\\xbbbbbf\') order by "event_created_at" asc limit 500) union (select * from "events" where "event_created_at" >= 1000 order by "event_created_at" asc limit 500) union (select * from "events" where "event_created_at" <= 1000 order by "event_created_at" asc limit 500) union (select * from "events" order by "event_created_at" DESC limit 1000) order by "event_created_at" asc limit 500')
366+
expect(query).to.equal('(select * from "events" where "event_kind" in (1)) union (select * from "events" where (substring("event_id" from 1 for 3) BETWEEN E\'\\\\xaaaaa0\' AND E\'\\\\xaaaaaf\') order by "event_created_at" asc, "event_id" asc limit 500) union (select * from "events" where (substring("event_pubkey" from 1 for 3) BETWEEN E\'\\\\xbbbbb0\' AND E\'\\\\xbbbbbf\') order by "event_created_at" asc, "event_id" asc limit 500) union (select * from "events" where "event_created_at" >= 1000 order by "event_created_at" asc, "event_id" asc limit 500) union (select * from "events" where "event_created_at" <= 1000 order by "event_created_at" asc, "event_id" asc limit 500) union (select * from "events" order by "event_created_at" DESC, "event_id" asc limit 1000) order by "event_created_at" asc, "event_id" asc limit 500')
367367
})
368368
})
369369
})

0 commit comments

Comments
 (0)