package org.axway.grapes.server.core;
import org.axway.grapes.commons.datamodel.Scope;
import org.axway.grapes.server.core.graphs.AbstractGraph;
import org.axway.grapes.server.core.graphs.GraphDependency;
import org.axway.grapes.server.core.graphs.GraphElement;
import org.axway.grapes.server.core.graphs.TreeNode;
import org.axway.grapes.server.core.options.FiltersHolder;
import org.axway.grapes.server.db.datamodel.DbModule;
import org.axway.grapes.server.materials.TestingRepositoryHandler;
import org.axway.grapes.server.materials.cases.*;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class GraphsHandlerTest {
private TestingRepositoryHandler repoHandler;
private GraphsHandler graphHandler;
private FiltersHolder filters;
@Before
public void init(){
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);
repoHandler = new TestingRepositoryHandler();
graphHandler = new GraphsHandler(repoHandler, filters);
}
@Test
public void getGraphOfModuleWithOneArtifactWithoutDependency(){
repoHandler.loadTestCase(new TC01_ModuleWithOneArtifactWithoutDependency());
final String moduleId = DbModule.generateID(TC01_ModuleWithOneArtifactWithoutDependency.MODULE_NAME, TC01_ModuleWithOneArtifactWithoutDependency.MODULE_VERSION);
AbstractGraph graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(1, graph.getElements().size());
assertEquals(TC01_ModuleWithOneArtifactWithoutDependency.MODULE_NAME, graph.getElements().get(0).getValue());
assertEquals(TC01_ModuleWithOneArtifactWithoutDependency.MODULE_VERSION, graph.getElements().get(0).getVersion());
assertEquals(true, graph.getElements().get(0).isRoot());
assertEquals(0, graph.getDependencies().size());
}
@Test
public void getGraphOfModuleWithOneArtifactAndDependencyOfEachType(){
repoHandler.loadTestCase(new TC02_ModuleWithOneArtifactAndDependencyOfEachType());
final String moduleId = DbModule.generateID(TC02_ModuleWithOneArtifactAndDependencyOfEachType.MODULE_NAME, TC02_ModuleWithOneArtifactAndDependencyOfEachType.MODULE_VERSION);
AbstractGraph graph = graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(5, graph.getElements().size());
assertEquals(4, graph.getDependencies().size());
GraphDependency compDependency = null, runDependency = null, proDependency = null, testDependency = null;
for(GraphDependency dependency: graph.getDependencies()){
if(dependency.getType().equals(Scope.COMPILE.toString())){
compDependency = dependency;
}
else if(dependency.getType().equals(Scope.PROVIDED.toString())){
proDependency = dependency;
}
else if(dependency.getType().equals(Scope.RUNTIME.toString())){
runDependency = dependency;
}
else if(dependency.getType().equals(Scope.TEST.toString())){
testDependency = dependency;
}
}
assertNotNull(compDependency);
assertEquals(TC02_ModuleWithOneArtifactAndDependencyOfEachType.MODULE_NAME, compDependency.getSource());
assertEquals(TC02_ModuleWithOneArtifactAndDependencyOfEachType.COMPILE_DEPENDENCY_MODULE, compDependency.getTarget());
assertNotNull(proDependency);
assertNotNull(runDependency);
assertNotNull(testDependency);
}
@Test
public void getGraphOfModuleWithOneSubmoduleAndDependencyOfEachType(){
repoHandler.loadTestCase(new TC03_ModuleWithOneSubmoduleAndDependencyOfEachType());
final String moduleId = DbModule.generateID(TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.MODULE_NAME, TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.MODULE_VERSION);
AbstractGraph graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(5, graph.getElements().size());
assertEquals(4, graph.getDependencies().size());
GraphElement subModule = null;
for(GraphElement element: graph.getElements()){
if(element.getValue().equals(TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.SUBMODULE_NAME)){
subModule = element;
}
}
assertNull(subModule);
}
@Test
public void getGraphOfModuleWithOneArtifactAndThirdParty(){
repoHandler.loadTestCase(new TC05_ModuleWithOneArtifactAndThirdParty());
final String moduleId = DbModule.generateID(TC05_ModuleWithOneArtifactAndThirdParty.MODULE_NAME, TC05_ModuleWithOneArtifactAndThirdParty.MODULE_VERSION);
AbstractGraph graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(5, graph.getElements().size());
assertEquals(4, graph.getDependencies().size());
filters.getDecorator().setShowThirdparty(false);
graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(1, graph.getElements().size());
assertEquals(0, graph.getDependencies().size());
}
@Test
public void getGraphOfModuleWithOneArtifactWithTransitiveDependencies(){
repoHandler.loadTestCase(new TC06_ModuleWithOneArtifactWithTransitiveDependencies());
final String moduleId = DbModule.generateID(TC06_ModuleWithOneArtifactWithTransitiveDependencies.MODULE_NAME, TC06_ModuleWithOneArtifactWithTransitiveDependencies.MODULE_VERSION);
AbstractGraph graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(3, graph.getElements().size());
assertEquals(2, graph.getDependencies().size());
filters.getDepthHandler().setFullRecursive(false);
graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(2, graph.getElements().size());
assertEquals(1, graph.getDependencies().size());
}
@Test
public void getGraphOfModuleWithOneArtifactWithLoopDependencies(){
repoHandler.loadTestCase(new TC07_ModuleWithOneArtifactWithLoopDependencies());
final String moduleId = DbModule.generateID(TC07_ModuleWithOneArtifactWithLoopDependencies.MODULE_NAME, TC07_ModuleWithOneArtifactWithLoopDependencies.MODULE_VERSION);
AbstractGraph graph = graphHandler.getModuleGraph(moduleId);
assertNotNull(graph);
assertEquals(2, graph.getElements().size());
assertEquals(2, graph.getDependencies().size());
}
@Test
public void getTreeOfModuleWithOneArtifactWithoutDependency(){
repoHandler.loadTestCase(new TC01_ModuleWithOneArtifactWithoutDependency());
final String moduleId = DbModule.generateID(TC01_ModuleWithOneArtifactWithoutDependency.MODULE_NAME, TC01_ModuleWithOneArtifactWithoutDependency.MODULE_VERSION);
TreeNode tree = graphHandler.getModuleTree(moduleId);
assertNotNull(tree);
assertEquals(TC01_ModuleWithOneArtifactWithoutDependency.MODULE_NAME, tree.getName());
assertEquals(0, tree.getChildren().size());
}
@Test
public void getTreeOfModuleWithOneSubmodule(){
repoHandler.loadTestCase(new TC03_ModuleWithOneSubmoduleAndDependencyOfEachType());
final String moduleId = DbModule.generateID(TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.MODULE_NAME, TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.MODULE_VERSION);
TreeNode tree = graphHandler.getModuleTree(moduleId);
assertNotNull(tree);
assertEquals(1, tree.getChildren().size());
TreeNode subModule = tree.getChildren().get(0);
assertEquals(TC03_ModuleWithOneSubmoduleAndDependencyOfEachType.SUBMODULE_NAME, subModule.getName());
assertEquals(0, subModule.getChildren().size());
}
}