/* * (C) Copyright 2015 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: * Thomas Roger */ package org.nuxeo.ecm.platform.picture.core.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.junit.Test; import org.junit.runner.RunWith; import org.nuxeo.common.utils.FileUtils; import org.nuxeo.ecm.automation.test.AutomationFeature; import org.nuxeo.ecm.core.api.Blob; import org.nuxeo.ecm.core.api.Blobs; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.blobholder.BlobHolder; import org.nuxeo.ecm.core.test.CoreFeature; import org.nuxeo.ecm.platform.picture.PictureMigrationHandler; import org.nuxeo.ecm.platform.picture.api.PictureView; import org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPicture; import org.nuxeo.runtime.test.runner.Deploy; import org.nuxeo.runtime.test.runner.Features; import org.nuxeo.runtime.test.runner.FeaturesRunner; import org.nuxeo.runtime.transaction.TransactionHelper; /** * @since 7.2 */ @RunWith(FeaturesRunner.class) @Features(AutomationFeature.class) @Deploy({ "org.nuxeo.ecm.platform.picture.api", "org.nuxeo.ecm.platform.picture.convert", "org.nuxeo.ecm.platform.picture.core", "org.nuxeo.ecm.platform.commandline.executor" }) public class TestPictureMigrationHandler { @Inject protected CoreFeature coreFeature; @Inject protected CoreSession session; @Test public void testPictureMigration() throws IOException { doTestPictureMigration("test.jpg", "Original_test.jpg"); } @Test public void testPictureMigrationNullFilename() throws IOException { doTestPictureMigration("", null); } public void doTestPictureMigration(String expected, String filename) throws IOException { // create an "old" picture List<Map<String, Serializable>> views = new ArrayList<>(); Map<String, Serializable> map = new HashMap<>(); map.put("title", "Original"); Blob originalBlob = Blobs.createBlob(FileUtils.getResourceFileFromContext(ImagingResourcesHelper.TEST_DATA_FOLDER + "test.jpg"), "image/jpeg", null, null); originalBlob.setFilename(filename); // don't default to file's name when null map.put("content", (Serializable) originalBlob); map.put("filename", filename); views.add(map); Blob thumbnailBlob = Blobs.createBlob(FileUtils.getResourceFileFromContext(ImagingResourcesHelper.TEST_DATA_FOLDER + "test.jpg"), "image/jpeg", null, "Thumbnail_test.jpg"); map = new HashMap<>(); map.put("title", "Thumbnail"); map.put("content", (Serializable) thumbnailBlob); map.put("filename", "Thumbnail_test.jpg"); views.add(map); DocumentModel picture = session.createDocumentModel("/", "picture", "Picture"); picture.setPropertyValue("picture:views", (Serializable) views); picture = session.createDocument(picture); TransactionHelper.commitOrRollbackTransaction(); TransactionHelper.startTransaction(); assertNotNull(picture); assertNull(picture.getPropertyValue("file:content")); MultiviewPicture multiviewPicture = picture.getAdapter(MultiviewPicture.class); PictureView[] pictureViews = multiviewPicture.getViews(); assertNotNull(pictureViews); assertEquals(2, pictureViews.length); // do the migration PictureMigrationHandler pictureMigrationHandler = new PictureMigrationHandler(); pictureMigrationHandler.doInitializeRepository(session); // check that it's correctly migrated picture = session.getDocument(picture.getRef()); assertNotNull(picture); BlobHolder bh = picture.getAdapter(BlobHolder.class); assertNotNull(bh); Blob blob = bh.getBlob(); assertNotNull(blob); String blobFilename = blob.getFilename(); if ("".equals(expected) && !expected.equals(blobFilename) && coreFeature.getStorageConfiguration().isVCSOracle()) { // Oracle confuses "" and null assertNull(blobFilename); } else { assertEquals(expected, blobFilename); } assertNotNull(picture.getPropertyValue("file:content")); multiviewPicture = picture.getAdapter(MultiviewPicture.class); pictureViews = multiviewPicture.getViews(); assertNotNull(pictureViews); assertEquals(1, pictureViews.length); assertNull(multiviewPicture.getView("Original")); assertNotNull(multiviewPicture.getView("Thumbnail")); } }