mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
Add SelectCurrentState test
This commit is contained in:
parent
ccc89edf49
commit
6e5ac7d3fe
|
|
@ -64,6 +64,7 @@ type messagesResp struct {
|
||||||
// OnIncomingMessagesRequest implements the /messages endpoint from the
|
// OnIncomingMessagesRequest implements the /messages endpoint from the
|
||||||
// client-server API.
|
// client-server API.
|
||||||
// See: https://matrix.org/docs/spec/client_server/latest.html#get-matrix-client-r0-rooms-roomid-messages
|
// See: https://matrix.org/docs/spec/client_server/latest.html#get-matrix-client-r0-rooms-roomid-messages
|
||||||
|
// nolint:gocyclo
|
||||||
func OnIncomingMessagesRequest(
|
func OnIncomingMessagesRequest(
|
||||||
req *http.Request, db storage.Database, roomID string, device *userapi.Device,
|
req *http.Request, db storage.Database, roomID string, device *userapi.Device,
|
||||||
rsAPI api.SyncRoomserverAPI,
|
rsAPI api.SyncRoomserverAPI,
|
||||||
|
|
|
||||||
|
|
@ -267,6 +267,15 @@ func (s *currentRoomStateStatements) SelectCurrentState(
|
||||||
stateFilter *gomatrixserverlib.StateFilter,
|
stateFilter *gomatrixserverlib.StateFilter,
|
||||||
excludeEventIDs []string,
|
excludeEventIDs []string,
|
||||||
) ([]*gomatrixserverlib.HeaderedEvent, error) {
|
) ([]*gomatrixserverlib.HeaderedEvent, error) {
|
||||||
|
// We're going to query members later, so remove them from this request
|
||||||
|
if stateFilter.LazyLoadMembers && !stateFilter.IncludeRedundantMembers {
|
||||||
|
notTypes := &[]string{gomatrixserverlib.MRoomMember}
|
||||||
|
if stateFilter.NotTypes != nil {
|
||||||
|
*stateFilter.NotTypes = append(*stateFilter.NotTypes, gomatrixserverlib.MRoomMember)
|
||||||
|
} else {
|
||||||
|
stateFilter.NotTypes = notTypes
|
||||||
|
}
|
||||||
|
}
|
||||||
stmt, params, err := prepareWithFilters(
|
stmt, params, err := prepareWithFilters(
|
||||||
s.db, txn, selectCurrentStateSQL,
|
s.db, txn, selectCurrentStateSQL,
|
||||||
[]interface{}{
|
[]interface{}{
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import (
|
||||||
"github.com/matrix-org/dendrite/syncapi/storage/tables"
|
"github.com/matrix-org/dendrite/syncapi/storage/tables"
|
||||||
"github.com/matrix-org/dendrite/syncapi/types"
|
"github.com/matrix-org/dendrite/syncapi/types"
|
||||||
"github.com/matrix-org/dendrite/test"
|
"github.com/matrix-org/dendrite/test"
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newCurrentRoomStateTable(t *testing.T, dbType test.DBType) (tables.CurrentRoomState, *sql.DB, func()) {
|
func newCurrentRoomStateTable(t *testing.T, dbType test.DBType) (tables.CurrentRoomState, *sql.DB, func()) {
|
||||||
|
|
@ -79,6 +80,9 @@ func TestCurrentRoomStateTable(t *testing.T) {
|
||||||
return fmt.Errorf("SelectEventsWithEventIDs\nexpected id %q not returned", id)
|
return fmt.Errorf("SelectEventsWithEventIDs\nexpected id %q not returned", id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testCurrentState(t, ctx, txn, tab, room)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -86,3 +90,39 @@ func TestCurrentRoomStateTable(t *testing.T) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testCurrentState(t *testing.T, ctx context.Context, txn *sql.Tx, tab tables.CurrentRoomState, room *test.Room) {
|
||||||
|
t.Run("test currentState", func(t *testing.T) {
|
||||||
|
// returns the complete state of the room with a default filter
|
||||||
|
filter := gomatrixserverlib.DefaultStateFilter()
|
||||||
|
evs, err := tab.SelectCurrentState(ctx, txn, room.ID, &filter, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
expectCount := 5
|
||||||
|
if gotCount := len(evs); gotCount != expectCount {
|
||||||
|
t.Fatalf("expected %d state events, got %d", expectCount, gotCount)
|
||||||
|
}
|
||||||
|
// When lazy loading, we expect no membership event, so only 4 events
|
||||||
|
filter.LazyLoadMembers = true
|
||||||
|
expectCount = 4
|
||||||
|
evs, err = tab.SelectCurrentState(ctx, txn, room.ID, &filter, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if gotCount := len(evs); gotCount != expectCount {
|
||||||
|
t.Fatalf("expected %d state events, got %d", expectCount, gotCount)
|
||||||
|
}
|
||||||
|
// same as above, but with existing NotTypes defined
|
||||||
|
notTypes := []string{gomatrixserverlib.MRoomMember}
|
||||||
|
filter.NotTypes = ¬Types
|
||||||
|
evs, err = tab.SelectCurrentState(ctx, txn, room.ID, &filter, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if gotCount := len(evs); gotCount != expectCount {
|
||||||
|
t.Fatalf("expected %d state events, got %d", expectCount, gotCount)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue