Skip to main content

uptrakit_openapi_client/
users.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::users::{
4    ApplyPresetRequest, UpdateUserActiveRequest, UpdateUserRolesRequest, UserWithRolesResponse,
5};
6use uuid::Uuid;
7
8impl UptrakitClient {
9    /// List all users with their roles and resolved permissions.
10    pub async fn list_users(&self) -> Result<Vec<UserWithRolesResponse>> {
11        self.get(crate::paths::users::BASE).await
12    }
13
14    /// Get a single user by ID with roles and permissions.
15    pub async fn get_user(&self, id: &Uuid) -> Result<UserWithRolesResponse> {
16        self.get(&crate::paths::users::by_id(id)).await
17    }
18
19    /// Replace a user's roles.
20    pub async fn update_user_roles(
21        &self,
22        id: &Uuid,
23        req: &UpdateUserRolesRequest,
24    ) -> Result<UserWithRolesResponse> {
25        self.put_json(&crate::paths::users::roles(id), req).await
26    }
27
28    /// Activate or deactivate a user.
29    pub async fn update_user_active(
30        &self,
31        id: &Uuid,
32        req: &UpdateUserActiveRequest,
33    ) -> Result<UserWithRolesResponse> {
34        self.put_json(&crate::paths::users::active(id), req).await
35    }
36
37    /// Apply an access preset to a user, replacing their roles.
38    pub async fn apply_preset(
39        &self,
40        id: &Uuid,
41        req: &ApplyPresetRequest,
42    ) -> Result<UserWithRolesResponse> {
43        self.post_json(&crate::paths::users::apply_preset(id), req)
44            .await
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use crate::types_impl::users::{
51        ApplyPresetRequest, UpdateUserActiveRequest, UpdateUserRolesRequest,
52    };
53
54    #[test]
55    fn update_user_roles_request_serialization() {
56        let id: uuid::Uuid = "550e8400-e29b-41d4-a716-446655440000".parse().unwrap();
57        let req = UpdateUserRolesRequest { role_ids: vec![id] };
58        let json = serde_json::to_value(&req).expect("serialize");
59        assert_eq!(json["role_ids"][0], "550e8400-e29b-41d4-a716-446655440000");
60    }
61
62    #[test]
63    fn update_user_active_request_serialization() {
64        let req = UpdateUserActiveRequest { is_active: false };
65        let json = serde_json::to_value(&req).expect("serialize");
66        assert_eq!(json["is_active"], false);
67    }
68
69    #[test]
70    fn apply_preset_request_serialization() {
71        let req = ApplyPresetRequest {
72            preset: "admin".to_string(),
73        };
74        let json = serde_json::to_value(&req).expect("serialize");
75        assert_eq!(json["preset"], "admin");
76    }
77}