/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * 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: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.maven.internal; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import java.io.IOException; import java.util.Collections; import java.util.UUID; import org.easymock.Capture; import org.eclipse.skalli.model.Project; import org.eclipse.skalli.model.ValidationException; import org.eclipse.skalli.model.ext.devinf.DevInfProjectExt; import org.eclipse.skalli.model.ext.maven.MavenCoordinateUtil; import org.eclipse.skalli.model.ext.maven.MavenPomResolver; import org.eclipse.skalli.model.ext.maven.MavenProjectExt; import org.eclipse.skalli.model.ext.maven.MavenReactor; import org.eclipse.skalli.model.ext.maven.MavenReactorProjectExt; import org.eclipse.skalli.model.ext.maven.internal.config.MavenResolverConfig; import org.eclipse.skalli.nexus.NexusClient; import org.eclipse.skalli.services.project.ProjectService; import org.eclipse.skalli.testutil.TestUUIDs; import org.junit.Before; import org.junit.Test; @SuppressWarnings("nls") public class MavenResolverRunnableTest { private static final UUID PROJECT_UUID = UUID.fromString("e4d78581-08da-4f04-8a90-a7dac41f6247"); private static final String GIT_SCM_LOCATION = "scm:git:git://git.example.org/myproject"; private static final String REACTOR_POM_PATH = "pom.xml"; private static final String USERID = "USERID"; private ProjectService projectServiceMock; private MavenPomResolver pathResolverMock; private MavenResolverMock resolverMock; private MavenResolverRunnableMock classUnderTest; private class MavenResolverRunnableMock extends MavenResolverRunnable { private MavenResolverMock resolverMock; public MavenResolverRunnableMock(MavenResolverMock resolverMock) { super(new MavenResolverConfig()); this.resolverMock = resolverMock; } @Override protected MavenPomResolver getMavenPomResolver(String scmLocation) { return pathResolverMock; } @Override protected MavenResolver getMavenResolver(UUID entityId, MavenPomResolver pathResolver) { return resolverMock; } @Override protected ProjectService getProjectService() { return projectServiceMock; } @Override protected NexusClient getNexusClient() { return null; } } private class MavenResolverMock extends MavenResolver { private boolean isResolveCalled = false; private MavenReactor mavenReactor; public MavenResolverMock(MavenPomResolver pathResolver) { super(TestUUIDs.TEST_UUIDS[0], pathResolver); } @Override public MavenReactor resolve(String scmLocation, String relativePath) throws IOException, ValidationException { isResolveCalled = true; return mavenReactor; } public boolean isResolveCalled() { return isResolveCalled; } public void setMavenReactor(MavenReactor reactor) { this.mavenReactor = reactor; } } @Before public void setUp() { pathResolverMock = createNiceMock(MavenPomResolver.class); replay(pathResolverMock); resolverMock = new MavenResolverMock(pathResolverMock); classUnderTest = new MavenResolverRunnableMock(resolverMock); } @Test public void testResolveProject() throws Exception { MavenReactor mavenReactor = createReactor(); resolverMock.setMavenReactor(mavenReactor); Project project = new Project(); addScmLocation(project, GIT_SCM_LOCATION); addReactorPath(project, REACTOR_POM_PATH); assertEquals(mavenReactor, classUnderTest.resolveProject(project, null, null)); assertTrue(resolverMock.isResolveCalled()); } @Test public void testResolveProjectNoExtensions() throws Exception { Project project = new Project(); assertNull(classUnderTest.resolveProject(project, null, null)); assertFalse(resolverMock.isResolveCalled()); } @Test public void testResolveProjectBlankScmLocation() throws Exception { Project project = new Project(); addScmLocation(project, null); assertNull(classUnderTest.resolveProject(project, null, null)); assertFalse(resolverMock.isResolveCalled()); } @Test public void testResolveProjectBlankReactorPath() throws Exception { Project project = new Project(); addReactorPath(project, null); assertNull(classUnderTest.resolveProject(project, null, null)); assertFalse(resolverMock.isResolveCalled()); } @Test public void testRunSingleProject() throws Exception { MavenReactor mavenReactor = createReactor(); resolverMock.setMavenReactor(mavenReactor); Project project = new Project(); project.setUuid(PROJECT_UUID); addScmLocation(project, GIT_SCM_LOCATION); addReactorPath(project, REACTOR_POM_PATH); Capture<Project> capturedProject = new Capture<Project>(); setupProjectService(project, capturedProject); classUnderTest.run(); Project persistedProject = capturedProject.getValue(); assertEquals(project, persistedProject); assertEquals(mavenReactor, getReactor(persistedProject)); assertTrue(resolverMock.isResolveCalled()); } private void setupProjectService(Project projectToPersist, Capture<Project> capturedProject) throws Exception { projectServiceMock = createNiceMock(ProjectService.class); projectServiceMock.keySet(); expectLastCall().andReturn(Collections.singleton(PROJECT_UUID)).anyTimes(); projectServiceMock.getByUUID(eq(PROJECT_UUID)); expectLastCall().andReturn(projectToPersist).anyTimes(); projectServiceMock.persist(capture(capturedProject), eq(USERID)); replay(projectServiceMock); } private void addScmLocation(Project project, String scmLocation) { DevInfProjectExt devinfExt = new DevInfProjectExt(); devinfExt.addScmLocation(scmLocation); project.addExtension(devinfExt); } private void addReactorPath(Project project, String reactorPath) { MavenProjectExt mavenExt = new MavenProjectExt(); mavenExt.setReactorPOM(reactorPath); project.addExtension(mavenExt); } private MavenReactor getReactor(Project project) { MavenReactorProjectExt ext = project.getExtension(MavenReactorProjectExt.class); return ext != null ? ext.getMavenReactor() : null; } private MavenReactor createReactor() { MavenReactor reactor = new MavenReactor(); reactor.setCoordinate(MavenCoordinateUtil.TEST_PARENT_COORD); reactor.addModules(MavenCoordinateUtil.TEST_MODULES); return reactor; } }