package org.axway.grapes.server.core;
import org.axway.grapes.commons.datamodel.Dependency;
import org.axway.grapes.commons.datamodel.Scope;
import org.axway.grapes.server.core.options.FiltersHolder;
import org.axway.grapes.server.db.RepositoryHandler;
import org.axway.grapes.server.db.datamodel.DbArtifact;
import org.axway.grapes.server.db.datamodel.DbModule;
import org.junit.Test;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import java.util.List;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static org.mockito.Mockito.*;
public class DependencyHandlerTest {
@Test
public void getModuleDependenciesOnAModuleThatDoesNotExist(){
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
WebApplicationException exception = null;
try{
dependencyHandler.getModuleDependencies("doesNotExist", mock(FiltersHolder.class));
}
catch (WebApplicationException e){
exception = e;
}
assertNotNull(exception);
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), exception.getResponse().getStatus());
}
@Test
public void getModuleDependenciesOnAModuleThatDoesNotHaveAny(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0");
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
final List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module.getId(), mock(FiltersHolder.class));
assertNotNull(dependencies);
assertEquals(0, dependencies.size());
}
@Test
public void getModuleDependenciesReturnsDirectModuleDependenciesWhatEverTheScope(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0");
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("123");
module.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("456");
module.addDependency(dependency2.getGavc(), Scope.TEST);
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("789");
module.addDependency(dependency3.getGavc(), Scope.RUNTIME);
final DbArtifact dependency4 = new DbArtifact();
dependency4.setGroupId("org.axway.grapes.test");
dependency4.setArtifactId("dependency4");
dependency4.setVersion("101");
module.addDependency(dependency4.getGavc(), Scope.PROVIDED);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getArtifact(dependency4.getGavc())).thenReturn(dependency4);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
final List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertNotNull(dependencies);
assertEquals(4, dependencies.size());
verify(repositoryHandler, times(1)).getArtifact(dependency1.getGavc());
verify(repositoryHandler, times(1)).getArtifact(dependency2.getGavc());
verify(repositoryHandler, times(1)).getArtifact(dependency3.getGavc());
verify(repositoryHandler, times(1)).getArtifact(dependency4.getGavc());
}
@Test
public void getModuleDependenciesReturnsAlsoSubModuleDependenciesWhatEverTheScope(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0");
final DbModule subModule = new DbModule();
subModule.setName("subModule");
subModule.setVersion("1.0.0");
module.addSubmodule(subModule);
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("123");
subModule.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("456");
subModule.addDependency(dependency2.getGavc(), Scope.TEST);
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("789");
subModule.addDependency(dependency3.getGavc(), Scope.RUNTIME);
final DbArtifact dependency4 = new DbArtifact();
dependency4.setGroupId("org.axway.grapes.test");
dependency4.setArtifactId("dependency4");
dependency4.setVersion("101");
subModule.addDependency(dependency4.getGavc(), Scope.PROVIDED);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getArtifact(dependency4.getGavc())).thenReturn(dependency4);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
final List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertNotNull(dependencies);
assertEquals(4, dependencies.size());
}
@Test
public void getModuleDependenciesWithADepth(){
final DbModule module1 = new DbModule();
module1.setName("module1");
module1.setVersion("1.0.0");
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test.module2");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("1.1.0");
module1.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbModule module2 = new DbModule();
module2.setName("module2");
module2.setVersion("1.1.0");
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test.module3");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("2.1.0");
module2.addDependency(dependency2.getGavc(), Scope.COMPILE);
final DbModule module3 = new DbModule();
module3.setName("module3");
module3.setVersion("2.1.0");
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("123");
module3.addDependency(dependency3.getGavc(), Scope.COMPILE);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module1.getId())).thenReturn(module1);
when(repositoryHandler.getModule(module2.getId())).thenReturn(module2);
when(repositoryHandler.getModule(module3.getId())).thenReturn(module3);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getRootModuleOf(dependency1.getGavc())).thenReturn(module2);
when(repositoryHandler.getRootModuleOf(dependency2.getGavc())).thenReturn(module3);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
filters.getDepthHandler().setDepth(1);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(1, dependencies.size());
filters.getDepthHandler().setDepth(2);
dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(2, dependencies.size());
filters.getDepthHandler().setDepth(3);
dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(3, dependencies.size());
}
@Test
public void getModuleDependenciesWithFullRecursiveParam(){
final DbModule module1 = new DbModule();
module1.setName("module1");
module1.setVersion("1.0.0");
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test.module2");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("1.1.0");
module1.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbModule module2 = new DbModule();
module2.setName("module2");
module2.setVersion("1.1.0");
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test.module3");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("2.1.0");
module2.addDependency(dependency2.getGavc(), Scope.COMPILE);
final DbModule module3 = new DbModule();
module3.setName("module3");
module3.setVersion("2.1.0");
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("123");
module3.addDependency(dependency3.getGavc(), Scope.COMPILE);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module1.getId())).thenReturn(module1);
when(repositoryHandler.getModule(module2.getId())).thenReturn(module2);
when(repositoryHandler.getModule(module3.getId())).thenReturn(module3);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getRootModuleOf(dependency1.getGavc())).thenReturn(module2);
when(repositoryHandler.getRootModuleOf(dependency2.getGavc())).thenReturn(module3);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
filters.getDepthHandler().setFullRecursive(true);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(3, dependencies.size());
filters.getDepthHandler().setFullRecursive(false);
dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(1, dependencies.size());
}
@Test
public void getModuleDependenciesCountDependenciesOnceEvenIfThereAreLoops(){
final DbModule module1 = new DbModule();
module1.setName("module1");
module1.setVersion("1.0.0");
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test.module2");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("1.1.0");
module1.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbModule module2 = new DbModule();
module2.setName("module2");
module2.setVersion("1.1.0");
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test.module3");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("2.1.0");
module2.addDependency(dependency2.getGavc(), Scope.COMPILE);
final DbModule module3 = new DbModule();
module3.setName("module3");
module3.setVersion("2.1.0");
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test.module1");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("1.0.0");
module3.addDependency(dependency3.getGavc(), Scope.COMPILE);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module1.getId())).thenReturn(module1);
when(repositoryHandler.getModule(module2.getId())).thenReturn(module2);
when(repositoryHandler.getModule(module3.getId())).thenReturn(module3);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getRootModuleOf(dependency1.getGavc())).thenReturn(module2);
when(repositoryHandler.getRootModuleOf(dependency2.getGavc())).thenReturn(module3);
when(repositoryHandler.getRootModuleOf(dependency3.getGavc())).thenReturn(module1);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
filters.getDepthHandler().setFullRecursive(true);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
final List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module1.getId(), filters);
assertEquals(3, dependencies.size());
}
@Test
public void getModuleDependenciesWithFiltersOnScopes(){
final DbModule module = new DbModule();
module.setName("module");
module.setVersion("1.0.0");
final DbArtifact dependency1 = new DbArtifact();
dependency1.setGroupId("org.axway.grapes.test");
dependency1.setArtifactId("dependency1");
dependency1.setVersion("123");
module.addDependency(dependency1.getGavc(), Scope.COMPILE);
final DbArtifact dependency2 = new DbArtifact();
dependency2.setGroupId("org.axway.grapes.test");
dependency2.setArtifactId("dependency2");
dependency2.setVersion("456");
module.addDependency(dependency2.getGavc(), Scope.PROVIDED);
final DbArtifact dependency3 = new DbArtifact();
dependency3.setGroupId("org.axway.grapes.test");
dependency3.setArtifactId("dependency3");
dependency3.setVersion("789");
module.addDependency(dependency3.getGavc(), Scope.RUNTIME);
final DbArtifact dependency4 = new DbArtifact();
dependency4.setGroupId("org.axway.grapes.test");
dependency4.setArtifactId("dependency4");
dependency4.setVersion("101");
module.addDependency(dependency4.getGavc(), Scope.TEST);
final RepositoryHandler repositoryHandler = mock(RepositoryHandler.class);
when(repositoryHandler.getModule(module.getId())).thenReturn(module);
when(repositoryHandler.getArtifact(dependency1.getGavc())).thenReturn(dependency1);
when(repositoryHandler.getArtifact(dependency2.getGavc())).thenReturn(dependency2);
when(repositoryHandler.getArtifact(dependency3.getGavc())).thenReturn(dependency3);
when(repositoryHandler.getArtifact(dependency4.getGavc())).thenReturn(dependency4);
final FiltersHolder filters = new FiltersHolder();
filters.getScopeHandler().setScopeComp(true);
filters.getScopeHandler().setScopePro(false);
filters.getScopeHandler().setScopeRun(false);
filters.getScopeHandler().setScopeTest(false);
filters.getDecorator().setShowThirdparty(true);
final DependencyHandler dependencyHandler = new DependencyHandler(repositoryHandler);
List<Dependency> dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertEquals(1, dependencies.size());
assertEquals(dependency1.getGavc(), dependencies.get(0).getTarget().getGavc());
filters.getScopeHandler().setScopeComp(false);
filters.getScopeHandler().setScopePro(true);
filters.getScopeHandler().setScopeRun(false);
filters.getScopeHandler().setScopeTest(false);
filters.getDecorator().setShowThirdparty(true);
dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertEquals(1, dependencies.size());
assertEquals(dependency2.getGavc(), dependencies.get(0).getTarget().getGavc());
filters.getScopeHandler().setScopeComp(false);
filters.getScopeHandler().setScopePro(false);
filters.getScopeHandler().setScopeRun(true);
filters.getScopeHandler().setScopeTest(false);
filters.getDecorator().setShowThirdparty(true);
dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertEquals(1, dependencies.size());
assertEquals(dependency3.getGavc(), dependencies.get(0).getTarget().getGavc());
filters.getScopeHandler().setScopeComp(false);
filters.getScopeHandler().setScopePro(false);
filters.getScopeHandler().setScopeRun(false);
filters.getScopeHandler().setScopeTest(true);
filters.getDecorator().setShowThirdparty(true);
dependencies = dependencyHandler.getModuleDependencies(module.getId(), filters);
assertEquals(1, dependencies.size());
assertEquals(dependency4.getGavc(), dependencies.get(0).getTarget().getGavc());
}
}