smarty_rust_sdk/international_postal_code_api/
mod.rs

1pub mod candidate;
2pub mod client;
3pub mod lookup;
4
5#[cfg(test)]
6mod tests {
7    use crate::international_postal_code_api::candidate::Candidate;
8    use crate::international_postal_code_api::client::InternationalPostalCodeClient;
9    use crate::international_postal_code_api::lookup::Lookup;
10    use crate::sdk::options::OptionsBuilder;
11    use serde_json::from_str;
12
13    #[test]
14    fn client_test() {
15        let client = InternationalPostalCodeClient::new(OptionsBuilder::new(None).build()).unwrap();
16
17        assert_eq!(
18            client.client.url.to_string(),
19            "https://international-postal-code.api.smarty.com/lookup".to_string()
20        );
21    }
22
23    #[test]
24    fn lookup_test() {
25        let lookup = Lookup {
26            input_id: "ID-8675309".to_string(),
27            locality: "Sao Paulo".to_string(),
28            administrative_area: "SP".to_string(),
29            country: "Brazil".to_string(),
30            postal_code: "02516".to_string(),
31            ..Default::default()
32        };
33
34        let expected_params = vec![
35            ("input_id".to_string(), "ID-8675309".to_string()),
36            ("country".to_string(), "Brazil".to_string()),
37            ("locality".to_string(), "Sao Paulo".to_string()),
38            ("administrative_area".to_string(), "SP".to_string()),
39            ("postal_code".to_string(), "02516".to_string()),
40        ];
41
42        assert_eq!(lookup.into_param_array(), expected_params);
43    }
44
45    #[test]
46    fn candidate_test() {
47        let payload = r#"[
48            {
49                "input_id": "ID-8675309",
50                "administrative_area": "SP",
51                "sub_administrative_area": "Greater Sao Paulo",
52                "super_administrative_area": "Southeast",
53                "country_iso_3": "BRA",
54                "locality": "Sao Paulo",
55                "dependent_locality": "Vila Guilherme",
56                "dependent_locality_name": "Santana",
57                "double_dependent_locality": "Zona Norte",
58                "postal_code": "02516",
59                "postal_code_extra": "050"
60            }
61        ]"#;
62
63        let candidates: Vec<Candidate> = from_str(payload).expect("Failed to deserialize JSON");
64        assert_eq!(candidates.len(), 1);
65
66        let candidate = &candidates[0];
67        assert_eq!(candidate.input_id, "ID-8675309");
68        assert_eq!(candidate.country_iso_3, "BRA");
69        assert_eq!(candidate.locality, "Sao Paulo");
70        assert_eq!(candidate.dependent_locality, "Vila Guilherme");
71        assert_eq!(candidate.dependent_locality_name, "Santana");
72        assert_eq!(candidate.double_dependent_locality, "Zona Norte");
73        assert_eq!(candidate.administrative_area, "SP");
74        assert_eq!(candidate.sub_administrative_area, "Greater Sao Paulo");
75        assert_eq!(candidate.super_administrative_area, "Southeast");
76        assert_eq!(candidate.postal_code, "02516");
77        assert_eq!(candidate.postal_code_extra, "050");
78    }
79}