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 mut params = AuditLogListParams::default();
35        params.actor_type = Some("user".to_string());
36        params.action_type = Some("plugin_config.create".to_string());
37        params.outcome = Some("success".to_string());
38        params.target_type = Some("plugin_config".to_string());
39        params.target_id = Some("019semantic".to_string());
40        params.from = Some("2025-01-01T00:00:00Z".to_string());
41        params.to = Some("2025-12-31T23:59:59Z".to_string());
42        params.actor_id = Some(actor_id);
43        params.page = Some(2);
44        params.per_page = Some(10);
45        let qs = serde_urlencoded::to_string(&params).expect("serialize");
46        assert!(qs.contains("actor_type=user"));
47        assert!(qs.contains("action_type=plugin_config.create"));
48        assert!(qs.contains("outcome=success"));
49        assert!(qs.contains("target_type=plugin_config"));
50        assert!(qs.contains("target_id=019semantic"));
51        assert!(qs.contains("page=2"));
52        assert!(qs.contains("per_page=10"));
53        assert!(qs.contains("actor_id=11111111-1111-1111-1111-111111111111"));
54    }
55
56    #[test]
57    fn audit_log_list_params_serialization_skips_none() {
58        let params = AuditLogListParams::default();
59        let qs = serde_urlencoded::to_string(&params).expect("serialize");
60        assert!(qs.is_empty());
61    }
62}