mirror of
https://github.com/matrix-org/dendrite
synced 2024-08-15 00:25:01 +02:00
94 lines
3.2 KiB
Go
94 lines
3.2 KiB
Go
package tables_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/matrix-org/util"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/matrix-org/dendrite/internal/sqlutil"
|
|
"github.com/matrix-org/dendrite/roomserver/storage/postgres"
|
|
"github.com/matrix-org/dendrite/roomserver/storage/sqlite3"
|
|
"github.com/matrix-org/dendrite/roomserver/storage/tables"
|
|
"github.com/matrix-org/dendrite/roomserver/types"
|
|
"github.com/matrix-org/dendrite/setup/config"
|
|
"github.com/matrix-org/dendrite/test"
|
|
)
|
|
|
|
func mustCreateInviteTable(t *testing.T, dbType test.DBType) (tables.Invites, func()) {
|
|
t.Helper()
|
|
connStr, close := test.PrepareDBConnectionString(t, dbType)
|
|
db, err := sqlutil.Open(&config.DatabaseOptions{
|
|
ConnectionString: config.DataSource(connStr),
|
|
}, sqlutil.NewExclusiveWriter())
|
|
assert.NoError(t, err)
|
|
var tab tables.Invites
|
|
switch dbType {
|
|
case test.DBTypePostgres:
|
|
err = postgres.CreateInvitesTable(db)
|
|
assert.NoError(t, err)
|
|
tab, err = postgres.PrepareInvitesTable(db)
|
|
case test.DBTypeSQLite:
|
|
err = sqlite3.CreateInvitesTable(db)
|
|
assert.NoError(t, err)
|
|
tab, err = sqlite3.PrepareInvitesTable(db)
|
|
}
|
|
assert.NoError(t, err)
|
|
|
|
return tab, close
|
|
}
|
|
|
|
func TestInviteTable(t *testing.T) {
|
|
ctx := context.Background()
|
|
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
|
|
tab, close := mustCreateInviteTable(t, dbType)
|
|
defer close()
|
|
eventID1 := util.RandomString(16)
|
|
roomNID := types.RoomNID(1)
|
|
targetUserNID, senderUserNID := types.EventStateKeyNID(1), types.EventStateKeyNID(2)
|
|
newInvite, err := tab.InsertInviteEvent(ctx, nil, eventID1, roomNID, targetUserNID, senderUserNID, []byte(""))
|
|
assert.NoError(t, err)
|
|
assert.True(t, newInvite)
|
|
|
|
// Try adding the same invite again
|
|
newInvite, err = tab.InsertInviteEvent(ctx, nil, eventID1, roomNID, targetUserNID, senderUserNID, []byte(""))
|
|
assert.NoError(t, err)
|
|
assert.False(t, newInvite)
|
|
|
|
// Add another invite for this room
|
|
eventID2 := util.RandomString(16)
|
|
newInvite, err = tab.InsertInviteEvent(ctx, nil, eventID2, roomNID, targetUserNID, senderUserNID, []byte(""))
|
|
assert.NoError(t, err)
|
|
assert.True(t, newInvite)
|
|
|
|
// Add another invite for a different user
|
|
eventID := util.RandomString(16)
|
|
newInvite, err = tab.InsertInviteEvent(ctx, nil, eventID, types.RoomNID(3), targetUserNID, senderUserNID, []byte(""))
|
|
assert.NoError(t, err)
|
|
assert.True(t, newInvite)
|
|
|
|
stateKeyNIDs, eventIDs, _, err := tab.SelectInviteActiveForUserInRoom(ctx, nil, targetUserNID, roomNID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []string{eventID1, eventID2}, eventIDs)
|
|
assert.Equal(t, []types.EventStateKeyNID{2, 2}, stateKeyNIDs)
|
|
|
|
// retire the invite
|
|
retiredEventIDs, err := tab.UpdateInviteRetired(ctx, nil, roomNID, targetUserNID)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, []string{eventID1, eventID2}, retiredEventIDs)
|
|
|
|
// This should now be empty
|
|
stateKeyNIDs, eventIDs, _, err = tab.SelectInviteActiveForUserInRoom(ctx, nil, targetUserNID, roomNID)
|
|
assert.NoError(t, err)
|
|
assert.Empty(t, eventIDs)
|
|
assert.Empty(t, stateKeyNIDs)
|
|
|
|
// Non-existent targetUserNID
|
|
stateKeyNIDs, eventIDs, _, err = tab.SelectInviteActiveForUserInRoom(ctx, nil, types.EventStateKeyNID(10), roomNID)
|
|
assert.NoError(t, err)
|
|
assert.Empty(t, stateKeyNIDs)
|
|
assert.Empty(t, eventIDs)
|
|
})
|
|
}
|