matrix_sdk_ui/room_list_service/filters/
all.rs1use super::{BoxedFilterFn, Filter};
16
17pub fn new_filter(filters: Vec<BoxedFilterFn>) -> impl Filter {
20 move |room| -> bool { filters.iter().all(|filter| filter(room)) }
21}
22
23#[cfg(test)]
24mod tests {
25 use std::ops::Not;
26
27 use matrix_sdk::test_utils::logged_in_client_with_server;
28 use matrix_sdk_test::async_test;
29 use ruma::room_id;
30
31 use super::{super::new_rooms, *};
32
33 #[async_test]
34 async fn test_one_filter() {
35 let (client, server) = logged_in_client_with_server().await;
36 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
37
38 {
39 let filter = |_: &_| true;
40 let all = new_filter(vec![Box::new(filter)]);
41
42 assert!(all(&room));
43 }
44
45 {
46 let filter = |_: &_| false;
47 let all = new_filter(vec![Box::new(filter)]);
48
49 assert!(all(&room).not());
50 }
51 }
52
53 #[async_test]
54 async fn test_two_filters() {
55 let (client, server) = logged_in_client_with_server().await;
56 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
57
58 {
59 let filter1 = |_: &_| true;
60 let filter2 = |_: &_| true;
61 let all = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
62
63 assert!(all(&room));
64 }
65
66 {
67 let filter1 = |_: &_| true;
68 let filter2 = |_: &_| false;
69 let all = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
70
71 assert!(all(&room).not());
72 }
73
74 {
75 let filter1 = |_: &_| false;
76 let filter2 = |_: &_| true;
77 let all = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
78
79 assert!(all(&room).not());
80 }
81
82 {
83 let filter1 = |_: &_| false;
84 let filter2 = |_: &_| false;
85 let all = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
86
87 assert!(all(&room).not());
88 }
89 }
90}