busbar_sf_rest/client/
embedded_service.rs1use tracing::instrument;
2
3use busbar_sf_client::security::url as url_security;
4
5use crate::embedded_service::EmbeddedServiceConfig;
6use crate::error::{Error, ErrorKind, Result};
7
8impl super::SalesforceRestClient {
9 #[instrument(skip(self))]
11 pub async fn get_embedded_service_config(
12 &self,
13 config_id: &str,
14 ) -> Result<EmbeddedServiceConfig> {
15 if !url_security::is_valid_salesforce_id(config_id) {
16 return Err(Error::new(ErrorKind::Salesforce {
17 error_code: "INVALID_ID".to_string(),
18 message: "Invalid Salesforce ID format".to_string(),
19 }));
20 }
21 let path = format!("embeddedservice/configuration/{}", config_id);
22 self.client.rest_get(&path).await.map_err(Into::into)
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::super::SalesforceRestClient;
29
30 #[tokio::test]
31 async fn test_get_embedded_service_config_invalid_id() {
32 let client = SalesforceRestClient::new("https://test.salesforce.com", "token").unwrap();
33 let result = client.get_embedded_service_config("bad-id").await;
34 assert!(result.is_err());
35 assert!(result.unwrap_err().to_string().contains("INVALID_ID"));
36 }
37
38 #[tokio::test]
39 async fn test_get_embedded_service_config_wiremock() {
40 use wiremock::matchers::{method, path_regex};
41 use wiremock::{Mock, MockServer, ResponseTemplate};
42
43 let mock_server = MockServer::start().await;
44
45 let body = serde_json::json!({
46 "id": "0Hsxx0000000001AAA",
47 "isEnabled": true,
48 "settings": {
49 "chatButtonId": "573xx0000000001"
50 }
51 });
52
53 Mock::given(method("GET"))
54 .and(path_regex(
55 ".*/embeddedservice/configuration/0Hsxx0000000001AAA$",
56 ))
57 .respond_with(ResponseTemplate::new(200).set_body_json(&body))
58 .mount(&mock_server)
59 .await;
60
61 let client = SalesforceRestClient::new(mock_server.uri(), "test-token").unwrap();
62 let result = client
63 .get_embedded_service_config("0Hsxx0000000001AAA")
64 .await
65 .expect("get_embedded_service_config should succeed");
66 assert_eq!(result.id, "0Hsxx0000000001AAA");
67 assert!(result.is_enabled);
68 }
69}