Files
nostrlib/eventstore/test/count_test.go
2026-01-18 21:31:12 -03:00

152 lines
3.8 KiB
Go

package test
import (
"testing"
"fiatjaf.com/nostr"
"fiatjaf.com/nostr/eventstore"
"github.com/stretchr/testify/require"
)
func countTest(t *testing.T, db eventstore.Store) {
err := db.Init()
require.NoError(t, err)
pk3 := nostr.GetPublicKey(sk3)
pk4 := nostr.GetPublicKey(sk4)
// create test events for counting
events := []nostr.Event{
{
CreatedAt: 700,
Content: "count test event 1",
Kind: 1,
PubKey: pk3,
Tags: nostr.Tags{
{"t", "plec"},
{"g", "bbbbbb"},
{"r", "https://z.com"},
},
},
{
CreatedAt: 701,
Content: "count test event 2",
Kind: 1,
PubKey: pk3,
Tags: nostr.Tags{
{"t", "plec"},
{"g", "aaaaaa"},
{"r", "https://z.com"},
},
},
{
CreatedAt: 702,
Content: "count test event 3",
Kind: 2,
PubKey: pk4,
Tags: nostr.Tags{
{"t", "test"},
},
},
}
// sign and save events
for _, evt := range events {
if evt.PubKey == pk3 {
evt.Sign(sk3)
} else {
evt.Sign(sk4)
}
err = db.SaveEvent(evt)
require.NoError(t, err)
}
// test count all events
count, err := db.CountEvents(nostr.Filter{})
require.NoError(t, err)
require.Equal(t, uint32(3), count, "should count the 3 new events")
// test count by kind 1
count, err = db.CountEvents(nostr.Filter{
Kinds: []nostr.Kind{1},
})
require.NoError(t, err)
require.Equal(t, uint32(2), count, "should count 2 events of kind 1")
// test count by author
count, err = db.CountEvents(nostr.Filter{
Authors: []nostr.PubKey{pk3},
})
require.NoError(t, err)
require.Equal(t, uint32(2), count, "should count 2 events from sk3")
// test count by author and tag
count, err = db.CountEvents(nostr.Filter{
Authors: []nostr.PubKey{pk4},
Tags: nostr.TagMap{"t": []string{"test"}},
})
require.NoError(t, err)
require.Equal(t, uint32(1), count, "should count 1 event")
count, err = db.CountEvents(nostr.Filter{
Authors: []nostr.PubKey{pk4},
Tags: nostr.TagMap{"t": []string{"somethingelse"}},
})
require.NoError(t, err)
require.Equal(t, uint32(0), count, "should count 0 events")
count, err = db.CountEvents(nostr.Filter{
Authors: []nostr.PubKey{pk3},
Tags: nostr.TagMap{"t": []string{"test"}},
})
require.NoError(t, err)
require.Equal(t, uint32(0), count, "should count 0 events")
// test double tag
count, err = db.CountEvents(nostr.Filter{
Kinds: []nostr.Kind{1, 2},
Tags: nostr.TagMap{"t": []string{"plec"}, "g": []string{"aaaaaa"}},
})
require.NoError(t, err)
require.Equal(t, uint32(1), count, "should count 1 event")
count, err = db.CountEvents(nostr.Filter{
Tags: nostr.TagMap{"t": []string{"plec"}, "g": []string{"aaaaaa"}},
})
require.NoError(t, err)
require.Equal(t, uint32(1), count, "should count 1 event")
count, err = db.CountEvents(nostr.Filter{
Kinds: []nostr.Kind{1},
Tags: nostr.TagMap{"t": []string{"plec"}, "g": []string{"aaaaaa"}},
})
require.NoError(t, err)
require.Equal(t, uint32(1), count, "should count 1 event")
count, err = db.CountEvents(nostr.Filter{
Kinds: []nostr.Kind{1},
Tags: nostr.TagMap{"t": []string{"plec"}, "r": []string{"https://z.com"}},
})
require.NoError(t, err)
require.Equal(t, uint32(2), count, "should count 2 events")
count, err = db.CountEvents(nostr.Filter{
Tags: nostr.TagMap{"t": []string{"plec"}, "r": []string{"https://z.com"}},
})
require.NoError(t, err)
require.Equal(t, uint32(2), count, "should count 2 events")
count, err = db.CountEvents(nostr.Filter{
Kinds: []nostr.Kind{1, 2},
Tags: nostr.TagMap{"t": []string{"plec"}, "r": []string{"https://z.com"}},
})
require.NoError(t, err)
require.Equal(t, uint32(2), count, "should count 2 events")
count, err = db.CountEvents(nostr.Filter{
Tags: nostr.TagMap{"t": []string{"banana"}, "r": []string{"https://z.com"}},
})
require.NoError(t, err)
require.Equal(t, uint32(0), count, "should count 0 events")
}