package org.jboss.windup.reporting.service;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.AddonDependencies;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.archive.AddonArchive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.GraphContextFactory;
import org.jboss.windup.graph.model.ProjectModel;
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.graph.service.FileService;
import org.jboss.windup.graph.service.ProjectService;
import org.jboss.windup.graph.traversal.ProjectModelTraversal;
import org.jboss.windup.reporting.model.TechnologyTagLevel;
import org.jboss.windup.reporting.model.TechnologyTagModel;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class TechnologyTagServiceTest
{
@Deployment
@AddonDependencies({
@AddonDependency(name = "org.jboss.windup.config:windup-config"),
@AddonDependency(name = "org.jboss.windup.graph:windup-graph"),
@AddonDependency(name = "org.jboss.windup.reporting:windup-reporting"),
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi")
})
public static AddonArchive getDeployment()
{
AddonArchive archive = ShrinkWrap.create(AddonArchive.class)
.addBeansXML();
return archive;
}
@Inject
private GraphContextFactory factory;
@Test
public void testFindTechnologyTagsByProject() throws Exception
{
try (GraphContext context = factory.create())
{
ProjectService projectService = new ProjectService(context);
TechnologyTagService techTagService = new TechnologyTagService(context);
FileService fileService = new FileService(context);
ProjectModel parent = projectService.create();
parent.setName("Parent");
FileModel fm1 = fileService.create();
TechnologyTagModel parentTag = techTagService.addTagToFileModel(fm1, "ParentTag", TechnologyTagLevel.INFORMATIONAL);
parent.addFileModel(fm1);
ProjectModel child1 = projectService.create();
child1.setName("child1");
child1.setParentProject(parent);
FileModel fm2 = fileService.create();
TechnologyTagModel child1Tag = techTagService.addTagToFileModel(fm2, "Child1Tag", TechnologyTagLevel.INFORMATIONAL);
child1.addFileModel(fm2);
ProjectModel child2 = projectService.create();
child2.setName("child2");
child2.setParentProject(parent);
FileModel fm3 = fileService.create();
TechnologyTagModel child2Tag = techTagService.addTagToFileModel(fm3, "Child2Tag", TechnologyTagLevel.INFORMATIONAL);
child2.addFileModel(fm3);
ProjectModel grandChild1 = projectService.create();
grandChild1.setName("grandchild1");
grandChild1.setParentProject(child2);
FileModel fm4 = fileService.create();
TechnologyTagModel grandchild1Tag = techTagService.addTagToFileModel(fm4, "GrandChild1Tag", TechnologyTagLevel.INFORMATIONAL);
grandChild1.addFileModel(fm4);
ProjectModel child3 = projectService.create();
child3.setName("child3");
child3.setParentProject(parent);
FileModel fm5 = fileService.create();
TechnologyTagModel child3Tag = techTagService.addTagToFileModel(fm5, "Child3Tag", TechnologyTagLevel.INFORMATIONAL);
child3.addFileModel(fm5);
Set<TechnologyTagModel> foundTags = new HashSet<>();
ProjectModelTraversal traversal = new ProjectModelTraversal(parent);
for (TechnologyTagModel techTag : techTagService.findTechnologyTagsForProject(traversal))
{
foundTags.add(techTag);
}
Assert.assertTrue(foundTags.contains(parentTag));
Assert.assertTrue(foundTags.contains(child1Tag));
Assert.assertTrue(foundTags.contains(child2Tag));
Assert.assertTrue(foundTags.contains(grandchild1Tag));
Assert.assertTrue(foundTags.contains(child3Tag));
}
}
}