Conduit is a simple, fast and reliable chat server powered by Matrix https://conduit.rs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
866 lines
48 KiB
866 lines
48 KiB
reg GET /register yields a set of flows |
|
reg POST /register can create a user |
|
reg POST /register downcases capitals in usernames |
|
reg POST /register returns the same device_id as that in the request |
|
reg POST /register rejects registration of usernames with '!' |
|
reg POST /register rejects registration of usernames with '"' |
|
reg POST /register rejects registration of usernames with ':' |
|
reg POST /register rejects registration of usernames with '?' |
|
reg POST /register rejects registration of usernames with '\' |
|
reg POST /register rejects registration of usernames with '@' |
|
reg POST /register rejects registration of usernames with '[' |
|
reg POST /register rejects registration of usernames with ']' |
|
reg POST /register rejects registration of usernames with '{' |
|
reg POST /register rejects registration of usernames with '|' |
|
reg POST /register rejects registration of usernames with '}' |
|
reg POST /register rejects registration of usernames with '£' |
|
reg POST /register rejects registration of usernames with 'é' |
|
reg POST /register rejects registration of usernames with '\n' |
|
reg POST /register rejects registration of usernames with ''' |
|
reg POST /r0/admin/register with shared secret |
|
reg POST /r0/admin/register admin with shared secret |
|
reg POST /r0/admin/register with shared secret downcases capitals |
|
reg POST /r0/admin/register with shared secret disallows symbols |
|
reg POST rejects invalid utf-8 in JSON |
|
log GET /login yields a set of flows |
|
log POST /login can log in as a user |
|
log POST /login returns the same device_id as that in the request |
|
log POST /login can log in as a user with just the local part of the id |
|
log POST /login as non-existing user is rejected |
|
log POST /login wrong password is rejected |
|
log Interactive authentication types include SSO |
|
log Can perform interactive authentication with SSO |
|
log The user must be consistent through an interactive authentication session with SSO |
|
log The operation must be consistent through an interactive authentication session |
|
v1s GET /events initially |
|
v1s GET /initialSync initially |
|
csa Version responds 200 OK with valid structure |
|
pro PUT /profile/:user_id/displayname sets my name |
|
pro GET /profile/:user_id/displayname publicly accessible |
|
pro PUT /profile/:user_id/avatar_url sets my avatar |
|
pro GET /profile/:user_id/avatar_url publicly accessible |
|
dev GET /device/{deviceId} |
|
dev GET /device/{deviceId} gives a 404 for unknown devices |
|
dev GET /devices |
|
dev PUT /device/{deviceId} updates device fields |
|
dev PUT /device/{deviceId} gives a 404 for unknown devices |
|
dev DELETE /device/{deviceId} |
|
dev DELETE /device/{deviceId} requires UI auth user to match device owner |
|
dev DELETE /device/{deviceId} with no body gives a 401 |
|
dev The deleted device must be consistent through an interactive auth session |
|
dev Users receive device_list updates for their own devices |
|
pre GET /presence/:user_id/status fetches initial status |
|
pre PUT /presence/:user_id/status updates my presence |
|
crm POST /createRoom makes a public room |
|
crm POST /createRoom makes a private room |
|
crm POST /createRoom makes a private room with invites |
|
crm POST /createRoom makes a room with a name |
|
crm POST /createRoom makes a room with a topic |
|
syn Can /sync newly created room |
|
crm POST /createRoom creates a room with the given version |
|
crm POST /createRoom rejects attempts to create rooms with numeric versions |
|
crm POST /createRoom rejects attempts to create rooms with unknown versions |
|
crm POST /createRoom ignores attempts to set the room version via creation_content |
|
mem GET /rooms/:room_id/state/m.room.member/:user_id fetches my membership |
|
mem GET /rooms/:room_id/state/m.room.member/:user_id?format=event fetches my membership event |
|
rst GET /rooms/:room_id/state/m.room.power_levels fetches powerlevels |
|
mem GET /rooms/:room_id/joined_members fetches my membership |
|
v1s GET /rooms/:room_id/initialSync fetches initial sync state |
|
pub GET /publicRooms lists newly-created room |
|
ali GET /directory/room/:room_alias yields room ID |
|
mem GET /joined_rooms lists newly-created room |
|
rst POST /rooms/:room_id/state/m.room.name sets name |
|
rst GET /rooms/:room_id/state/m.room.name gets name |
|
rst POST /rooms/:room_id/state/m.room.topic sets topic |
|
rst GET /rooms/:room_id/state/m.room.topic gets topic |
|
rst GET /rooms/:room_id/state fetches entire room state |
|
crm POST /createRoom with creation content |
|
ali PUT /directory/room/:room_alias creates alias |
|
nsp GET /rooms/:room_id/aliases lists aliases |
|
jon POST /rooms/:room_id/join can join a room |
|
jon POST /join/:room_alias can join a room |
|
jon POST /join/:room_id can join a room |
|
jon POST /join/:room_id can join a room with custom content |
|
jon POST /join/:room_alias can join a room with custom content |
|
lev POST /rooms/:room_id/leave can leave a room |
|
inv POST /rooms/:room_id/invite can send an invite |
|
ban POST /rooms/:room_id/ban can ban a user |
|
snd POST /rooms/:room_id/send/:event_type sends a message |
|
snd PUT /rooms/:room_id/send/:event_type/:txn_id sends a message |
|
snd PUT /rooms/:room_id/send/:event_type/:txn_id deduplicates the same txn id |
|
get GET /rooms/:room_id/messages returns a message |
|
get GET /rooms/:room_id/messages lazy loads members correctly |
|
typ PUT /rooms/:room_id/typing/:user_id sets typing notification |
|
typ Typing notifications don't leak (3 subtests) |
|
rst GET /rooms/:room_id/state/m.room.power_levels can fetch levels |
|
rst PUT /rooms/:room_id/state/m.room.power_levels can set levels |
|
rst PUT power_levels should not explode if the old power levels were empty |
|
rst Both GET and PUT work |
|
rct POST /rooms/:room_id/receipt can create receipts |
|
red POST /rooms/:room_id/read_markers can create read marker |
|
med POST /media/r0/upload can create an upload |
|
med GET /media/r0/download can fetch the value again |
|
cap GET /capabilities is present and well formed for registered user |
|
cap GET /r0/capabilities is not public |
|
reg Register with a recaptcha |
|
reg registration is idempotent, without username specified |
|
reg registration is idempotent, with username specified |
|
reg registration remembers parameters |
|
reg registration accepts non-ascii passwords |
|
reg registration with inhibit_login inhibits login |
|
reg User signups are forbidden from starting with '_' |
|
reg Can register using an email address |
|
log Can login with 3pid and password using m.login.password |
|
log login types include SSO |
|
log /login/cas/redirect redirects if the old m.login.cas login type is listed |
|
log Can login with new user via CAS |
|
lox Can logout current device |
|
lox Can logout all devices |
|
lox Request to logout with invalid an access token is rejected |
|
lox Request to logout without an access token is rejected |
|
log After changing password, can't log in with old password |
|
log After changing password, can log in with new password |
|
log After changing password, existing session still works |
|
log After changing password, a different session no longer works by default |
|
log After changing password, different sessions can optionally be kept |
|
psh Pushers created with a different access token are deleted on password change |
|
psh Pushers created with a the same access token are not deleted on password change |
|
acc Can deactivate account |
|
acc Can't deactivate account with wrong password |
|
acc After deactivating account, can't log in with password |
|
acc After deactivating account, can't log in with an email |
|
v1s initialSync sees my presence status |
|
pre Presence change reports an event to myself |
|
pre Friends presence changes reports events |
|
crm Room creation reports m.room.create to myself |
|
crm Room creation reports m.room.member to myself |
|
rst Setting room topic reports m.room.topic to myself |
|
v1s Global initialSync |
|
v1s Global initialSync with limit=0 gives no messages |
|
v1s Room initialSync |
|
v1s Room initialSync with limit=0 gives no messages |
|
rst Setting state twice is idempotent |
|
jon Joining room twice is idempotent |
|
syn New room members see their own join event |
|
v1s New room members see existing users' presence in room initialSync |
|
syn Existing members see new members' join events |
|
syn Existing members see new members' presence |
|
v1s All room members see all room members' presence in global initialSync |
|
f,jon Remote users can join room by alias |
|
syn New room members see their own join event |
|
v1s New room members see existing members' presence in room initialSync |
|
syn Existing members see new members' join events |
|
syn Existing members see new member's presence |
|
v1s New room members see first user's profile information in global initialSync |
|
v1s New room members see first user's profile information in per-room initialSync |
|
f,jon Remote users may not join unfederated rooms |
|
syn Local room members see posted message events |
|
v1s Fetching eventstream a second time doesn't yield the message again |
|
syn Local non-members don't see posted message events |
|
get Local room members can get room messages |
|
f,syn Remote room members also see posted message events |
|
f,get Remote room members can get room messages |
|
get Message history can be paginated |
|
f,get Message history can be paginated over federation |
|
eph Ephemeral messages received from clients are correctly expired |
|
ali Room aliases can contain Unicode |
|
f,ali Remote room alias queries can handle Unicode |
|
ali Canonical alias can be set |
|
ali Canonical alias can include alt_aliases |
|
ali Regular users can add and delete aliases in the default room configuration |
|
ali Regular users can add and delete aliases when m.room.aliases is restricted |
|
ali Deleting a non-existent alias should return a 404 |
|
ali Users can't delete other's aliases |
|
ali Users with sufficient power-level can delete other's aliases |
|
ali Can delete canonical alias |
|
ali Alias creators can delete alias with no ops |
|
ali Alias creators can delete canonical alias with no ops |
|
ali Only room members can list aliases of a room |
|
inv Can invite users to invite-only rooms |
|
inv Uninvited users cannot join the room |
|
inv Invited user can reject invite |
|
f,inv Invited user can reject invite over federation |
|
f,inv Invited user can reject invite over federation several times |
|
inv Invited user can reject invite for empty room |
|
f,inv Invited user can reject invite over federation for empty room |
|
inv Invited user can reject local invite after originator leaves |
|
inv Invited user can see room metadata |
|
f,inv Remote invited user can see room metadata |
|
inv Users cannot invite themselves to a room |
|
inv Users cannot invite a user that is already in the room |
|
ban Banned user is kicked and may not rejoin until unbanned |
|
f,ban Remote banned user is kicked and may not rejoin until unbanned |
|
ban 'ban' event respects room powerlevel |
|
plv setting 'm.room.name' respects room powerlevel |
|
plv setting 'm.room.power_levels' respects room powerlevel (2 subtests) |
|
plv Unprivileged users can set m.room.topic if it only needs level 0 |
|
plv Users cannot set ban powerlevel higher than their own (2 subtests) |
|
plv Users cannot set kick powerlevel higher than their own (2 subtests) |
|
plv Users cannot set redact powerlevel higher than their own (2 subtests) |
|
v1s Check that event streams started after a client joined a room work (SYT-1) |
|
v1s Event stream catches up fully after many messages |
|
xxx POST /rooms/:room_id/redact/:event_id as power user redacts message |
|
xxx POST /rooms/:room_id/redact/:event_id as original message sender redacts message |
|
xxx POST /rooms/:room_id/redact/:event_id as random user does not redact message |
|
xxx POST /redact disallows redaction of event in different room |
|
xxx Redaction of a redaction redacts the redaction reason |
|
v1s A departed room is still included in /initialSync (SPEC-216) |
|
v1s Can get rooms/{roomId}/initialSync for a departed room (SPEC-216) |
|
rst Can get rooms/{roomId}/state for a departed room (SPEC-216) |
|
mem Can get rooms/{roomId}/members for a departed room (SPEC-216) |
|
get Can get rooms/{roomId}/messages for a departed room (SPEC-216) |
|
rst Can get 'm.room.name' state for a departed room (SPEC-216) |
|
syn Getting messages going forward is limited for a departed room (SPEC-216) |
|
3pd Can invite existing 3pid |
|
3pd Can invite existing 3pid with no ops into a private room |
|
3pd Can invite existing 3pid in createRoom |
|
3pd Can invite unbound 3pid |
|
f,3pd Can invite unbound 3pid over federation |
|
3pd Can invite unbound 3pid with no ops into a private room |
|
f,3pd Can invite unbound 3pid over federation with no ops into a private room |
|
f,3pd Can invite unbound 3pid over federation with users from both servers |
|
3pd Can accept unbound 3pid invite after inviter leaves |
|
3pd Can accept third party invite with /join |
|
3pd 3pid invite join with wrong but valid signature are rejected |
|
3pd 3pid invite join valid signature but revoked keys are rejected |
|
3pd 3pid invite join valid signature but unreachable ID server are rejected |
|
gst Guest user cannot call /events globally |
|
gst Guest users can join guest_access rooms |
|
gst Guest users can send messages to guest_access rooms if joined |
|
gst Guest user calling /events doesn't tightloop |
|
gst Guest users are kicked from guest_access rooms on revocation of guest_access |
|
gst Guest user can set display names |
|
gst Guest users are kicked from guest_access rooms on revocation of guest_access over federation |
|
gst Guest user can upgrade to fully featured user |
|
gst Guest user cannot upgrade other users |
|
pub GET /publicRooms lists rooms |
|
pub GET /publicRooms includes avatar URLs |
|
gst Guest users can accept invites to private rooms over federation |
|
gst Guest users denied access over federation if guest access prohibited |
|
mem Room members can override their displayname on a room-specific basis |
|
mem Room members can join a room with an overridden displayname |
|
mem Users cannot kick users from a room they are not in |
|
mem Users cannot kick users who have already left a room |
|
typ Typing notification sent to local room members |
|
f,typ Typing notifications also sent to remote room members |
|
typ Typing can be explicitly stopped |
|
rct Read receipts are visible to /initialSync |
|
rct Read receipts are sent as events |
|
rct Receipts must be m.read |
|
pro displayname updates affect room member events |
|
pro avatar_url updates affect room member events |
|
gst m.room.history_visibility == "world_readable" allows/forbids appropriately for Guest users |
|
gst m.room.history_visibility == "shared" allows/forbids appropriately for Guest users |
|
gst m.room.history_visibility == "invited" allows/forbids appropriately for Guest users |
|
gst m.room.history_visibility == "joined" allows/forbids appropriately for Guest users |
|
gst m.room.history_visibility == "default" allows/forbids appropriately for Guest users |
|
gst Guest non-joined user cannot call /events on shared room |
|
gst Guest non-joined user cannot call /events on invited room |
|
gst Guest non-joined user cannot call /events on joined room |
|
gst Guest non-joined user cannot call /events on default room |
|
gst Guest non-joined user can call /events on world_readable room |
|
gst Guest non-joined users can get state for world_readable rooms |
|
gst Guest non-joined users can get individual state for world_readable rooms |
|
gst Guest non-joined users cannot room initalSync for non-world_readable rooms |
|
gst Guest non-joined users can room initialSync for world_readable rooms |
|
gst Guest non-joined users can get individual state for world_readable rooms after leaving |
|
gst Guest non-joined users cannot send messages to guest_access rooms if not joined |
|
gst Guest users can sync from world_readable guest_access rooms if joined |
|
gst Guest users can sync from shared guest_access rooms if joined |
|
gst Guest users can sync from invited guest_access rooms if joined |
|
gst Guest users can sync from joined guest_access rooms if joined |
|
gst Guest users can sync from default guest_access rooms if joined |
|
ath m.room.history_visibility == "world_readable" allows/forbids appropriately for Real users |
|
ath m.room.history_visibility == "shared" allows/forbids appropriately for Real users |
|
ath m.room.history_visibility == "invited" allows/forbids appropriately for Real users |
|
ath m.room.history_visibility == "joined" allows/forbids appropriately for Real users |
|
ath m.room.history_visibility == "default" allows/forbids appropriately for Real users |
|
ath Real non-joined user cannot call /events on shared room |
|
ath Real non-joined user cannot call /events on invited room |
|
ath Real non-joined user cannot call /events on joined room |
|
ath Real non-joined user cannot call /events on default room |
|
ath Real non-joined user can call /events on world_readable room |
|
ath Real non-joined users can get state for world_readable rooms |
|
ath Real non-joined users can get individual state for world_readable rooms |
|
ath Real non-joined users cannot room initalSync for non-world_readable rooms |
|
ath Real non-joined users can room initialSync for world_readable rooms |
|
ath Real non-joined users can get individual state for world_readable rooms after leaving |
|
ath Real non-joined users cannot send messages to guest_access rooms if not joined |
|
ath Real users can sync from world_readable guest_access rooms if joined |
|
ath Real users can sync from shared guest_access rooms if joined |
|
ath Real users can sync from invited guest_access rooms if joined |
|
ath Real users can sync from joined guest_access rooms if joined |
|
ath Real users can sync from default guest_access rooms if joined |
|
ath Only see history_visibility changes on boundaries |
|
f,ath Backfill works correctly with history visibility set to joined |
|
fgt Forgotten room messages cannot be paginated |
|
fgt Forgetting room does not show up in v2 /sync |
|
fgt Can forget room you've been kicked from |
|
fgt Can't forget room you're still in |
|
fgt Can re-join room if re-invited |
|
ath Only original members of the room can see messages from erased users |
|
mem /joined_rooms returns only joined rooms |
|
mem /joined_members return joined members |
|
ctx /context/ on joined room works |
|
ctx /context/ on non world readable room does not work |
|
ctx /context/ returns correct number of events |
|
ctx /context/ with lazy_load_members filter works |
|
get /event/ on joined room works |
|
get /event/ on non world readable room does not work |
|
get /event/ does not allow access to events before the user joined |
|
mem Can get rooms/{roomId}/members |
|
mem Can get rooms/{roomId}/members at a given point |
|
mem Can filter rooms/{roomId}/members |
|
upg /upgrade creates a new room |
|
upg /upgrade should preserve room visibility for public rooms |
|
upg /upgrade should preserve room visibility for private rooms |
|
upg /upgrade copies >100 power levels to the new room |
|
upg /upgrade copies the power levels to the new room |
|
upg /upgrade preserves the power level of the upgrading user in old and new rooms |
|
upg /upgrade copies important state to the new room |
|
upg /upgrade copies ban events to the new room |
|
upg local user has push rules copied to upgraded room |
|
f,upg remote user has push rules copied to upgraded room |
|
upg /upgrade moves aliases to the new room |
|
upg /upgrade moves remote aliases to the new room |
|
upg /upgrade preserves direct room state |
|
upg /upgrade preserves room federation ability |
|
upg /upgrade restricts power levels in the old room |
|
upg /upgrade restricts power levels in the old room when the old PLs are unusual |
|
upg /upgrade to an unknown version is rejected |
|
upg /upgrade is rejected if the user can't send state events |
|
upg /upgrade of a bogus room fails gracefully |
|
upg Cannot send tombstone event that points to the same room |
|
f,upg Local and remote users' homeservers remove a room from their public directory on upgrade |
|
rst Name/topic keys are correct |
|
f,pub Can get remote public room list |
|
pub Can paginate public room list |
|
pub Can search public room list |
|
syn Can create filter |
|
syn Can download filter |
|
syn Can sync |
|
syn Can sync a joined room |
|
syn Full state sync includes joined rooms |
|
syn Newly joined room is included in an incremental sync |
|
syn Newly joined room has correct timeline in incremental sync |
|
syn Newly joined room includes presence in incremental sync |
|
syn Get presence for newly joined members in incremental sync |
|
syn Can sync a room with a single message |
|
syn Can sync a room with a message with a transaction id |
|
syn A message sent after an initial sync appears in the timeline of an incremental sync. |
|
syn A filtered timeline reaches its limit |
|
syn Syncing a new room with a large timeline limit isn't limited |
|
syn A full_state incremental update returns only recent timeline |
|
syn A prev_batch token can be used in the v1 messages API |
|
syn A next_batch token can be used in the v1 messages API |
|
syn User sees their own presence in a sync |
|
syn User is offline if they set_presence=offline in their sync |
|
syn User sees updates to presence from other users in the incremental sync. |
|
syn State is included in the timeline in the initial sync |
|
f,syn State from remote users is included in the state in the initial sync |
|
syn Changes to state are included in an incremental sync |
|
syn Changes to state are included in an gapped incremental sync |
|
f,syn State from remote users is included in the timeline in an incremental sync |
|
syn A full_state incremental update returns all state |
|
syn When user joins a room the state is included in the next sync |
|
syn A change to displayname should not result in a full state sync |
|
syn A change to displayname should appear in incremental /sync |
|
syn When user joins a room the state is included in a gapped sync |
|
syn When user joins and leaves a room in the same batch, the full state is still included in the next sync |
|
syn Current state appears in timeline in private history |
|
syn Current state appears in timeline in private history with many messages before |
|
syn Current state appears in timeline in private history with many messages after |
|
syn Rooms a user is invited to appear in an initial sync |
|
syn Rooms a user is invited to appear in an incremental sync |
|
syn Newly joined room is included in an incremental sync after invite |
|
syn Sync can be polled for updates |
|
syn Sync is woken up for leaves |
|
syn Left rooms appear in the leave section of sync |
|
syn Newly left rooms appear in the leave section of incremental sync |
|
syn We should see our own leave event, even if history_visibility is restricted (SYN-662) |
|
syn We should see our own leave event when rejecting an invite, even if history_visibility is restricted (riot-web/3462) |
|
syn Newly left rooms appear in the leave section of gapped sync |
|
syn Previously left rooms don't appear in the leave section of sync |
|
syn Left rooms appear in the leave section of full state sync |
|
syn Archived rooms only contain history from before the user left |
|
syn Banned rooms appear in the leave section of sync |
|
syn Newly banned rooms appear in the leave section of incremental sync |
|
syn Newly banned rooms appear in the leave section of incremental sync |
|
syn Typing events appear in initial sync |
|
syn Typing events appear in incremental sync |
|
syn Typing events appear in gapped sync |
|
syn Read receipts appear in initial v2 /sync |
|
syn New read receipts appear in incremental v2 /sync |
|
syn Can pass a JSON filter as a query parameter |
|
syn Can request federation format via the filter |
|
syn Read markers appear in incremental v2 /sync |
|
syn Read markers appear in initial v2 /sync |
|
syn Read markers can be updated |
|
syn Lazy loading parameters in the filter are strictly boolean |
|
syn The only membership state included in an initial sync is for all the senders in the timeline |
|
syn The only membership state included in an incremental sync is for senders in the timeline |
|
syn The only membership state included in a gapped incremental sync is for senders in the timeline |
|
syn Gapped incremental syncs include all state changes |
|
syn Old leaves are present in gapped incremental syncs |
|
syn Leaves are present in non-gapped incremental syncs |
|
syn Old members are included in gappy incr LL sync if they start speaking |
|
syn Members from the gap are included in gappy incr LL sync |
|
syn We don't send redundant membership state across incremental syncs by default |
|
syn We do send redundant membership state across incremental syncs if asked |
|
syn Unnamed room comes with a name summary |
|
syn Named room comes with just joined member count summary |
|
syn Room summary only has 5 heroes |
|
syn Room summary counts change when membership changes |
|
rmv User can create and send/receive messages in a room with version 1 |
|
rmv User can create and send/receive messages in a room with version 1 (2 subtests) |
|
rmv local user can join room with version 1 |
|
rmv User can invite local user to room with version 1 |
|
rmv remote user can join room with version 1 |
|
rmv User can invite remote user to room with version 1 |
|
rmv Remote user can backfill in a room with version 1 |
|
rmv Can reject invites over federation for rooms with version 1 |
|
rmv Can receive redactions from regular users over federation in room version 1 |
|
rmv User can create and send/receive messages in a room with version 2 |
|
rmv User can create and send/receive messages in a room with version 2 (2 subtests) |
|
rmv local user can join room with version 2 |
|
rmv User can invite local user to room with version 2 |
|
rmv remote user can join room with version 2 |
|
rmv User can invite remote user to room with version 2 |
|
rmv Remote user can backfill in a room with version 2 |
|
rmv Can reject invites over federation for rooms with version 2 |
|
rmv Can receive redactions from regular users over federation in room version 2 |
|
rmv User can create and send/receive messages in a room with version 3 |
|
rmv User can create and send/receive messages in a room with version 3 (2 subtests) |
|
rmv local user can join room with version 3 |
|
rmv User can invite local user to room with version 3 |
|
rmv remote user can join room with version 3 |
|
rmv User can invite remote user to room with version 3 |
|
rmv Remote user can backfill in a room with version 3 |
|
rmv Can reject invites over federation for rooms with version 3 |
|
rmv Can receive redactions from regular users over federation in room version 3 |
|
rmv User can create and send/receive messages in a room with version 4 |
|
rmv User can create and send/receive messages in a room with version 4 (2 subtests) |
|
rmv local user can join room with version 4 |
|
rmv User can invite local user to room with version 4 |
|
rmv remote user can join room with version 4 |
|
rmv User can invite remote user to room with version 4 |
|
rmv Remote user can backfill in a room with version 4 |
|
rmv Can reject invites over federation for rooms with version 4 |
|
rmv Can receive redactions from regular users over federation in room version 4 |
|
rmv User can create and send/receive messages in a room with version 5 |
|
rmv User can create and send/receive messages in a room with version 5 (2 subtests) |
|
rmv local user can join room with version 5 |
|
rmv User can invite local user to room with version 5 |
|
rmv remote user can join room with version 5 |
|
rmv User can invite remote user to room with version 5 |
|
rmv Remote user can backfill in a room with version 5 |
|
rmv Can reject invites over federation for rooms with version 5 |
|
rmv Can receive redactions from regular users over federation in room version 5 |
|
rmv User can create and send/receive messages in a room with version 6 |
|
rmv User can create and send/receive messages in a room with version 6 (2 subtests) |
|
rmv local user can join room with version 6 |
|
rmv User can invite local user to room with version 6 |
|
rmv remote user can join room with version 6 |
|
rmv User can invite remote user to room with version 6 |
|
rmv Remote user can backfill in a room with version 6 |
|
rmv Can reject invites over federation for rooms with version 6 |
|
rmv Can receive redactions from regular users over federation in room version 6 |
|
rmv Inbound federation rejects invites which include invalid JSON for room version 6 |
|
rmv Outbound federation rejects invite response which include invalid JSON for room version 6 |
|
rmv Inbound federation rejects invite rejections which include invalid JSON for room version 6 |
|
rmv Server rejects invalid JSON in a version 6 room |
|
pre Presence changes are reported to local room members |
|
f,pre Presence changes are also reported to remote room members |
|
pre Presence changes to UNAVAILABLE are reported to local room members |
|
f,pre Presence changes to UNAVAILABLE are reported to remote room members |
|
v1s Newly created users see their own presence in /initialSync (SYT-34) |
|
dvk Can upload device keys |
|
dvk Should reject keys claiming to belong to a different user |
|
dvk Can query device keys using POST |
|
dvk Can query specific device keys using POST |
|
dvk query for user with no keys returns empty key dict |
|
dvk Can claim one time key using POST |
|
f,dvk Can query remote device keys using POST |
|
f,dvk Can claim remote one time key using POST |
|
dvk Local device key changes appear in v2 /sync |
|
dvk Local new device changes appear in v2 /sync |
|
dvk Local delete device changes appear in v2 /sync |
|
dvk Local update device changes appear in v2 /sync |
|
dvk Can query remote device keys using POST after notification |
|
f,dev Device deletion propagates over federation |
|
f,dev If remote user leaves room, changes device and rejoins we see update in sync |
|
f,dev If remote user leaves room we no longer receive device updates |
|
dvk Local device key changes appear in /keys/changes |
|
dvk New users appear in /keys/changes |
|
f,dvk If remote user leaves room, changes device and rejoins we see update in /keys/changes |
|
dvk Get left notifs in sync and /keys/changes when other user leaves |
|
dvk Get left notifs for other users in sync and /keys/changes when user leaves |
|
f,dvk If user leaves room, remote user changes device and rejoins we see update in /sync and /keys/changes |
|
dkb Can create backup version |
|
dkb Can update backup version |
|
dkb Responds correctly when backup is empty |
|
dkb Can backup keys |
|
dkb Can update keys with better versions |
|
dkb Will not update keys with worse versions |
|
dkb Will not back up to an old backup version |
|
dkb Can delete backup |
|
dkb Deleted & recreated backups are empty |
|
dkb Can create more than 10 backup versions |
|
xsk Can upload self-signing keys |
|
xsk Fails to upload self-signing keys with no auth |
|
xsk Fails to upload self-signing key without master key |
|
xsk Changing master key notifies local users |
|
xsk Changing user-signing key notifies local users |
|
f,xsk can fetch self-signing keys over federation |
|
f,xsk uploading self-signing key notifies over federation |
|
f,xsk uploading signed devices gets propagated over federation |
|
tag Can add tag |
|
tag Can remove tag |
|
tag Can list tags for a room |
|
v1s Tags appear in the v1 /events stream |
|
v1s Tags appear in the v1 /initalSync |
|
v1s Tags appear in the v1 room initial sync |
|
tag Tags appear in an initial v2 /sync |
|
tag Newly updated tags appear in an incremental v2 /sync |
|
tag Deleted tags appear in an incremental v2 /sync |
|
tag local user has tags copied to the new room |
|
f,tag remote user has tags copied to the new room |
|
sch Can search for an event by body |
|
sch Can get context around search results |
|
sch Can back-paginate search results |
|
sch Search works across an upgraded room and its predecessor |
|
sch Search results with rank ordering do not include redacted events |
|
sch Search results with recent ordering do not include redacted events |
|
acc Can add account data |
|
acc Can add account data to room |
|
acc Can get account data without syncing |
|
acc Can get room account data without syncing |
|
v1s Latest account data comes down in /initialSync |
|
v1s Latest account data comes down in room initialSync |
|
v1s Account data appears in v1 /events stream |
|
v1s Room account data appears in v1 /events stream |
|
acc Latest account data appears in v2 /sync |
|
acc New account data appears in incremental v2 /sync |
|
oid Can generate a openid access_token that can be exchanged for information about a user |
|
oid Invalid openid access tokens are rejected |
|
oid Requests to userinfo without access tokens are rejected |
|
std Can send a message directly to a device using PUT /sendToDevice |
|
std Can recv a device message using /sync |
|
std Can recv device messages until they are acknowledged |
|
std Device messages with the same txn_id are deduplicated |
|
std Device messages wake up /sync |
|
std Can recv device messages over federation |
|
fsd Device messages over federation wake up /sync |
|
std Can send messages with a wildcard device id |
|
std Can send messages with a wildcard device id to two devices |
|
std Wildcard device messages wake up /sync |
|
fsd Wildcard device messages over federation wake up /sync |
|
adm /whois |
|
nsp /purge_history |
|
nsp /purge_history by ts |
|
nsp Can backfill purged history |
|
nsp Shutdown room |
|
ign Ignore user in existing room |
|
ign Ignore invite in full sync |
|
ign Ignore invite in incremental sync |
|
fky Checking local federation server |
|
fky Federation key API allows unsigned requests for keys |
|
fky Federation key API can act as a notary server via a GET request |
|
fky Federation key API can act as a notary server via a POST request |
|
fky Key notary server should return an expired key if it can't find any others |
|
fky Key notary server must not overwrite a valid key with a spurious result from the origin server |
|
fqu Non-numeric ports in server names are rejected |
|
fqu Outbound federation can query profile data |
|
fqu Inbound federation can query profile data |
|
fqu Outbound federation can query room alias directory |
|
fqu Inbound federation can query room alias directory |
|
fsj Outbound federation can query v1 /send_join |
|
fsj Outbound federation can query v2 /send_join |
|
fmj Outbound federation passes make_join failures through to the client |
|
fsj Inbound federation can receive v1 /send_join |
|
fsj Inbound federation can receive v2 /send_join |
|
fmj Inbound /v1/make_join rejects remote attempts to join local users to rooms |
|
fsj Inbound /v1/send_join rejects incorrectly-signed joins |
|
fsj Inbound /v1/send_join rejects joins from other servers |
|
fau Inbound federation rejects remote attempts to kick local users to rooms |
|
frv Inbound federation rejects attempts to join v1 rooms from servers without v1 support |
|
frv Inbound federation rejects attempts to join v2 rooms from servers lacking version support |
|
frv Inbound federation rejects attempts to join v2 rooms from servers only supporting v1 |
|
frv Inbound federation accepts attempts to join v2 rooms from servers with support |
|
frv Outbound federation correctly handles unsupported room versions |
|
frv A pair of servers can establish a join in a v2 room |
|
fsj Outbound federation rejects send_join responses with no m.room.create event |
|
frv Outbound federation rejects m.room.create events with an unknown room version |
|
fsj Event with an invalid signature in the send_join response should not cause room join to fail |
|
fsj Inbound: send_join rejects invalid JSON for room version 6 |
|
fed Outbound federation can send events |
|
fed Inbound federation can receive events |
|
fed Inbound federation can receive redacted events |
|
fed Ephemeral messages received from servers are correctly expired |
|
fed Events whose auth_events are in the wrong room do not mess up the room state |
|
fed Inbound federation can return events |
|
fed Inbound federation redacts events from erased users |
|
fme Outbound federation can request missing events |
|
fme Inbound federation can return missing events for world_readable visibility |
|
fme Inbound federation can return missing events for shared visibility |
|
fme Inbound federation can return missing events for invite visibility |
|
fme Inbound federation can return missing events for joined visibility |
|
fme outliers whose auth_events are in a different room are correctly rejected |
|
fbk Outbound federation can backfill events |
|
fbk Inbound federation can backfill events |
|
fbk Backfill checks the events requested belong to the room |
|
fbk Backfilled events whose prev_events are in a different room do not allow cross-room back-pagination |
|
fiv Outbound federation can send invites via v1 API |
|
fiv Outbound federation can send invites via v2 API |
|
fiv Inbound federation can receive invites via v1 API |
|
fiv Inbound federation can receive invites via v2 API |
|
fiv Inbound federation can receive invite and reject when remote replies with a 403 |
|
fiv Inbound federation can receive invite and reject when remote replies with a 500 |
|
fiv Inbound federation can receive invite and reject when remote is unreachable |
|
fiv Inbound federation rejects invites which are not signed by the sender |
|
fiv Inbound federation can receive invite rejections |
|
fiv Inbound federation rejects incorrectly-signed invite rejections |
|
fsl Inbound /v1/send_leave rejects leaves from other servers |
|
fst Inbound federation can get state for a room |
|
fst Inbound federation of state requires event_id as a mandatory paramater |
|
fst Inbound federation can get state_ids for a room |
|
fst Inbound federation of state_ids requires event_id as a mandatory paramater |
|
fst Federation rejects inbound events where the prev_events cannot be found |
|
fst Room state at a rejected message event is the same as its predecessor |
|
fst Room state at a rejected state event is the same as its predecessor |
|
fst Outbound federation requests missing prev_events and then asks for /state_ids and resolves the state |
|
fst Federation handles empty auth_events in state_ids sanely |
|
fst Getting state checks the events requested belong to the room |
|
fst Getting state IDs checks the events requested belong to the room |
|
fst Should not be able to take over the room by pretending there is no PL event |
|
fpb Inbound federation can get public room list |
|
fed Outbound federation sends receipts |
|
fed Inbound federation rejects receipts from wrong remote |
|
fed Inbound federation ignores redactions from invalid servers room > v3 |
|
fed An event which redacts an event in a different room should be ignored |
|
fed An event which redacts itself should be ignored |
|
fed A pair of events which redact each other should be ignored |
|
fdk Local device key changes get to remote servers |
|
fdk Server correctly handles incoming m.device_list_update |
|
fdk Server correctly resyncs when client query keys and there is no remote cache |
|
fdk Server correctly resyncs when server leaves and rejoins a room |
|
fdk Local device key changes get to remote servers with correct prev_id |
|
fdk Device list doesn't change if remote server is down |
|
fdk If a device list update goes missing, the server resyncs on the next one |
|
fst Name/topic keys are correct |
|
fau Remote servers cannot set power levels in rooms without existing powerlevels |
|
fau Remote servers should reject attempts by non-creators to set the power levels |
|
fau Inbound federation rejects typing notifications from wrong remote |
|
fau Users cannot set notifications powerlevel higher than their own |
|
fed Forward extremities remain so even after the next events are populated as outliers |
|
fau Banned servers cannot send events |
|
fau Banned servers cannot /make_join |
|
fau Banned servers cannot /send_join |
|
fau Banned servers cannot /make_leave |
|
fau Banned servers cannot /send_leave |
|
fau Banned servers cannot /invite |
|
fau Banned servers cannot get room state |
|
fau Banned servers cannot get room state ids |
|
fau Banned servers cannot backfill |
|
fau Banned servers cannot /event_auth |
|
fau Banned servers cannot get missing events |
|
fau Server correctly handles transactions that break edu limits |
|
fau Inbound federation correctly soft fails events |
|
fau Inbound federation accepts a second soft-failed event |
|
fau Inbound federation correctly handles soft failed events as extremities |
|
med Can upload with Unicode file name |
|
med Can download with Unicode file name locally |
|
f,med Can download with Unicode file name over federation |
|
med Alternative server names do not cause a routing loop |
|
med Can download specifying a different Unicode file name |
|
med Can upload without a file name |
|
med Can download without a file name locally |
|
f,med Can download without a file name over federation |
|
med Can upload with ASCII file name |
|
med Can download file 'ascii' |
|
med Can download file 'name with spaces' |
|
med Can download file 'name;with;semicolons' |
|
med Can download specifying a different ASCII file name |
|
med Can send image in room message |
|
med Can fetch images in room |
|
med POSTed media can be thumbnailed |
|
f,med Remote media can be thumbnailed |
|
med Test URL preview |
|
med Can read configuration endpoint |
|
nsp Can quarantine media in rooms |
|
udr User appears in user directory |
|
udr User in private room doesn't appear in user directory |
|
udr User joining then leaving public room appears and dissappears from directory |
|
udr Users appear/disappear from directory when join_rules are changed |
|
udr Users appear/disappear from directory when history_visibility are changed |
|
udr Users stay in directory when join_rules are changed but history_visibility is world_readable |
|
f,udr User in remote room doesn't appear in user directory after server left room |
|
udr User directory correctly update on display name change |
|
udr User in shared private room does appear in user directory |
|
udr User in shared private room does appear in user directory until leave |
|
udr User in dir while user still shares private rooms |
|
nsp Create group |
|
nsp Add group rooms |
|
nsp Remove group rooms |
|
nsp Get local group profile |
|
nsp Get local group users |
|
nsp Add/remove local group rooms |
|
nsp Get local group summary |
|
nsp Get remote group profile |
|
nsp Get remote group users |
|
nsp Add/remove remote group rooms |
|
nsp Get remote group summary |
|
nsp Add local group users |
|
nsp Remove self from local group |
|
nsp Remove other from local group |
|
nsp Add remote group users |
|
nsp Remove self from remote group |
|
nsp Listing invited users of a remote group when not a member returns a 403 |
|
nsp Add group category |
|
nsp Remove group category |
|
nsp Get group categories |
|
nsp Add group role |
|
nsp Remove group role |
|
nsp Get group roles |
|
nsp Add room to group summary |
|
nsp Adding room to group summary keeps room_id when fetching rooms in group |
|
nsp Adding multiple rooms to group summary have correct order |
|
nsp Remove room from group summary |
|
nsp Add room to group summary with category |
|
nsp Remove room from group summary with category |
|
nsp Add user to group summary |
|
nsp Adding multiple users to group summary have correct order |
|
nsp Remove user from group summary |
|
nsp Add user to group summary with role |
|
nsp Remove user from group summary with role |
|
nsp Local group invites come down sync |
|
nsp Group creator sees group in sync |
|
nsp Group creator sees group in initial sync |
|
nsp Get/set local group publicity |
|
nsp Bulk get group publicity |
|
nsp Joinability comes down summary |
|
nsp Set group joinable and join it |
|
nsp Group is not joinable by default |
|
nsp Group is joinable over federation |
|
nsp Room is transitioned on local and remote groups upon room upgrade |
|
3pd Can bind 3PID via home server |
|
3pd Can bind and unbind 3PID via homeserver |
|
3pd Can unbind 3PID via homeserver when bound out of band |
|
3pd 3PIDs are unbound after account deactivation |
|
3pd Can bind and unbind 3PID via /unbind by specifying the identity server |
|
3pd Can bind and unbind 3PID via /unbind without specifying the identity server |
|
app AS can create a user |
|
app AS can create a user with an underscore |
|
app AS can create a user with inhibit_login |
|
app AS cannot create users outside its own namespace |
|
app Regular users cannot register within the AS namespace |
|
app AS can make room aliases |
|
app Regular users cannot create room aliases within the AS namespace |
|
app AS-ghosted users can use rooms via AS |
|
app AS-ghosted users can use rooms themselves |
|
app Ghost user must register before joining room |
|
app AS can set avatar for ghosted users |
|
app AS can set displayname for ghosted users |
|
app AS can't set displayname for random users |
|
app Inviting an AS-hosted user asks the AS server |
|
app Accesing an AS-hosted room alias asks the AS server |
|
app Events in rooms with AS-hosted room aliases are sent to AS server |
|
app AS user (not ghost) can join room without registering |
|
app AS user (not ghost) can join room without registering, with user_id query param |
|
app HS provides query metadata |
|
app HS can provide query metadata on a single protocol |
|
app HS will proxy request for 3PU mapping |
|
app HS will proxy request for 3PL mapping |
|
app AS can publish rooms in their own list |
|
app AS and main public room lists are separate |
|
app AS can deactivate a user |
|
psh Test that a message is pushed |
|
psh Invites are pushed |
|
psh Rooms with names are correctly named in pushed |
|
psh Rooms with canonical alias are correctly named in pushed |
|
psh Rooms with many users are correctly pushed |
|
psh Don't get pushed for rooms you've muted |
|
psh Rejected events are not pushed |
|
psh Can add global push rule for room |
|
psh Can add global push rule for sender |
|
psh Can add global push rule for content |
|
psh Can add global push rule for override |
|
psh Can add global push rule for underride |
|
psh Can add global push rule for content |
|
psh New rules appear before old rules by default |
|
psh Can add global push rule before an existing rule |
|
psh Can add global push rule after an existing rule |
|
psh Can delete a push rule |
|
psh Can disable a push rule |
|
psh Adding the same push rule twice is idempotent |
|
psh Messages that notify from another user increment unread notification count |
|
psh Messages that highlight from another user increment unread highlight count |
|
psh Can change the actions of default rules |
|
psh Changing the actions of an unknown default rule fails with 404 |
|
psh Can change the actions of a user specified rule |
|
psh Changing the actions of an unknown rule fails with 404 |
|
psh Can fetch a user's pushers |
|
psh Push rules come down in an initial /sync |
|
psh Adding a push rule wakes up an incremental /sync |
|
psh Disabling a push rule wakes up an incremental /sync |
|
psh Enabling a push rule wakes up an incremental /sync |
|
psh Setting actions for a push rule wakes up an incremental /sync |
|
psh Can enable/disable default rules |
|
psh Enabling an unknown default rule fails with 404 |
|
psh Test that rejected pushers are removed. |
|
psh Notifications can be viewed with GET /notifications |
|
psh Trying to add push rule with no scope fails with 400 |
|
psh Trying to add push rule with invalid scope fails with 400 |
|
psh Trying to add push rule with missing template fails with 400 |
|
psh Trying to add push rule with missing rule_id fails with 400 |
|
psh Trying to add push rule with empty rule_id fails with 400 |
|
psh Trying to add push rule with invalid template fails with 400 |
|
psh Trying to add push rule with rule_id with slashes fails with 400 |
|
psh Trying to add push rule with override rule without conditions fails with 400 |
|
psh Trying to add push rule with underride rule without conditions fails with 400 |
|
psh Trying to add push rule with condition without kind fails with 400 |
|
psh Trying to add push rule with content rule without pattern fails with 400 |
|
psh Trying to add push rule with no actions fails with 400 |
|
psh Trying to add push rule with invalid action fails with 400 |
|
psh Trying to add push rule with invalid attr fails with 400 |
|
psh Trying to add push rule with invalid value for enabled fails with 400 |
|
psh Trying to get push rules with no trailing slash fails with 400 |
|
psh Trying to get push rules with scope without trailing slash fails with 400 |
|
psh Trying to get push rules with template without tailing slash fails with 400 |
|
psh Trying to get push rules with unknown scope fails with 400 |
|
psh Trying to get push rules with unknown template fails with 400 |
|
psh Trying to get push rules with unknown attribute fails with 400 |
|
psh Trying to get push rules with unknown rule_id fails with 404 |
|
psh Rooms with names are correctly named in pushes |
|
v1s GET /initialSync with non-numeric 'limit' |
|
v1s GET /events with non-numeric 'limit' |
|
v1s GET /events with negative 'limit' |
|
v1s GET /events with non-numeric 'timeout' |
|
ath Event size limits |
|
syn Check creating invalid filters returns 4xx |
|
f,pre New federated private chats get full presence information (SYN-115) |
|
pre Left room members do not cause problems for presence |
|
crm Rooms can be created with an initial invite list (SYN-205) (1 subtests) |
|
typ Typing notifications don't leak |
|
ban Non-present room members cannot ban others |
|
psh Getting push rules doesn't corrupt the cache SYN-390 |
|
inv Test that we can be reinvited to a room we created |
|
syn Multiple calls to /sync should not cause 500 errors |
|
gst Guest user can call /events on another world_readable room (SYN-606) |
|
gst Real user can call /events on another world_readable room (SYN-606) |
|
gst Events come down the correct room |
|
pub Asking for a remote rooms list, but supplying the local server's name, returns the local rooms list |
|
std Can send a to-device message to two users which both receive it using /sync |
|
fme Outbound federation will ignore a missing event with bad JSON for room version 6 |
|
fbk Outbound federation rejects backfill containing invalid JSON for events in room version 6 |
|
jso Invalid JSON integers |
|
jso Invalid JSON floats |
|
jso Invalid JSON special values |
|
inv Can invite users to invite-only rooms (2 subtests) |
|
plv setting 'm.room.name' respects room powerlevel (2 subtests) |
|
psh Messages that notify from another user increment notification_count |
|
psh Messages that org.matrix.msc2625.mark_unread from another user increment org.matrix.msc2625.unread_count |
|
dvk Can claim one time key using POST (2 subtests) |
|
fdk Can query remote device keys using POST (1 subtests) |
|
fdk Can claim remote one time key using POST (2 subtests) |
|
fmj Inbound /make_join rejects attempts to join rooms where all users have left |