Skip to content

Commit 7017768

Browse files
committed
action custom body fix tests
1 parent 728d2bc commit 7017768

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

tests/redirectionio_router_test.rs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,108 @@ fn test_06_emojis_1() {
830830
assert_eq!(action.should_log_request(true, response_status_code, None), true);
831831
}
832832

833+
fn setup_action_custom_body() -> Router<Rule> {
834+
let config: RouterConfig = serde_json::from_str(r#"{"always_match_any_host":false,"ignore_header_case":false,"ignore_host_case":false,"ignore_marketing_query_params":true,"ignore_path_and_query_case":false,"marketing_query_params":["utm_source","utm_medium","utm_campaign","utm_term","utm_content"],"pass_marketing_query_params_to_target":true}"#).expect("cannot deserialize");
835+
let mut router = Router::<Rule>::from_config(config);
836+
837+
let route_1: Rule = serde_json::from_str(r#"{"body_filters":[{"action":"replace_text","content":"{\"pets\":[{\"name\":\"Jo\",\"species\":\"Parrot\",\"birthYear\":2016},{\"name\":\"Charlotte\",\"species\":\"Cat\",\"birthYear\":2008}]}"}],"header_filters":[{"action":"override","header":"Content-Type","value":"application/json"}],"id":"action-custom-body","rank":0,"source":{"path":"/json-body"}}"#).expect("cannot deserialize");
838+
router.insert(route_1.into_route(&router.config));
839+
840+
let route_2: Rule = serde_json::from_str(r#"{"body_filters":[{"action":"replace_text","content":"{\"pets\":[{\"name\":\"Jo\",\"species\":\"Parrot\",\"birthYear\":2016},{\"name\":\"Charlotte\",\"species\":\"Cat\",\"birthYear\":2008}]}"}],"header_filters":[{"action":"override","header":"Content-Type","value":"text/javascript"}],"id":"action-custom-body-with-header","rank":0,"source":{"path":"/json-body-and-header"}}"#).expect("cannot deserialize");
841+
router.insert(route_2.into_route(&router.config));
842+
843+
router
844+
}
845+
846+
847+
#[test]
848+
fn test_action_custom_body_1() {
849+
let router = setup_action_custom_body();
850+
let default_config = RouterConfig::default();
851+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/json-body"#), r#"/json-body"#.to_string(),None,None,None,None,None);
852+
853+
let request_configured = Request::rebuild_with_config(&router.config, &request);
854+
let matched = router.match_request(&request_configured);
855+
let traces = router.trace_request(&request_configured);
856+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
857+
858+
assert_eq!(!matched.is_empty(), true);
859+
assert_eq!(!routes_traces.is_empty(), true);
860+
861+
let mut action = Action::from_routes_rule(matched, &request_configured, None);
862+
let response_status_code = 0;
863+
864+
let action_status_code = action.get_status_code(response_status_code, None);
865+
assert_eq!(action_status_code, 0);
866+
let body_filter_opt = action.create_filter_body(response_status_code, &[]);
867+
assert_eq!(body_filter_opt.is_some(), true);
868+
869+
let mut body_filter = body_filter_opt.unwrap();
870+
let mut new_body = body_filter.filter(r#""#.as_bytes().to_vec(), None);
871+
new_body.extend(body_filter.end(None));
872+
assert_eq!(new_body, r#"{"pets":[{"name":"Jo","species":"Parrot","birthYear":2016},{"name":"Charlotte","species":"Cat","birthYear":2008}]}"#.as_bytes().to_vec());
873+
assert_eq!(action.should_log_request(true, response_status_code, None), true);
874+
let mut response_headers = Vec::new();
875+
876+
response_headers.push(Header {
877+
name: r#"Content-Type"#.to_string(),
878+
value: r#"text/plain"#.to_string(),
879+
});
880+
881+
let filtered_headers = action.filter_headers(response_headers, response_status_code, false, None);
882+
let header_map = Header::create_header_map(filtered_headers);
883+
884+
let value = header_map.get(r#"Content-Type"#);
885+
886+
assert!(value.is_some());
887+
assert_eq!(value.unwrap(), r#"application/json"#);
888+
889+
}
890+
891+
#[test]
892+
fn test_action_custom_body_2() {
893+
let router = setup_action_custom_body();
894+
let default_config = RouterConfig::default();
895+
let request = Request::new(PathAndQueryWithSkipped::from_config(&default_config, r#"/json-body-and-header"#), r#"/json-body-and-header"#.to_string(),None,None,None,None,None);
896+
897+
let request_configured = Request::rebuild_with_config(&router.config, &request);
898+
let matched = router.match_request(&request_configured);
899+
let traces = router.trace_request(&request_configured);
900+
let routes_traces = Trace::<Rule>::get_routes_from_traces(&traces);
901+
902+
assert_eq!(!matched.is_empty(), true);
903+
assert_eq!(!routes_traces.is_empty(), true);
904+
905+
let mut action = Action::from_routes_rule(matched, &request_configured, None);
906+
let response_status_code = 0;
907+
908+
let action_status_code = action.get_status_code(response_status_code, None);
909+
assert_eq!(action_status_code, 0);
910+
let body_filter_opt = action.create_filter_body(response_status_code, &[]);
911+
assert_eq!(body_filter_opt.is_some(), true);
912+
913+
let mut body_filter = body_filter_opt.unwrap();
914+
let mut new_body = body_filter.filter(r#""#.as_bytes().to_vec(), None);
915+
new_body.extend(body_filter.end(None));
916+
assert_eq!(new_body, r#"{"pets":[{"name":"Jo","species":"Parrot","birthYear":2016},{"name":"Charlotte","species":"Cat","birthYear":2008}]}"#.as_bytes().to_vec());
917+
assert_eq!(action.should_log_request(true, response_status_code, None), true);
918+
let mut response_headers = Vec::new();
919+
920+
response_headers.push(Header {
921+
name: r#"Content-Type"#.to_string(),
922+
value: r#"text/plain"#.to_string(),
923+
});
924+
925+
let filtered_headers = action.filter_headers(response_headers, response_status_code, false, None);
926+
let header_map = Header::create_header_map(filtered_headers);
927+
928+
let value = header_map.get(r#"Content-Type"#);
929+
930+
assert!(value.is_some());
931+
assert_eq!(value.unwrap(), r#"text/javascript"#);
932+
933+
}
934+
833935
fn setup_action_disable_log() -> Router<Rule> {
834936
let config: RouterConfig = serde_json::from_str(r#"{"always_match_any_host":false,"ignore_header_case":false,"ignore_host_case":false,"ignore_marketing_query_params":true,"ignore_path_and_query_case":false,"marketing_query_params":["utm_source","utm_medium","utm_campaign","utm_term","utm_content"],"pass_marketing_query_params_to_target":true}"#).expect("cannot deserialize");
835937
let mut router = Router::<Rule>::from_config(config);

0 commit comments

Comments
 (0)