62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package badger
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"fiatjaf.com/nostr"
|
|
"fiatjaf.com/nostr/eventstore"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBasicStoreAndQuery(t *testing.T) {
|
|
// create a temporary directory for the test database
|
|
dir, err := os.MkdirTemp("", "badger-test-*")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(dir)
|
|
|
|
// initialize the store
|
|
db := &BadgerBackend{Path: dir}
|
|
err = db.Init()
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
// create a test event
|
|
evt := nostr.Event{
|
|
Content: "hello world",
|
|
CreatedAt: 1000,
|
|
Kind: 1,
|
|
Tags: nostr.Tags{},
|
|
}
|
|
err = evt.Sign(nostr.Generate())
|
|
require.NoError(t, err)
|
|
|
|
// save the event
|
|
err = db.SaveEvent(evt)
|
|
require.NoError(t, err)
|
|
|
|
// try to save it again, should fail with ErrDupEvent
|
|
err = db.SaveEvent(evt)
|
|
require.Error(t, err)
|
|
require.Equal(t, eventstore.ErrDupEvent, err)
|
|
|
|
// query the event by its ID
|
|
filter := nostr.Filter{
|
|
IDs: []nostr.ID{evt.ID},
|
|
}
|
|
|
|
// collect results
|
|
results := make([]nostr.Event, 0)
|
|
for event := range db.QueryEvents(filter, 500) {
|
|
results = append(results, event)
|
|
}
|
|
|
|
// verify we got exactly one event and it matches
|
|
require.Len(t, results, 1)
|
|
require.Equal(t, evt.ID, results[0].ID)
|
|
require.Equal(t, evt.Content, results[0].Content)
|
|
require.Equal(t, evt.CreatedAt, results[0].CreatedAt)
|
|
require.Equal(t, evt.Kind, results[0].Kind)
|
|
require.Equal(t, evt.PubKey, results[0].PubKey)
|
|
}
|