Skip to content

Commit db1b0b4

Browse files
committed
Test: expose the number of children each space room has.
1 parent ee7f9e0 commit db1b0b4

File tree

5 files changed

+51
-14
lines changed

5 files changed

+51
-14
lines changed

bindings/matrix-sdk-ffi/src/spaces.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ pub struct SpaceServiceRoom {
183183
pub world_readable: Option<bool>,
184184
pub guest_can_join: bool,
185185

186+
pub children_count: u64,
186187
pub state: Option<Membership>,
187188
pub heroes: Option<Vec<RoomHero>>,
188189
}
@@ -200,6 +201,7 @@ impl From<UISpaceServiceRoom> for SpaceServiceRoom {
200201
join_rule: room.join_rule.map(Into::into),
201202
world_readable: room.world_readable,
202203
guest_can_join: room.guest_can_join,
204+
children_count: room.children_count,
203205
state: room.state.map(Into::into),
204206
heroes: room.heroes.map(|heroes| heroes.into_iter().map(Into::into).collect()),
205207
}

crates/matrix-sdk-ui/src/spaces/graph.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ impl SpaceServiceGraph {
4949
self.nodes.values().filter(|node| node.parents.is_empty()).map(|node| &node.id).collect()
5050
}
5151

52+
pub fn children_of(&self, node_id: &OwnedRoomId) -> Vec<&OwnedRoomId> {
53+
self.nodes.get(node_id).map_or(vec![], |node| node.children.iter().collect())
54+
}
55+
5256
pub fn add_node(&mut self, node_id: OwnedRoomId) {
5357
self.nodes.entry(node_id.clone()).or_insert(SpaceServiceGraphNode::new(node_id));
5458
}

crates/matrix-sdk-ui/src/spaces/mod.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,13 @@ impl SpaceService {
147147
joined_spaces
148148
.iter()
149149
.flat_map(|room| {
150-
if root_notes.contains(&&room.room_id().to_owned()) {
151-
Some(SpaceServiceRoom::new_from_known(room.clone()))
150+
let room_id = room.room_id().to_owned();
151+
152+
if root_notes.contains(&&room_id) {
153+
Some(SpaceServiceRoom::new_from_known(
154+
room.clone(),
155+
graph.children_of(&room_id).len() as u64,
156+
))
152157
} else {
153158
None
154159
}
@@ -248,6 +253,12 @@ mod tests {
248253
vec![parent_space_id]
249254
);
250255

256+
// and it has 2 children
257+
assert_eq!(
258+
space_service.joined_spaces().iter().map(|s| s.children_count).collect::<Vec<_>>(),
259+
vec![2]
260+
);
261+
251262
let parent_space = client.get_room(parent_space_id).unwrap();
252263
assert!(parent_space.is_space());
253264

@@ -315,7 +326,7 @@ mod tests {
315326

316327
assert_eq!(
317328
space_service.joined_spaces(),
318-
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap())]
329+
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap(), 0)]
319330
);
320331

321332
// Join the second space
@@ -335,17 +346,17 @@ mod tests {
335346
assert_eq!(
336347
space_service.joined_spaces(),
337348
vec![
338-
SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap()),
339-
SpaceServiceRoom::new_from_known(client.get_room(second_space_id).unwrap())
349+
SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap(), 0),
350+
SpaceServiceRoom::new_from_known(client.get_room(second_space_id).unwrap(), 0)
340351
]
341352
);
342353

343354
// The subscriber yields new results when a space is joined
344355
assert_next_eq!(
345356
joined_spaces_subscriber,
346357
vec![
347-
SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap()),
348-
SpaceServiceRoom::new_from_known(client.get_room(second_space_id).unwrap())
358+
SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap(), 0),
359+
SpaceServiceRoom::new_from_known(client.get_room(second_space_id).unwrap(), 0)
349360
]
350361
);
351362

@@ -354,7 +365,7 @@ mod tests {
354365
// and when one is left
355366
assert_next_eq!(
356367
joined_spaces_subscriber,
357-
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap())]
368+
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap(), 0)]
358369
);
359370

360371
// but it doesn't when a non-space room gets joined
@@ -370,7 +381,7 @@ mod tests {
370381
assert_pending!(joined_spaces_subscriber);
371382
assert_eq!(
372383
space_service.joined_spaces(),
373-
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap())]
384+
vec![SpaceServiceRoom::new_from_known(client.get_room(first_space_id).unwrap(), 0)]
374385
);
375386
}
376387
}

crates/matrix-sdk-ui/src/spaces/room.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,17 @@ pub struct SpaceServiceRoom {
3232
pub world_readable: Option<bool>,
3333
pub guest_can_join: bool,
3434

35+
pub children_count: u64,
3536
pub state: Option<RoomState>,
3637
pub heroes: Option<Vec<RoomHero>>,
3738
}
3839

3940
impl SpaceServiceRoom {
40-
pub fn new_from_summary(summary: &RoomSummary, known_room: Option<Room>) -> Self {
41+
pub fn new_from_summary(
42+
summary: &RoomSummary,
43+
known_room: Option<Room>,
44+
children_count: u64,
45+
) -> Self {
4146
Self {
4247
room_id: summary.room_id.clone(),
4348
canonical_alias: summary.canonical_alias.clone(),
@@ -49,12 +54,13 @@ impl SpaceServiceRoom {
4954
join_rule: Some(summary.join_rule.clone()),
5055
world_readable: Some(summary.world_readable),
5156
guest_can_join: summary.guest_can_join,
57+
children_count,
5258
state: known_room.as_ref().map(|r| r.state()),
5359
heroes: known_room.map(|r| r.heroes()),
5460
}
5561
}
5662

57-
pub fn new_from_known(known_room: Room) -> Self {
63+
pub fn new_from_known(known_room: Room, children_count: u64) -> Self {
5864
let room_info = known_room.clone_info();
5965

6066
Self {
@@ -70,6 +76,7 @@ impl SpaceServiceRoom {
7076
.history_visibility()
7177
.map(|vis| *vis == HistoryVisibility::WorldReadable),
7278
guest_can_join: known_room.guest_access() == GuestAccess::CanJoin,
79+
children_count,
7380
state: Some(known_room.state()),
7481
heroes: Some(room_info.heroes().to_vec()),
7582
}

crates/matrix-sdk-ui/src/spaces/room_list.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ impl SpaceServiceRoomList {
6969
new_rooms.iter_mut().find(|room| &room.room_id == updated_room_id)
7070
&& let Some(update_room) = client_clone.get_room(updated_room_id)
7171
{
72-
*room = SpaceServiceRoom::new_from_known(update_room);
72+
*room = SpaceServiceRoom::new_from_known(
73+
update_room,
74+
room.children_count,
75+
);
7376
}
7477
});
7578

@@ -151,8 +154,16 @@ impl SpaceServiceRoomList {
151154
result
152155
.rooms
153156
.iter()
154-
.map(|room| (&room.summary, self.client.get_room(&room.summary.room_id)))
155-
.map(|(summary, room)| SpaceServiceRoom::new_from_summary(summary, room))
157+
.map(|room| {
158+
(
159+
&room.summary,
160+
self.client.get_room(&room.summary.room_id),
161+
room.children_state.len(),
162+
)
163+
})
164+
.map(|(summary, room, children_count)| {
165+
SpaceServiceRoom::new_from_summary(summary, room, children_count as u64)
166+
})
156167
.collect::<Vec<_>>(),
157168
);
158169

@@ -251,6 +262,7 @@ mod tests {
251262
false,
252263
),
253264
None,
265+
0
254266
),
255267
SpaceServiceRoom::new_from_summary(
256268
&RoomSummary::new(
@@ -261,6 +273,7 @@ mod tests {
261273
false,
262274
),
263275
None,
276+
0
264277
),
265278
]
266279
);

0 commit comments

Comments
 (0)