/* * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * Nuxeo - initial API and implementation * * $Id: TestExportedDocument.java 29029 2008-01-14 18:38:14Z ldoguin $ */ package org.nuxeo.ecm.core.io.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.security.MessageDigest; import javax.inject.Inject; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.nuxeo.common.utils.FileUtils; import org.nuxeo.ecm.core.api.Blob; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; import org.nuxeo.ecm.core.io.DocumentPipe; import org.nuxeo.ecm.core.io.DocumentReader; import org.nuxeo.ecm.core.io.DocumentWriter; import org.nuxeo.ecm.core.io.impl.plugins.DocumentModelWriter; import org.nuxeo.ecm.core.io.impl.plugins.NuxeoArchiveReader; import org.nuxeo.ecm.core.test.CoreFeature; import org.nuxeo.ecm.core.test.annotations.Granularity; import org.nuxeo.ecm.core.test.annotations.RepositoryConfig; import org.nuxeo.runtime.test.runner.Features; import org.nuxeo.runtime.test.runner.FeaturesRunner; @RunWith(FeaturesRunner.class) @Features(CoreFeature.class) @RepositoryConfig(cleanup = Granularity.METHOD) public class TestImportModifiedZipArchive { @Inject protected CoreSession session; DocumentModel rootDocument; DocumentModel workspace; DocumentModel docToExport; @Test public void testImportUnModifiedArchive() throws Exception { File archive = FileUtils.getResourceFileFromContext("archive.zip"); // import DocumentReader reader = new NuxeoArchiveReader(archive); DocumentWriter writer = new DocumentModelWriter(session, "/"); DocumentPipe pipe = new DocumentPipeImpl(10); pipe.setReader(reader); pipe.setWriter(writer); pipe.run(); // check result DocumentModelList children = session.getChildren(session.getRootDocument().getRef()); assertEquals(1, children.size()); DocumentModel importedWS = children.get(0); assertEquals("test WS", importedWS.getTitle()); children = session.getChildren(importedWS.getRef()); DocumentModel importedDocument = children.get(0); Blob blob = (Blob) importedDocument.getProperty("file", "content"); assertEquals("dummyBlob.txt", blob.getFilename()); assertEquals("SomeDummyContent", blob.getString()); byte[] expected = MessageDigest.getInstance("MD5").digest("SomeDummyContent".getBytes()); String source = Base64.encodeBase64String(expected); byte[] actual = MessageDigest.getInstance("MD5").digest(IOUtils.toByteArray(blob.getStream())); String result = Base64.encodeBase64String(actual); assertEquals(source, result); } @Test public void testImportModifiedArchive() throws Exception { File archive = FileUtils.getResourceFileFromContext("modified_archive.zip"); // import DocumentReader reader = new NuxeoArchiveReader(archive); DocumentWriter writer = new DocumentModelWriter(session, "/"); DocumentPipe pipe = new DocumentPipeImpl(10); pipe.setReader(reader); pipe.setWriter(writer); pipe.run(); // check result DocumentModelList children = session.getChildren(session.getRootDocument().getRef()); assertEquals(1, children.size()); DocumentModel importedWS = children.get(0); assertEquals("test WS (imported)", importedWS.getTitle()); children = session.getChildren(importedWS.getRef()); DocumentModel importedDocument = children.get(0); Blob blob = (Blob) importedDocument.getProperty("file", "content"); assertEquals("dummyBlob.txt", blob.getFilename()); assertEquals("SomeDummyContentImported\n", blob.getString()); } @Test public void testImportModifiedArchiveWithNewItems() throws Exception { File archive = FileUtils.getResourceFileFromContext("modified_archive2.zip"); // import DocumentReader reader = new NuxeoArchiveReader(archive); DocumentWriter writer = new DocumentModelWriter(session, "/"); DocumentPipe pipe = new DocumentPipeImpl(10); pipe.setReader(reader); pipe.setWriter(writer); pipe.run(); // check result DocumentModelList children = session.getChildren(session.getRootDocument().getRef()); assertEquals(1, children.size()); DocumentModel importedWS = children.get(0); assertEquals("test WS (imported)", importedWS.getTitle()); children = session.getChildren(importedWS.getRef()); assertEquals(2, children.size()); children = session.getChildren(importedWS.getRef(), "File"); assertEquals(1, children.size()); DocumentModel importedDocument = children.get(0); Blob blob = (Blob) importedDocument.getProperty("file", "content"); assertEquals("dummyBlob.txt", blob.getFilename()); assertEquals("SomeDummyContentImported\n", blob.getString()); children = session.getChildren(importedWS.getRef(), "Folder"); assertEquals(1, children.size()); DocumentModel newFolder = children.get(0); assertEquals("subfolder created from import", newFolder.getTitle()); children = session.getChildren(newFolder.getRef(), "File"); assertEquals(1, children.size()); DocumentModel createdDocument = children.get(0); assertEquals("Created File", createdDocument.getTitle()); blob = (Blob) createdDocument.getProperty("file", "content"); assertEquals("newBlob.txt", blob.getFilename()); assertEquals("NewContent\n", blob.getString()); } @Test public void testImportContentTemplateArchive() throws Exception { File archive = FileUtils.getResourceFileFromContext("export.zip"); // import DocumentReader reader = new NuxeoArchiveReader(archive); DocumentWriter writer = new DocumentModelWriter(session, "/"); DocumentPipe pipe = new DocumentPipeImpl(10); pipe.setReader(reader); pipe.setWriter(writer); pipe.run(); session.save(); // check result StringBuffer sb = new StringBuffer(); DocumentModelList docs = session.query("select * from Document order by ecm:path"); for (DocumentModel doc : docs) { sb.append(doc.getPathAsString() + " - " + doc.getType() + " -- " + doc.getTitle()); sb.append("\n"); } String dump = sb.toString(); assertTrue(dump.contains("testZipImport - Folder")); assertTrue(dump.contains("hello file - File")); assertTrue(dump.contains("HelloNote - Note")); assertTrue(dump.contains("SubFolder - Folder")); assertTrue(dump.contains("SubNote - Note")); } }