Skip to content

Commit 6289124

Browse files
committed
test: add test for the previous commit
1 parent 5883bb4 commit 6289124

2 files changed

Lines changed: 195 additions & 2 deletions

File tree

crates/matrix-sdk-ui/tests/integration/room_list_service.rs

Lines changed: 194 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{ops::Not, sync::Arc};
1+
use std::{collections::BTreeMap, ops::Not, sync::Arc};
22

33
use assert_matches::assert_matches;
44
use eyeball_im::VectorDiff;
@@ -2893,3 +2893,196 @@ async fn test_multiple_timeline_init() {
28932893
// A new timeline for the same room can still be constructed.
28942894
room.timeline_builder().build().await.unwrap();
28952895
}
2896+
2897+
#[async_test]
2898+
async fn test_thread_subscriptions_extension_enabled_only_if_server_advertises_it() {
2899+
let server = MatrixMockServer::new().await;
2900+
2901+
{
2902+
// The first time, don't advertise support for MSC4306; the extension will NOT
2903+
// enabled in this case, despite the client requesting it.
2904+
let features_map = BTreeMap::new();
2905+
2906+
server
2907+
.mock_versions()
2908+
.ok_custom(&["v1.11"], &features_map)
2909+
.named("/versions, first time")
2910+
.mock_once()
2911+
.mount()
2912+
.await;
2913+
2914+
let client = server
2915+
.client_builder()
2916+
.no_server_versions()
2917+
.on_builder(|b| {
2918+
b.with_threading_support(matrix_sdk::ThreadingSupport::Enabled {
2919+
with_subscriptions: true,
2920+
})
2921+
})
2922+
.build()
2923+
.await;
2924+
let room_list = RoomListService::new(client.clone()).await.unwrap();
2925+
2926+
let sync = room_list.sync();
2927+
pin_mut!(sync);
2928+
2929+
let room_id = room_id!("!r0:bar.org");
2930+
2931+
let mock_server = server.server();
2932+
sync_then_assert_request_and_fake_response! {
2933+
[mock_server, room_list, sync]
2934+
assert request = {
2935+
"conn_id": "room-list",
2936+
"extensions": {
2937+
"account_data": {
2938+
"enabled": true,
2939+
},
2940+
"receipts": {
2941+
"enabled": true,
2942+
"rooms": ["*"],
2943+
},
2944+
"typing": {
2945+
"enabled": true,
2946+
},
2947+
},
2948+
"lists": {
2949+
"all_rooms": {
2950+
"filters": {},
2951+
"ranges": [ [ 0, 19, ], ],
2952+
"required_state": [
2953+
[ "m.room.name", "" ],
2954+
[ "m.room.encryption", "" ],
2955+
[ "m.room.member", "$LAZY" ],
2956+
[ "m.room.member", "$ME" ],
2957+
[ "m.room.topic", "", ],
2958+
[ "m.room.avatar", "", ],
2959+
[ "m.room.canonical_alias", "", ],
2960+
[ "m.room.power_levels", "", ],
2961+
[ "org.matrix.msc3401.call.member", "*", ],
2962+
[ "m.room.join_rules", "", ],
2963+
[ "m.room.tombstone", "", ],
2964+
[ "m.room.create", "", ],
2965+
[ "m.room.history_visibility", "", ],
2966+
[ "io.element.functional_members", "", ],
2967+
[ "m.space.parent", "*", ],
2968+
[ "m.space.child", "*", ],
2969+
],
2970+
"timeline_limit": 1,
2971+
},
2972+
},
2973+
},
2974+
respond with = {
2975+
"pos": "0",
2976+
"lists": {
2977+
ALL_ROOMS: {
2978+
"count": 2,
2979+
},
2980+
},
2981+
"rooms": {
2982+
room_id: {
2983+
"initial": true,
2984+
"timeline": [
2985+
timeline_event!("$x0:bar.org" at 0 sec),
2986+
],
2987+
"prev_batch": "prev-batch-token"
2988+
},
2989+
},
2990+
},
2991+
};
2992+
}
2993+
2994+
// Then, advertise support with support for MSC4306; the extension will be
2995+
// enabled in this case.
2996+
let features_map = BTreeMap::from([("org.matrix.msc4306", true)]);
2997+
2998+
server
2999+
.mock_versions()
3000+
.ok_custom(&["v1.11"], &features_map)
3001+
.named("/versions, second time")
3002+
.mock_once()
3003+
.mount()
3004+
.await;
3005+
3006+
let client = server
3007+
.client_builder()
3008+
.no_server_versions()
3009+
.on_builder(|b| {
3010+
b.with_threading_support(matrix_sdk::ThreadingSupport::Enabled {
3011+
with_subscriptions: true,
3012+
})
3013+
})
3014+
.build()
3015+
.await;
3016+
let room_list = RoomListService::new(client.clone()).await.unwrap();
3017+
3018+
let sync = room_list.sync();
3019+
pin_mut!(sync);
3020+
3021+
let room_id = room_id!("!r0:bar.org");
3022+
3023+
let mock_server = server.server();
3024+
sync_then_assert_request_and_fake_response! {
3025+
[mock_server, room_list, sync]
3026+
assert request = {
3027+
"conn_id": "room-list",
3028+
"extensions": {
3029+
"account_data": {
3030+
"enabled": true,
3031+
},
3032+
"receipts": {
3033+
"enabled": true,
3034+
"rooms": ["*"],
3035+
},
3036+
"typing": {
3037+
"enabled": true,
3038+
},
3039+
"io.element.msc4308.thread_subscriptions": {
3040+
"enabled": true,
3041+
"limit": 10,
3042+
},
3043+
},
3044+
"lists": {
3045+
"all_rooms": {
3046+
"filters": {},
3047+
"ranges": [ [ 0, 19, ], ],
3048+
"required_state": [
3049+
[ "m.room.name", "" ],
3050+
[ "m.room.encryption", "" ],
3051+
[ "m.room.member", "$LAZY" ],
3052+
[ "m.room.member", "$ME" ],
3053+
[ "m.room.topic", "", ],
3054+
[ "m.room.avatar", "", ],
3055+
[ "m.room.canonical_alias", "", ],
3056+
[ "m.room.power_levels", "", ],
3057+
[ "org.matrix.msc3401.call.member", "*", ],
3058+
[ "m.room.join_rules", "", ],
3059+
[ "m.room.tombstone", "", ],
3060+
[ "m.room.create", "", ],
3061+
[ "m.room.history_visibility", "", ],
3062+
[ "io.element.functional_members", "", ],
3063+
[ "m.space.parent", "*", ],
3064+
[ "m.space.child", "*", ],
3065+
],
3066+
"timeline_limit": 1,
3067+
},
3068+
},
3069+
},
3070+
respond with = {
3071+
"pos": "0",
3072+
"lists": {
3073+
ALL_ROOMS: {
3074+
"count": 2,
3075+
},
3076+
},
3077+
"rooms": {
3078+
room_id: {
3079+
"initial": true,
3080+
"timeline": [
3081+
timeline_event!("$x0:bar.org" at 0 sec),
3082+
],
3083+
"prev_batch": "prev-batch-token"
3084+
},
3085+
},
3086+
},
3087+
};
3088+
}

crates/matrix-sdk/src/test_utils/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl MockClientBuilder {
5454
}
5555
}
5656

57-
/// Don't cache server versions in the client.
57+
/// Don't use an initial, cached server versions list in the client.
5858
pub fn no_server_versions(mut self) -> Self {
5959
self.server_versions = ServerVersions::None;
6060
self

0 commit comments

Comments
 (0)