Skip to main content

shopify_client/admin/access_scope/
mod.rs

1pub mod remote;
2
3use crate::common::ServiceContext;
4
5use std::sync::Arc;
6
7use crate::{
8    admin::generated::types::access_scope::AccessScopesResp,
9    common::types::{APIError, RequestCallbacks},
10};
11
12pub struct AccessScope {
13    pub(crate) ctx: ServiceContext,
14}
15
16impl AccessScope {
17    pub fn new(
18        shop_url: Arc<String>,
19        version: Arc<String>,
20        access_token: Arc<String>,
21        callbacks: Arc<RequestCallbacks>,
22    ) -> Self {
23        Self::with_ctx(ServiceContext::new(
24            shop_url,
25            version,
26            access_token,
27            callbacks,
28        ))
29    }
30
31    pub fn with_ctx(ctx: ServiceContext) -> Self {
32        Self { ctx }
33    }
34
35    pub async fn list(&self) -> Result<AccessScopesResp, APIError> {
36        remote::list_access_scopes(&self.ctx).await
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use crate::admin::generated::types::access_scope::AccessScopesResp;
43
44    #[test]
45    fn deserialize_access_scopes_response() {
46        let json = r#"{"access_scopes":[{"handle":"write_orders"},{"handle":"read_products"}]}"#;
47        let resp: AccessScopesResp = serde_json::from_str(json).unwrap();
48        assert_eq!(resp.access_scopes.len(), 2);
49        assert_eq!(resp.access_scopes[0].handle, "write_orders");
50        assert_eq!(resp.access_scopes[1].handle, "read_products");
51    }
52
53    #[test]
54    fn deserialize_empty_access_scopes_response() {
55        let json = r#"{"access_scopes":[]}"#;
56        let resp: AccessScopesResp = serde_json::from_str(json).unwrap();
57        assert!(resp.access_scopes.is_empty());
58    }
59}