Skip to main content

busbar_sf_rest/client/
embedded_service.rs

1use 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    /// Get embedded service configuration by ID.
10    #[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}