mod common; use serde_json::json; use wiremock::matchers::{body_json, method, path}; use wiremock::{Mock, MockServer, ResponseTemplate}; #[tokio::test] async fn collections_info_returns_collection() { let server = MockServer::start().await; let client = common::client_for(&server).await; Mock::given(method("POST")) .and(path("/api/collections.info")) .and(body_json(json!({ "id": "col-1" }))) .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "ok": true, "data": { "id": "col-1", "name": "Human Resources", "sharing": false } }))) .mount(&server) .await; let collection = client.collections().info("col-1").await.unwrap(); assert_eq!(collection.name, "Human Resources"); } #[tokio::test] async fn collections_list_returns_page_with_policies() { let server = MockServer::start().await; let client = common::client_for(&server).await; Mock::given(method("POST")) .and(path("/api/collections.list")) .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "ok": true, "data": [{ "id": "col-1", "name": "Human Resources", "sharing": false }], "pagination": { "limit": 25, "offset": 0 }, "policies": [{ "id": "col-1", "abilities": { "update": true, "delete": false } }] }))) .mount(&server) .await; let page = client.collections().list().send().await.unwrap(); assert_eq!(page.items.len(), 1); assert_eq!(page.policies.len(), 1); assert!(page.policies[0].can("update")); assert!(!page.policies[0].can("delete")); assert!(!page.policies[0].can("archive")); } #[tokio::test] async fn collections_documents_returns_nested_tree() { let server = MockServer::start().await; let client = common::client_for(&server).await; Mock::given(method("POST")) .and(path("/api/collections.documents")) .and(body_json(json!({ "id": "col-1" }))) .respond_with(ResponseTemplate::new(200).set_body_json(json!({ "ok": true, "data": [ { "id": "doc-1", "title": "Parent", "children": [ { "id": "doc-2", "title": "Child", "children": [] } ] } ] }))) .mount(&server) .await; let tree = client.collections().documents("col-1").await.unwrap(); assert_eq!(tree.len(), 1); assert_eq!(tree[0].title, "Parent"); assert_eq!(tree[0].children.len(), 1); assert_eq!(tree[0].children[0].title, "Child"); }