Skip to main content

uptrakit_openapi_client/
audit_logs.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::audit_logs::{AuditLogListParams, AuditLogResponse, SystemAuditLogResponse};
4use crate::types_impl::pagination::PaginatedResponse;
5
6impl UptrakitClient {
7    /// List tenant-scoped audit log entries with optional filters and pagination.
8    pub async fn list_audit_logs(
9        &self,
10        params: &AuditLogListParams,
11    ) -> Result<PaginatedResponse<AuditLogResponse>> {
12        self.get_with_query(crate::paths::audit_logs::BASE, params)
13            .await
14    }
15
16    /// List system-level audit log entries with optional filters and pagination.
17    pub async fn list_system_audit_logs(
18        &self,
19        params: &AuditLogListParams,
20    ) -> Result<PaginatedResponse<SystemAuditLogResponse>> {
21        self.get_with_query(crate::paths::audit_logs::SYSTEM, params)
22            .await
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use crate::types_impl::audit_logs::AuditLogListParams;
29    use uuid::Uuid;
30
31    #[test]
32    fn audit_log_list_params_serialization_with_semantic_filters() {
33        let actor_id = Uuid::parse_str("11111111-1111-1111-1111-111111111111").expect("valid uuid");
34        let params = AuditLogListParams {
35            actor_type: Some("user".to_string()),
36            action_type: Some("plugin_config.create".to_string()),
37            outcome: Some("success".to_string()),
38            target_type: Some("plugin_config".to_string()),
39            target_id: Some("019semantic".to_string()),
40            from: Some("2025-01-01T00:00:00Z".to_string()),
41            to: Some("2025-12-31T23:59:59Z".to_string()),
42            actor_id: Some(actor_id),
43            page: Some(2),
44            per_page: Some(10),
45        };
46        let qs = serde_urlencoded::to_string(&params).expect("serialize");
47        assert!(qs.contains("actor_type=user"));
48        assert!(qs.contains("action_type=plugin_config.create"));
49        assert!(qs.contains("outcome=success"));
50        assert!(qs.contains("target_type=plugin_config"));
51        assert!(qs.contains("target_id=019semantic"));
52        assert!(qs.contains("page=2"));
53        assert!(qs.contains("per_page=10"));
54        assert!(qs.contains("actor_id=11111111-1111-1111-1111-111111111111"));
55    }
56
57    #[test]
58    fn audit_log_list_params_serialization_skips_none() {
59        let params = AuditLogListParams::default();
60        let qs = serde_urlencoded::to_string(&params).expect("serialize");
61        assert!(qs.is_empty());
62    }
63}