dddk_core/dddk/query/bus_impl/
query_dispatcher_test.rs

1#[cfg(test)]
2mod tests {
3    use crate::dddk::errors::NoQueryHandlerRegisterForGivenQuery;
4    use crate::dddk::query::bus_impl::query_dispatcher::QueryDispatcher;
5    use crate::dddk::query::query_bus::QueryBus;
6    use crate::dddk::query::query_handler::QueryHandlerInBus;
7    use crate::dddk::test_tools::some_query_for_test::some_query_for_test::{AnotherQuery, AQuery};
8    use crate::dddk::test_tools::some_query_handler_for_test::some_query_handler_for_test::{AnotherQueryHandler, AQueryHandler};
9    use crate::dddk::test_tools::some_response_for_test::some_response_for_test::AResponse;
10
11    #[test]
12    #[should_panic]
13    fn it_should_panic_when_register_two_command_handler_for_a_same_command() {
14        // Given
15        let a_query_handler_1 = AQueryHandler::new();
16        let a_query_handler_2 = AQueryHandler::new();
17
18        let mut query_handlers = Vec::new() as Vec<Box<dyn QueryHandlerInBus>>;
19        query_handlers.push(Box::new(a_query_handler_1));
20        query_handlers.push(Box::new(a_query_handler_2));
21
22        // When
23        QueryDispatcher::new(query_handlers);
24
25        // Then
26        // should panic
27    }
28
29    #[test]
30    fn it_should_return_an_error_when_dispatch_a_query_with_no_register_handler() {
31        // Given
32        let a_query_handler = AQueryHandler::new();
33
34        let mut query_handlers = Vec::new() as Vec<Box<dyn QueryHandlerInBus>>;
35        query_handlers.push(Box::new(a_query_handler));
36
37        let query_bus = QueryDispatcher::new(query_handlers);
38        let another_query = AnotherQuery {};
39
40        // When
41        let responses = query_bus.dispatch(&another_query);
42
43        // Then
44        assert_eq!(true, responses.is_err());
45        assert_eq!(true, responses.err().unwrap().downcast_ref::<NoQueryHandlerRegisterForGivenQuery>().is_some());
46    }
47
48
49    #[test]
50    fn it_should_be_handled_by_correct_handler_when_dispatch_query() {
51        // Given
52        let a_query_handler = AQueryHandler::new();
53        let another_query_handler = AnotherQueryHandler::new();
54
55        let mut query_handlers = Vec::new() as Vec<Box<dyn QueryHandlerInBus>>;
56        query_handlers.push(Box::new(a_query_handler));
57        query_handlers.push(Box::new(another_query_handler));
58
59        let query_bus = QueryDispatcher::new(query_handlers);
60        let a_query = AQuery {};
61
62        // When
63        let response = query_bus.dispatch(&a_query);
64
65        // Then
66        assert_eq!(true, response.is_ok());
67        let mut response = response.unwrap();
68        let a_response = response.as_mut().as_any().downcast_ref::<AResponse>();
69        assert_eq!(true, a_response.is_some());
70    }
71}