Skip to main content

uptrakit_openapi_client/
enrollment_tokens.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::enrollment_tokens::{
4    CreateEnrollmentTokenRequest, EnrollmentTokenCreatedResponse, EnrollmentTokenResponse,
5    ListEnrollmentTokensQuery,
6};
7use crate::types_impl::pagination::PaginatedResponse;
8use uuid::Uuid;
9
10impl UptrakitClient {
11    /// Create a new enrollment token.
12    pub async fn create_enrollment_token(
13        &self,
14        req: &CreateEnrollmentTokenRequest,
15    ) -> Result<EnrollmentTokenCreatedResponse> {
16        self.post_json(crate::paths::enrollment_tokens::BASE, req)
17            .await
18    }
19
20    /// List enrollment tokens with pagination.
21    pub async fn list_enrollment_tokens(
22        &self,
23        query: &ListEnrollmentTokensQuery,
24    ) -> Result<PaginatedResponse<EnrollmentTokenResponse>> {
25        self.get_with_query(crate::paths::enrollment_tokens::BASE, query)
26            .await
27    }
28
29    /// Fetch all enrollment tokens across all pages.
30    pub async fn list_all_enrollment_tokens(
31        &self,
32        query: &ListEnrollmentTokensQuery,
33    ) -> Result<Vec<EnrollmentTokenResponse>> {
34        self.fetch_all_pages(crate::paths::enrollment_tokens::BASE, query)
35            .await
36    }
37
38    /// Get a single enrollment token by ID.
39    pub async fn get_enrollment_token(&self, id: &Uuid) -> Result<EnrollmentTokenResponse> {
40        self.get(&crate::paths::enrollment_tokens::by_id(id)).await
41    }
42
43    /// Revoke an enrollment token (soft-delete).
44    pub async fn revoke_enrollment_token(&self, id: &Uuid) -> Result<()> {
45        self.delete(&crate::paths::enrollment_tokens::by_id(id))
46            .await
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use crate::types_impl::enrollment_tokens::{
53        CreateEnrollmentTokenRequest, ListEnrollmentTokensQuery,
54    };
55
56    #[test]
57    fn create_request_serialization() {
58        let req = CreateEnrollmentTokenRequest {
59            name: "CI Token".to_string(),
60            allowed_capabilities: Some(vec!["software_discovery".to_string()]),
61            max_uses: Some(10),
62            expires_in_seconds: Some(3600),
63        };
64        let json = serde_json::to_string(&req).expect("serialize");
65        assert!(json.contains("CI Token"));
66        assert!(json.contains("software_discovery"));
67        let parsed: CreateEnrollmentTokenRequest =
68            serde_json::from_str(&json).expect("deserialize");
69        assert_eq!(parsed.name, "CI Token");
70        assert_eq!(parsed.max_uses, Some(10));
71    }
72
73    #[test]
74    fn list_query_serialization_with_params() {
75        let query = ListEnrollmentTokensQuery {
76            page: Some(2),
77            per_page: Some(25),
78        };
79        let qs = serde_urlencoded::to_string(&query).expect("serialize");
80        assert!(qs.contains("page=2"));
81        assert!(qs.contains("per_page=25"));
82    }
83
84    #[test]
85    fn list_query_serialization_empty() {
86        let query = ListEnrollmentTokensQuery {
87            page: None,
88            per_page: None,
89        };
90        let qs = serde_urlencoded::to_string(&query).expect("serialize");
91        assert!(qs.is_empty());
92    }
93}