package test.org.korsakow.command; import java.io.File; import java.util.Collection; import java.util.HashMap; import org.junit.Assert; import org.dsrg.soenea.uow.UoW; import org.junit.Before; import org.junit.Test; import org.korsakow.domain.ProjectFactory; import org.korsakow.domain.command.AdjustToRelativePathsCommand; import org.korsakow.domain.command.Request; import org.korsakow.domain.command.Response; import org.korsakow.domain.interf.IMedia; import org.korsakow.domain.interf.IProject; import org.korsakow.domain.interf.IVideo; import org.korsakow.ide.DataRegistry; import org.korsakow.ide.util.FileUtil; import test.org.korsakow.domain.AbstractDomainObjectTestCase; import test.util.DOFactory; import test.util.DomainTestUtil; public class TestAdjustToRelativePathsCommand extends AbstractDomainObjectTestCase { @Override @Before public void setUp() throws Exception { super.setUp(); DomainTestUtil.setupDataRegistry(DataRegistry.getFile(), DataRegistry.createDefaultDocument()); } @Test public void testNotInSubfolderFailure() throws Exception { IProject project = DOFactory.createDefaultTestProject(parentDir); Assert.assertFalse(project.getMedia().isEmpty()); HashMap<IMedia, String> relativePathMap = new HashMap<IMedia, String>(); HashMap<IMedia, String> absolutePathMap = new HashMap<IMedia, String>(); final String basePath = dataFile.getParentFile().getAbsolutePath(); // System.out.println(String.format("BasePath: %s", basePath)); for (IMedia medium : project.getMedia()) { // System.out.println("Media: " + medium.getFilename()); Assert.assertTrue(new File(medium.getFilename()).exists()); Assert.assertTrue(medium.getFilename().startsWith(basePath)); absolutePathMap.put(medium, medium.getFilename()); relativePathMap.put(medium, medium.getFilename().substring(basePath.length()+1)); UoW.getCurrent().registerDirty(medium); } IMedia failureMedium = DOFactory.createDummyMedia(FileUtil.createTempDirectory("mama", "dada")); project.getMedia().add(failureMedium); UoW.getCurrent().commit(); UoW.newCurrent(); Request request = new Request(); request.set("id", project.getId()); request.set("basePath", basePath); Response response = new Response(); new AdjustToRelativePathsCommand(request, response).execute(); Assert.assertEquals(Boolean.FALSE, response.getBoolean("status")); Assert.assertNull(response.get("media")); } @Test public void testInitialFilenameRelativeSuccess() throws Exception { IProject project = DOFactory.createDefaultTestProject(parentDir); Assert.assertFalse(project.getMedia().isEmpty()); HashMap<IMedia, String> absolutePathMap = new HashMap<IMedia, String>(); final String basePath = dataFile.getParentFile().getAbsolutePath(); // System.out.println(String.format("BasePath: %s", basePath)); for (IMedia medium : project.getMedia()) { // System.out.println("Media: " + medium.getFilename()); Assert.assertTrue(new File(medium.getFilename()).exists()); Assert.assertTrue(medium.getFilename().startsWith(basePath)); absolutePathMap.put(medium, medium.getFilename()); System.out.println(medium.getFilename()); medium.setFilename(medium.getFilename().substring(basePath.length()+1)); UoW.getCurrent().registerDirty(medium); } UoW.getCurrent().commit(); UoW.newCurrent(); Request request = new Request(); request.set("id", project.getId()); request.set("basePath", basePath); Response response = new Response(); new AdjustToRelativePathsCommand(request, response).execute(); Collection<IMedia> actualMedia = (Collection<IMedia>)response.get("media"); Assert.assertEquals(Boolean.TRUE, response.getBoolean("status")); for (IMedia medium : actualMedia) { String absolutePath = absolutePathMap.get(medium); Assert.assertEquals(absolutePath, basePath + File.separator + medium.getFilename()); } } @Test public void testInitialFilenameAbsoluteSuccess() throws Exception { IProject project = DOFactory.createDefaultTestProject(parentDir); Assert.assertFalse(project.getMedia().isEmpty()); HashMap<IMedia, String> absolutePathMap = new HashMap<IMedia, String>(); final String basePath = dataFile.getParentFile().getAbsolutePath(); // System.out.println(String.format("BasePath: %s", basePath)); for (IMedia medium : project.getMedia()) { // System.out.println("Media: " + medium.getFilename()); Assert.assertTrue(new File(medium.getAbsoluteFilename()).exists()); absolutePathMap.put(medium, medium.getAbsoluteFilename()); UoW.getCurrent().registerDirty(medium); } UoW.getCurrent().commit(); UoW.newCurrent(); Request request = new Request(); request.set("id", project.getId()); request.set("basePath", basePath); Response response = new Response(); new AdjustToRelativePathsCommand(request, response).execute(); Collection<IMedia> actualMedia = (Collection<IMedia>)response.get("media"); Assert.assertEquals(Boolean.TRUE, response.getBoolean("status")); for (IMedia medium : actualMedia) { String absolutePath = absolutePathMap.get(medium); Assert.assertEquals(absolutePath, basePath + File.separator + medium.getFilename()); } } @Test public void testSubtitlesWithInitialFilenameAbsoluteSuccess() throws Exception { IProject project = ProjectFactory.createNew(); IVideo video = DOFactory.createVideo(DOFactory.getEmptyPNGFile(parentDir)); File subtitleFile = File.createTempFile("subtitle", ".txt", parentDir); video.setSubtitles(subtitleFile.getAbsolutePath()); UoW.getCurrent().commit(); UoW.newCurrent(); final String basePath = dataFile.getParentFile().getAbsolutePath(); Request request = new Request(); request.set("id", project.getId()); request.set("basePath", basePath); Response response = new Response(); new AdjustToRelativePathsCommand(request, response).execute(); Collection<IMedia> actualMedia = (Collection<IMedia>)response.get("media"); IVideo actualVideo = (IVideo)actualMedia.iterator().next(); Assert.assertEquals(Boolean.TRUE, response.getBoolean("status")); Assert.assertEquals(subtitleFile.getAbsolutePath(), basePath + File.separator + actualVideo.getSubtitles()); } @Test public void testSubtitlesWithInitialFilenameRelativeSuccess() throws Exception { IProject project = ProjectFactory.createNew(); IVideo video = DOFactory.createVideo(DOFactory.getEmptyPNGFile(parentDir)); File subtitleFile = File.createTempFile("subtitle", ".txt", parentDir); final String basePath = dataFile.getParentFile().getAbsolutePath(); video.setSubtitles(subtitleFile.getAbsolutePath().substring(basePath.length()+1)); UoW.getCurrent().commit(); UoW.newCurrent(); Request request = new Request(); request.set("id", project.getId()); request.set("basePath", basePath); Response response = new Response(); new AdjustToRelativePathsCommand(request, response).execute(); Collection<IMedia> actualMedia = (Collection<IMedia>)response.get("media"); IVideo actualVideo = (IVideo)actualMedia.iterator().next(); Assert.assertEquals(Boolean.TRUE, response.getBoolean("status")); Assert.assertEquals(subtitleFile.getAbsolutePath(), basePath + File.separator + actualVideo.getSubtitles()); } }