pact_verifier/
request_response.rs1use ansi_term::Colour::*;
2use ansi_term::Style;
3
4use pact_matching::Mismatch;
5use pact_models::sync_interaction::RequestResponseInteraction;
6
7use crate::{generate_display_for_result, MismatchResult};
8
9pub fn process_request_response_result(
10 interaction: &RequestResponseInteraction,
11 match_result: &Result<Option<String>, MismatchResult>,
12 output: &mut Vec<String>,
13 coloured: bool) {
14 let plain = Style::new();
15 match match_result {
16 Ok(_) => {
17 generate_display_for_result(
18 interaction.response.status,
19 if coloured { Green.paint("OK") } else { plain.paint("OK") },
20 interaction.response.headers.clone().map(|h| h.iter().map(|(k, v)| {
21 (k.clone(), v.join(", "), if coloured { Green.paint("OK") } else { plain.paint("OK") })
22 }).collect()), if coloured { Green.paint("OK") } else { plain.paint("OK") },
23 output,
24 coloured
25 );
26 },
27 Err(err) => match err {
28 MismatchResult::Error(err_des, _) => {
29 if coloured {
30 output.push(format!(" {}", Red.paint(format!("Request Failed - {}", err_des))));
31 } else {
32 output.push(format!(" {}", format!("Request Failed - {}", err_des)));
33 }
34 },
35 MismatchResult::Mismatches { mismatches, .. } => {
36 let status_result = if mismatches.iter().any(|m| m.mismatch_type() == "StatusMismatch") {
37 if coloured { Red.paint("FAILED") } else { plain.paint("FAILED") }
38 } else {
39 if coloured { Green.paint("OK") } else { plain.paint("OK") }
40 };
41 let header_results = match interaction.response.headers {
42 Some(ref h) => Some(h.iter().map(|(k, v)| {
43 (k.clone(), v.join(", "), if mismatches.iter().any(|m| {
44 match *m {
45 Mismatch::HeaderMismatch { ref key, .. } => k == key,
46 _ => false
47 }
48 }) {
49 if coloured { Red.paint("FAILED") } else { plain.paint("FAILED") }
50 } else {
51 if coloured { Green.paint("OK") } else { plain.paint("OK") }
52 })
53 }).collect()),
54 None => None
55 };
56 let body_result = if mismatches.iter().any(|m| m.mismatch_type() == "BodyMismatch" ||
57 m.mismatch_type() == "BodyTypeMismatch") {
58 if coloured { Red.paint("FAILED") } else { plain.paint("FAILED") }
59 } else {
60 if coloured { Green.paint("OK") } else { plain.paint("OK") }
61 };
62
63 generate_display_for_result(interaction.response.status, status_result, header_results,
64 body_result, output, coloured);
65 }
66 }
67 }
68}