Files
maven-dependency-submission…/src/depgraph.test.ts
T

166 lines
7.2 KiB
TypeScript

import { expect } from 'chai';
import { parseDependencyJson, MavenDependencyGraph } from './depgraph';
import * as path from 'path';
import {describe, it, beforeAll} from 'vitest';
describe('depgraph', () => {
it('should load a dependency JSON file', () => {
const depGraph = parseDependencyJson(getTestDataFile('maven-plugin'));
expect(depGraph.artifacts).to.have.length(96);
expect(depGraph.dependencies).to.have.length(95);
const artifact = depGraph.artifacts[0];
expect(artifact.groupId).to.equal('org.apache.maven.plugins');
expect(artifact.artifactId).to.equal('maven-dependency-plugin');
expect(artifact.version).to.equal('4.0.0-SNAPSHOT');
expect(artifact.id).to.equal('org.apache.maven.plugins:maven-dependency-plugin:maven-plugin');
const dependency = depGraph.dependencies[0];
expect(dependency.resolution).to.equal('INCLUDED');
expect(dependency.from).to.equal('org.apache.maven.plugins:maven-dependency-plugin:maven-plugin');
expect(dependency.to).to.equal('org.apache.maven:maven-artifact:jar');
});
describe('parseDependencies', () => {
describe('maven-plugin', () => {
let depGraph;
beforeAll(() => {
depGraph = parseDependencyJson(getTestDataFile('maven-plugin'));
});
it('should parse out the top level dependencies', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
const topLevelDependencies = mavenDependencies.getDirectDependencies();
expect(mavenDependencies.getPackageCount()).to.equal(96);
const names = topLevelDependencies.map(pkg => pkg.packageID());
expect(names).to.have.members([
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.apache.maven.reporting/[email protected]?type=jar",
"pkg:maven/commons-io/[email protected]?type=jar",
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
"pkg:maven/org.apache.commons/[email protected]?type=jar",
"pkg:maven/org.apache.commons/[email protected]?type=jar",
"pkg:maven/org.apache.maven.plugin-tools/[email protected]?type=jar",
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
"pkg:maven/org.apache.maven.wagon/[email protected]?type=jar",
"pkg:maven/junit/[email protected]?type=jar",
"pkg:maven/org.apache.maven.plugin-testing/[email protected]?type=jar",
"pkg:maven/org.apache.maven.plugin-testing/[email protected]?type=jar",
"pkg:maven/org.mockito/[email protected]?type=jar",
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
"pkg:maven/org.apache.maven/[email protected]?type=jar",
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/org.slf4j/[email protected]?type=jar",
"pkg:maven/commons-beanutils/[email protected]?type=jar"
]);
});
it('should provide a manifest', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
const manifest = mavenDependencies.createManifest();
expect(manifest.name).to.equal('maven-dependency-plugin');
expect(manifest.countDependencies()).to.equal(95);
});
});
describe('bookstore-v3', () => {
let depGraph;
beforeAll(() => {
depGraph = parseDependencyJson(getTestDataFile('bookstore-v3'));
});
it('should parse out the top level dependencies', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
const topLevelDependencies = mavenDependencies.getDirectDependencies();
expect(mavenDependencies.getPackageCount()).to.equal(21);
const names = topLevelDependencies.map(pkg => pkg.packageID());
expect(names).to.have.members([
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/org.thymeleaf/[email protected]?type=jar",
"pkg:maven/org.json/json@20210307?type=jar",
"pkg:maven/org.xerial/[email protected]?type=jar",
"pkg:maven/org.apache.logging.log4j/[email protected]?type=jar",
"pkg:maven/junit/[email protected]?type=jar"
]);
});
});
describe('cycle-tree', () => {
let depGraph;
beforeAll(() => {
depGraph = parseDependencyJson(getTestDataFile("cycle-tree"));
});
it('should parse out the top level dependencies', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
expect(mavenDependencies.getPackageCount()).to.equal(3);
});
it('should be able to generate a manifest despite having a cycle', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
const manifest = mavenDependencies.createManifest();
expect(manifest.name).to.equal('hadoop-main');
expect(manifest.countDependencies()).to.equal(2);
})
});
describe('bs-parent-dep-tree', () => {
let depGraph;
beforeAll(() => {
depGraph = parseDependencyJson(getTestDataFile('bs-parent-dep-tree'));
});
it('should parse out the top level dependencies', () => {
const mavenDependencies = new MavenDependencyGraph(depGraph);
const topLevelDependencies = mavenDependencies.getDirectDependencies();
expect(mavenDependencies.getPackageCount()).to.equal(19);
const topLevelNames = topLevelDependencies.map(pkg => pkg.packageID());
expect(topLevelNames).to.have.members([
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
"pkg:maven/com.github.octodemo/[email protected]?type=jar",
"pkg:maven/junit/[email protected]?type=jar"
]);
});
});
});
});
function getTestDataFile(name: string) {
return path.join(__dirname, '..', 'test-data', 'dependency-trees', `${name}.json`);
}