shopify_client/admin/access_scope/
mod.rs1pub 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}