matrix_sdk_ui/room_list_service/filters/
any.rs1use super::{BoxedFilterFn, Filter};
16
17pub fn new_filter(filters: Vec<BoxedFilterFn>) -> impl Filter {
20 move |room| -> bool { filters.iter().any(|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_is_true() {
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 let filter = |_: &_| true;
39 let any = new_filter(vec![Box::new(filter)]);
40
41 assert!(any(&room));
42 }
43
44 #[async_test]
45 async fn test_one_filter_is_false() {
46 let (client, server) = logged_in_client_with_server().await;
47 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
48
49 let filter = |_: &_| false;
50 let any = new_filter(vec![Box::new(filter)]);
51
52 assert!(any(&room).not());
53 }
54
55 #[async_test]
56 async fn test_two_filters_with_true_true() {
57 let (client, server) = logged_in_client_with_server().await;
58 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
59
60 let filter1 = |_: &_| true;
61 let filter2 = |_: &_| true;
62 let any = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
63
64 assert!(any(&room));
65 }
66
67 #[async_test]
68 async fn test_two_filters_with_true_false() {
69 let (client, server) = logged_in_client_with_server().await;
70 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
71
72 let filter1 = |_: &_| true;
73 let filter2 = |_: &_| false;
74 let any = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
75
76 assert!(any(&room));
77 }
78
79 #[async_test]
80 async fn test_two_filters_with_false_true() {
81 let (client, server) = logged_in_client_with_server().await;
82 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
83
84 let filter1 = |_: &_| false;
85 let filter2 = |_: &_| true;
86 let any = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
87
88 assert!(any(&room));
89 }
90
91 #[async_test]
92 async fn test_two_filters_with_false_false() {
93 let (client, server) = logged_in_client_with_server().await;
94 let [room] = new_rooms([room_id!("!a:b.c")], &client, &server).await;
95
96 let filter1 = |_: &_| false;
97 let filter2 = |_: &_| false;
98 let any = new_filter(vec![Box::new(filter1), Box::new(filter2)]);
99
100 assert!(any(&room).not());
101 }
102}