eventstore: a COUNT test and fix many bugs.
This commit is contained in:
151
eventstore/test/count_test.go
Normal file
151
eventstore/test/count_test.go
Normal file
@@ -0,0 +1,151 @@
|
||||
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")
|
||||
}
|
||||
@@ -32,6 +32,7 @@ var tests = []struct {
|
||||
{"second", runSecondTestOn},
|
||||
{"manyauthors", manyAuthorsTest},
|
||||
{"unbalanced", unbalancedTest},
|
||||
{"count", countTest},
|
||||
}
|
||||
|
||||
func TestSliceStore(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user