Skip to content

Commit f2dd0d9

Browse files
committed
Test for MSC4115 support
1 parent d73c81a commit f2dd0d9

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

tests/msc4115/main_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package tests
2+
3+
import (
4+
"testing"
5+
6+
"github.com/matrix-org/complement"
7+
)
8+
9+
func TestMain(m *testing.M) {
10+
complement.TestMain(m, "msc4115")
11+
}

tests/msc4115/msc4115_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package tests
2+
3+
import (
4+
"github.com/matrix-org/complement/b"
5+
"github.com/matrix-org/complement/client"
6+
"github.com/matrix-org/complement/runtime"
7+
"testing"
8+
9+
"github.com/matrix-org/complement"
10+
"github.com/matrix-org/complement/helpers"
11+
)
12+
13+
// MSC4115: membership information on events
14+
//
15+
// Alice sends one message before bob joins, then one after. Bob reads both messages, and checks the membership state
16+
// on each.
17+
func TestMSC4115(t *testing.T) {
18+
runtime.SkipIf(t, runtime.Dendrite) // not yet implemented
19+
20+
deployment := complement.Deploy(t, 1)
21+
defer deployment.Destroy(t)
22+
23+
alice := deployment.Register(t, "hs1", helpers.RegistrationOpts{})
24+
bob := deployment.Register(t, "hs1", helpers.RegistrationOpts{})
25+
26+
roomID := alice.MustCreateRoom(t, map[string]interface{}{"preset": "public_chat"})
27+
preJoinEventID := alice.SendEventSynced(t, roomID, b.Event{Type: "m.room.message",
28+
Content: map[string]interface{}{
29+
"msgtype": "m.text",
30+
"body": "prejoin",
31+
}})
32+
bob.MustJoinRoom(t, roomID, []string{"hs1"})
33+
postJoinEventID := alice.SendEventSynced(t, roomID, b.Event{Type: "m.room.message",
34+
Content: map[string]interface{}{
35+
"msgtype": "m.text",
36+
"body": "postjoin",
37+
}})
38+
39+
// Now Bob syncs, to get the messages
40+
syncResult, _ := bob.MustSync(t, client.SyncReq{})
41+
if err := client.SyncTimelineHasEventID(roomID, preJoinEventID)(alice.UserID, syncResult); err != nil {
42+
t.Fatalf("Sync response lacks prejoin event: %s", err)
43+
}
44+
if err := client.SyncTimelineHasEventID(roomID, postJoinEventID)(alice.UserID, syncResult); err != nil {
45+
t.Fatalf("Sync response lacks prejoin event: %s", err)
46+
}
47+
48+
// ... and we check the membership value for each event. Should be "leave" for each event until the join.
49+
haveSeenJoin := false
50+
roomSyncResult := syncResult.Get("rooms.join." + client.GjsonEscape(roomID))
51+
for _, ev := range roomSyncResult.Get("timeline.events").Array() {
52+
if ev.Get("type").Str == "m.room.member" && ev.Get("state_key").Str == bob.UserID {
53+
haveSeenJoin = true
54+
}
55+
membership := ev.Get("unsigned." + client.GjsonEscape("io.element.msc4115.membership")).Str
56+
expectedMembership := "leave"
57+
if haveSeenJoin {
58+
expectedMembership = "join"
59+
}
60+
if membership != expectedMembership {
61+
t.Errorf("Incorrect membership for event %s; got %s, want %s", ev, membership, expectedMembership)
62+
}
63+
}
64+
}

0 commit comments

Comments
 (0)