Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
"bech32": "2.0.0",
"debug": "4.3.4",
"dotenv": "16.0.3",
"accepts": "^1.3.8",
"express": "4.22.1",
"helmet": "6.0.1",
"joi": "17.7.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ describe('ParameterizedReplaceableEventStrategy', () => {
await strategy.execute(event)

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

it('broadcast event if event is created', async () => {
Expand Down
60 changes: 30 additions & 30 deletions test/unit/repositories/event-repository.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ describe('EventRepository', () => {

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

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

describe('authors', () => {
Expand All @@ -66,15 +66,15 @@ describe('EventRepository', () => {

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

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

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

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

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

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

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

expect(query).to.equal('select * from "events" where ("event_pubkey" in (X\'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793\', X\'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245\')) order by "event_created_at" asc limit 500')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})
})

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

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

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

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

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

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

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

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

expect(query).to.equal('select * from "events" where ("event_id" in (X\'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\', X\'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\')) order by "event_created_at" asc limit 500')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})
})

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

expect(query).to.equal('select * from "events" order by "event_created_at" DESC limit 1000')
expect(query).to.equal('select * from "events" order by "event_created_at" DESC, "event_id" asc limit 1000')
})
})

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

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

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')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})
})

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

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

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')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})
})

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

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

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')
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')
})

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

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

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')
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')
})

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

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

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')
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')
})
})
})
Expand All @@ -353,7 +353,7 @@ describe('EventRepository', () => {

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

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')
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')
})
})

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

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

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')
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')
})
})
})
Expand Down
Loading