/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.extension.maven.server.projecttype.handler; import org.eclipse.che.api.core.notification.EventService; import org.eclipse.che.api.project.server.DefaultProjectManager; import org.eclipse.che.api.project.server.Project; import org.eclipse.che.api.project.server.ProjectConfig; import org.eclipse.che.api.project.server.VirtualFileEntry; import org.eclipse.che.api.project.server.handlers.ProjectHandler; import org.eclipse.che.api.project.server.handlers.ProjectHandlerRegistry; import org.eclipse.che.api.project.server.type.ProjectType; import org.eclipse.che.api.project.server.type.ProjectTypeRegistry; import org.eclipse.che.api.vfs.server.ContentStream; import org.eclipse.che.api.vfs.server.VirtualFileSystemRegistry; import org.eclipse.che.api.vfs.server.VirtualFileSystemUser; import org.eclipse.che.api.vfs.server.VirtualFileSystemUserContext; import org.eclipse.che.api.vfs.server.impl.memory.MemoryFileSystemProvider; import org.eclipse.che.commons.lang.IoUtil; import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.ide.extension.maven.shared.MavenAttributes; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import java.io.InputStream; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; /** * @author Vitaly Parfonov */ @RunWith(MockitoJUnitRunner.class) public class AddMavenModuleHandlerTest { private static final String workspace = "my_ws"; private static final String POM_XML_TEMPL = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><project><packaging>%s</packaging></project>"; private AddMavenModuleHandler addMavenModuleHandler; private DefaultProjectManager projectManager; private ProjectTypeRegistry projectTypeRegistry; @Before public void setUp() throws Exception { addMavenModuleHandler = new AddMavenModuleHandler(); ProjectType mavenProjectType = Mockito.mock(ProjectType.class); Mockito.when(mavenProjectType.getId()).thenReturn(MavenAttributes.MAVEN_ID); Mockito.when(mavenProjectType.getDisplayName()).thenReturn(MavenAttributes.MAVEN_ID); Mockito.when(mavenProjectType.canBePrimary()).thenReturn(true); final String vfsUser = "dev"; final Set<String> vfsUserGroups = new LinkedHashSet<>(Arrays.asList("workspace/developer")); final EventService eventService = new EventService(); VirtualFileSystemRegistry vfsRegistry = new VirtualFileSystemRegistry(); final MemoryFileSystemProvider memoryFileSystemProvider = new MemoryFileSystemProvider(workspace, eventService, new VirtualFileSystemUserContext() { @Override public VirtualFileSystemUser getVirtualFileSystemUser() { return new VirtualFileSystemUser(vfsUser, vfsUserGroups); } }, vfsRegistry); vfsRegistry.registerProvider(workspace, memoryFileSystemProvider); Set<ProjectType> projTypes = new HashSet<>(); projTypes.add(mavenProjectType); projectTypeRegistry = new ProjectTypeRegistry(projTypes); Set<ProjectHandler> handlers = new HashSet<>(); ProjectHandlerRegistry handlerRegistry = new ProjectHandlerRegistry(handlers); projectManager = new DefaultProjectManager(vfsRegistry, eventService, projectTypeRegistry, handlerRegistry); } @Test(expected = IllegalArgumentException.class) public void shouldNotAddModuleIfNotPomPackage() throws Exception { String parent = NameGenerator.generate("parent", 5); String module = NameGenerator.generate("module", 5); Project project = projectManager.createProject(workspace, parent, new ProjectConfig(null, MavenAttributes.MAVEN_ID), null, "public"); project.getBaseFolder().createFile("pom.xml", String.format(POM_XML_TEMPL, "jar").getBytes(), "text/xml"); addMavenModuleHandler .onCreateModule(project.getBaseFolder(), project.getPath() + "/" + module, new ProjectConfig(null, "maven"), Collections.<String, String>emptyMap()); } @Test(expected = IllegalArgumentException.class) public void pomNotFound() throws Exception { String parent = NameGenerator.generate("parent", 5); String module = NameGenerator.generate("module", 5); Project project = projectManager.createProject(workspace, parent, new ProjectConfig(null, MavenAttributes.MAVEN_ID), null, "public"); addMavenModuleHandler .onCreateModule(project.getBaseFolder(), project.getPath() + "/" + module, new ProjectConfig(null, "maven"), Collections.<String, String>emptyMap()); } @Test(expected = IllegalArgumentException.class) public void shouldNotAddModuleIfModuleNotMaven() throws Exception { ProjectType notMaven = Mockito.mock(ProjectType.class); Mockito.when(notMaven.getId()).thenReturn("notMaven"); Mockito.when(notMaven.getDisplayName()).thenReturn("notMaven"); Mockito.when(notMaven.canBePrimary()).thenReturn(true); projectTypeRegistry.registerProjectType(notMaven); String parent = NameGenerator.generate("parent", 5); String module = NameGenerator.generate("module", 5); Project project = projectManager.createProject(workspace, parent, new ProjectConfig(null, MavenAttributes.MAVEN_ID), null, "public"); project.getBaseFolder().createFile("pom.xml", String.format(POM_XML_TEMPL, "pom").getBytes(), "text/xml"); addMavenModuleHandler.onCreateModule(project.getBaseFolder(), project.getPath() + "/" + module, new ProjectConfig(null, notMaven.getId()), Collections.<String, String>emptyMap()); } @Test public void addModuleOk() throws Exception { String parent = NameGenerator.generate("parent", 5); String module = NameGenerator.generate("module", 5); Project project = projectManager.createProject(workspace, parent, new ProjectConfig(null, MavenAttributes.MAVEN_ID), null, "public"); project.getBaseFolder().createFile("pom.xml", String.format(POM_XML_TEMPL, "pom").getBytes(), "text/xml"); addMavenModuleHandler.onCreateModule(project.getBaseFolder(), project.getPath() + "/" + module, new ProjectConfig(null, MavenAttributes.MAVEN_ID), Collections.<String, String>emptyMap()); VirtualFileEntry pom = project.getBaseFolder().getChild("pom.xml"); Assert.assertNotNull(pom); ContentStream content = pom.getVirtualFile().getContent(); Assert.assertNotNull(content); InputStream stream = content.getStream(); String pomContent = IoUtil.readStream(stream); Assert.assertNotNull(pomContent); Assert.assertFalse(pomContent.isEmpty()); String mavenModule = String.format("<module>%s</module>", module); Assert.assertTrue(pomContent.contains(mavenModule)); } }