mirror of
https://github.com/matrix-org/dendrite
synced 2024-12-17 16:43:25 +00:00
ad07b169b8
This PR changes a few things: - It pulls out the creation of several NIDs from the `StoreEvent` function to make the functions more reusable - Uses more caching when using those NIDs to avoid DB round trips
67 lines
2.2 KiB
Go
67 lines
2.2 KiB
Go
package helpers
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/matrix-org/dendrite/roomserver/types"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/matrix-org/dendrite/setup/base"
|
|
|
|
"github.com/matrix-org/dendrite/test"
|
|
"github.com/matrix-org/dendrite/test/testrig"
|
|
|
|
"github.com/matrix-org/dendrite/roomserver/storage"
|
|
)
|
|
|
|
func mustCreateDatabase(t *testing.T, dbType test.DBType) (*base.BaseDendrite, storage.Database, func()) {
|
|
base, close := testrig.CreateBaseDendrite(t, dbType)
|
|
db, err := storage.Open(base, &base.Cfg.RoomServer.Database, base.Caches)
|
|
if err != nil {
|
|
t.Fatalf("failed to create Database: %v", err)
|
|
}
|
|
return base, db, close
|
|
}
|
|
|
|
func TestIsInvitePendingWithoutNID(t *testing.T) {
|
|
|
|
alice := test.NewUser(t)
|
|
bob := test.NewUser(t)
|
|
room := test.NewRoom(t, alice, test.RoomPreset(test.PresetPublicChat))
|
|
_ = bob
|
|
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
|
|
_, db, close := mustCreateDatabase(t, dbType)
|
|
defer close()
|
|
|
|
// store all events
|
|
var authNIDs []types.EventNID
|
|
for _, x := range room.Events() {
|
|
|
|
roomNID, err := db.GetOrCreateRoomNID(context.Background(), x.Unwrap())
|
|
assert.NoError(t, err)
|
|
assert.Greater(t, roomNID, types.RoomNID(0))
|
|
|
|
eventTypeNID, err := db.GetOrCreateEventTypeNID(context.Background(), x.Type())
|
|
assert.NoError(t, err)
|
|
assert.Greater(t, eventTypeNID, types.EventTypeNID(0))
|
|
|
|
eventStateKeyNID, err := db.GetOrCreateEventStateKeyNID(context.Background(), x.StateKey())
|
|
assert.NoError(t, err)
|
|
|
|
evNID, _, _, _, err := db.StoreEvent(context.Background(), x.Event, roomNID, eventTypeNID, eventStateKeyNID, authNIDs, false)
|
|
assert.NoError(t, err)
|
|
authNIDs = append(authNIDs, evNID)
|
|
}
|
|
|
|
// Alice should have no pending invites and should have a NID
|
|
pendingInvite, _, _, _, err := IsInvitePending(context.Background(), db, room.ID, alice.ID)
|
|
assert.NoError(t, err, "failed to get pending invites")
|
|
assert.False(t, pendingInvite, "unexpected pending invite")
|
|
|
|
// Bob should have no pending invites and receive a new NID
|
|
pendingInvite, _, _, _, err = IsInvitePending(context.Background(), db, room.ID, bob.ID)
|
|
assert.NoError(t, err, "failed to get pending invites")
|
|
assert.False(t, pendingInvite, "unexpected pending invite")
|
|
})
|
|
}
|