/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * 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. */ package org.uberfire.ext.editor.commons.backend.service.naming; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.uberfire.backend.server.util.Paths; import org.uberfire.backend.vfs.Path; import org.uberfire.backend.vfs.PathFactory; import org.uberfire.ext.editor.commons.service.PathNamingService; import org.uberfire.mocks.FileSystemTestingUtils; import org.uberfire.workbench.type.ResourceTypeDefinition; import static org.junit.Assert.*; public class PathNamingServiceImplTest { private static final String PATH_PREFIX = "git://amend-repo-test/"; private static FileSystemTestingUtils fileSystemTestingUtils = new FileSystemTestingUtils(); private PathNamingService pathNamingService; private Collection<ResourceTypeDefinition> resourceTypeDefinitions; @Before public void setup() throws IOException { fileSystemTestingUtils.setup(); resourceTypeDefinitions = createResourceTypeDefinitions(); pathNamingService = createPathNamingService(); } @After public void cleanupFileSystem() { fileSystemTestingUtils.cleanup(); } @Test public void buildTargetPathForFolderInTheSameDirectoryTest() { assertEquals("newFolderName", targetFolderName("originalFolderName", "newFolderName")); assertEquals("newFolderName", targetFolderName("original.folder.name", "newFolderName")); assertEquals("newFolderName", targetFolderName("originalFolder.name", "newFolderName")); assertEquals("new.folder.name", targetFolderName("originalFolderName", "new.folder.name")); assertEquals("new.folder.name", targetFolderName("original.folder.name", "new.folder.name")); assertEquals("new.folder.name", targetFolderName("originalFolder.name", "new.folder.name")); assertEquals("newFolder.name", targetFolderName("originalFolderName", "newFolder.name")); assertEquals("newFolder.name", targetFolderName("original.folder.name", "newFolder.name")); assertEquals("newFolder.name", targetFolderName("originalFolder.name", "newFolder.name")); } @Test public void buildTargetPathForFileInTheSameDirectoryTest() { assertEquals("newFileName", targetFileName("originalFileName", "newFileName")); assertEquals("newFileName.extension2", targetFileName("originalFileName.extension1.extension2", "newFileName")); assertEquals("newFileName.extension", targetFileName("originalFileName.extension", "newFileName")); assertEquals("newFileName.extension1.extension2", targetFileName("originalFileName", "newFileName.extension1.extension2")); assertEquals("newFileName.extension1.extension2.extension2", targetFileName("originalFileName.extension1.extension2", "newFileName.extension1.extension2")); assertEquals("newFileName.extension1.extension2.extension", targetFileName("originalFileName.extension", "newFileName.extension1.extension2")); assertEquals("newFileName.extension", targetFileName("originalFileName", "newFileName.extension")); assertEquals("newFileName.extension.extension2", targetFileName("originalFileName.extension1.extension2", "newFileName.extension")); assertEquals("newFileName.extension.extension", targetFileName("originalFileName.extension", "newFileName.extension")); } @Test public void buildTargetPathForResourceTypeFileInTheSameDirectoryTest() { assertEquals("newFileName.resource", targetFileName("originalFileName.resource", "newFileName")); assertEquals("newFileName.resource.xml", targetFileName("originalFileName.resource.xml", "newFileName")); assertEquals("newFileName.resource.xml.txt", targetFileName("originalFileName.resource.xml.txt", "newFileName")); } @Test public void buildTargetPathForFolderInAnotherDirectoryTest() { Path originalPath = createFolder("parent/folder"); Path targetParentDirectory = createFolder("new-parent"); String targetFileName = "new-folder"; Path targetPath = pathNamingService.buildTargetPath(originalPath, targetParentDirectory, targetFileName); assertEquals(targetParentDirectory.toURI() + "/" + targetFileName, targetPath.toURI()); } @Test public void buildTargetPathForFileInAnotherDirectoryTest() { String extension = ".txt"; Path originalPath = createFile("parent/file" + extension); Path targetParentDirectory = createFolder("new-parent"); String targetFileName = "new-file"; Path targetPath = pathNamingService.buildTargetPath(originalPath, targetParentDirectory, targetFileName); assertEquals(targetParentDirectory.toURI() + "/" + targetFileName + extension, targetPath.toURI()); } @Test public void buildTargetPathForResourceTypeFileInAnotherDirectoryTest() { String extension = ".resource.xml.txt"; Path originalPath = createFile("parent/resource-file" + extension); Path targetParentDirectory = createFolder("new-parent"); String targetFileName = "new-resource-file"; Path targetPath = pathNamingService.buildTargetPath(originalPath, targetParentDirectory, targetFileName); assertEquals(targetParentDirectory.toURI() + "/" + targetFileName + extension, targetPath.toURI()); } private Path createFolder(final String folderName) { return Paths.convert(Paths.convert(PathFactory.newPath("file", PATH_PREFIX + folderName + "/file")).getParent()); } private Path createFile(final String fileName) { return PathFactory.newPath(fileName, PATH_PREFIX + fileName); } private String targetFolderName(final String originalFolderName, final String newFolderName) { final Path path = PathFactory.newPath("file", PATH_PREFIX + originalFolderName + "/file"); fileSystemTestingUtils.getIoService().write(Paths.convert(path), "content"); return pathNamingService.buildTargetPath(Paths.convert(Paths.convert(path).getParent()), newFolderName).getFileName(); } private String targetFileName(final String originalFileName, final String newFileName) { final Path path = PathFactory.newPath(originalFileName, PATH_PREFIX + originalFileName); fileSystemTestingUtils.getIoService().write(Paths.convert(path), "content"); return pathNamingService.buildTargetPath(path, newFileName).getFileName(); } private PathNamingService createPathNamingService() { return new PathNamingServiceImpl() { @Override public Iterable<ResourceTypeDefinition> getResourceTypeDefinitions() { return resourceTypeDefinitions; } }; } private Collection<ResourceTypeDefinition> createResourceTypeDefinitions() { List<ResourceTypeDefinition> resourceTypeDefinitions = new ArrayList<>(); resourceTypeDefinitions.add(createResourceTypeDefinition("resource")); resourceTypeDefinitions.add(createResourceTypeDefinition("resource.xml")); resourceTypeDefinitions.add(createResourceTypeDefinition("resource.xml.txt")); return resourceTypeDefinitions; } private ResourceTypeDefinition createResourceTypeDefinition(String suffix) { return new ResourceTypeDefinition() { @Override public String getShortName() { return null; } @Override public String getDescription() { return null; } @Override public String getPrefix() { return null; } @Override public String getSuffix() { return suffix; } @Override public int getPriority() { return 0; } @Override public String getSimpleWildcardPattern() { return null; } @Override public boolean accept(final org.uberfire.backend.vfs.Path path) { return false; } }; } }