dddk_core/dddk/query/bus_impl/
query_dispatcher_test.rs1#[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 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 QueryDispatcher::new(query_handlers);
24
25 }
28
29 #[test]
30 fn it_should_return_an_error_when_dispatch_a_query_with_no_register_handler() {
31 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 let responses = query_bus.dispatch(&another_query);
42
43 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 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 let response = query_bus.dispatch(&a_query);
64
65 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}