package com.marklogic.client.xcc; import com.marklogic.client.document.DocumentWriteOperation; import com.marklogic.client.impl.DocumentWriteOperationImpl; import com.marklogic.client.io.DocumentMetadataHandle; import com.marklogic.client.io.Format; import com.marklogic.client.io.StringHandle; import com.marklogic.xcc.Content; import com.marklogic.xcc.ContentCapability; import com.marklogic.xcc.ContentCreateOptions; import com.marklogic.xcc.ContentPermission; import org.junit.Assert; import org.junit.Test; import org.springframework.util.FileCopyUtils; public class DefaultDocumentWriteOperationAdapterTest extends Assert { private DefaultDocumentWriteOperationAdapter sut = new DefaultDocumentWriteOperationAdapter(); @Test public void test() throws Exception { String xml = "<hello>World</hello>"; String uri = "/test.xml"; DocumentMetadataHandle metadata = new DocumentMetadataHandle(); metadata.withCollections("collection1", "collection2"); metadata.withPermission("role1", DocumentMetadataHandle.Capability.EXECUTE, DocumentMetadataHandle.Capability.READ); metadata.withPermission("role2", DocumentMetadataHandle.Capability.UPDATE); metadata.withPermission("role3", DocumentMetadataHandle.Capability.INSERT); metadata.setFormat(Format.XML); DocumentWriteOperation operation = new DocumentWriteOperationImpl( DocumentWriteOperation.OperationType.DOCUMENT_WRITE, uri, metadata, new StringHandle(xml)); Content content = sut.adapt(operation); assertEquals(uri, content.getUri()); String xccXml = new String(FileCopyUtils.copyToByteArray(content.openDataStream())); assertEquals(xml, xccXml); ContentCreateOptions options = content.getCreateOptions(); String[] collections = options.getCollections(); assertEquals("collection1", collections[0]); assertEquals("collection2", collections[1]); // Permissions are in a set, and thus not ordered, so our assertions a little funky here ContentPermission[] permissions = options.getPermissions(); assertEquals(4, permissions.length); for (ContentPermission perm : permissions) { String role = perm.getRole(); ContentCapability capability = perm.getCapability(); if ("role1".equals(role)) { assertTrue(ContentCapability.EXECUTE.equals(capability) || ContentCapability.READ.equals(capability)); } else if ("role2".equals(role)) { assertEquals(ContentCapability.UPDATE, capability); } else if ("role3".equals(role)) { assertEquals(ContentCapability.INSERT, capability); } else { fail("Unexpected role: " + role); } } } }