diff --git a/src/core/create-changed-packages-graph.ts b/src/core/create-changed-packages-graph.ts new file mode 100644 index 0000000..15df269 --- /dev/null +++ b/src/core/create-changed-packages-graph.ts @@ -0,0 +1,97 @@ +import { DepGraph, DepGraphInternal, NodeInfo, PkgInfo } from './types'; +import { DepGraphImpl } from './dep-graph'; +import { DepGraphBuilder } from './builder'; +import { eventLoopSpinner } from 'event-loop-spinner'; + +type NodeId = string; + +/** + * Creates an induced subgraph of {@param graphB} with only packages + * that are not present in {@param graphA} or have a different version. + * + * @param graphA + * @param graphB + */ +export async function createChangedPackagesGraph( + graphA: DepGraph, + graphB: DepGraph, +): Promise { + const depGraph = graphB as DepGraphInternal; + + const graphAPackageIds = new Set( + graphA.getDepPkgs().map(DepGraphImpl.getPkgId), + ); + + const addedOrUpdatedPackages: PkgInfo[] = depGraph + .getDepPkgs() + .filter((pkg) => !graphAPackageIds.has(DepGraphImpl.getPkgId(pkg))); + + const depGraphBuilder = new DepGraphBuilder( + depGraph.pkgManager, + depGraph.rootPkg, + ); + + const parentQueue: [parentId: NodeId, nodeId: NodeId][] = []; + for (const changedPackage of addedOrUpdatedPackages) { + for (const changedNodeId of depGraph.getPkgNodeIds(changedPackage)) { + //we add all nodes with new and changed packages to the new graph. + //a newly added node will also have its dependencies added here, since they are "new". + depGraphBuilder.addPkgNode( + depGraph.getNodePkg(changedNodeId), + changedNodeId, + getNodeInfo(depGraph, changedNodeId), + ); + + //Push all direct parents of the changed nodes to a queue to later build up a path to root from that node + for (const parentId of depGraph.getNodeParentsNodeIds(changedNodeId)) { + parentQueue.push([parentId, changedNodeId]); + + if (eventLoopSpinner.isStarving()) { + await eventLoopSpinner.spin(); + } + } + } + } + + //add direct and transitive parents for the changed nodes + const visited = new Set([depGraph.rootNodeId]); + + while (parentQueue.length > 0) { + const [nodeId, dependencyNodeId] = parentQueue.pop()!; + if (visited.has(nodeId)) { + //ensure we link parents even if visited through another path + depGraphBuilder.connectDep(nodeId, dependencyNodeId); + continue; + } + + visited.add(nodeId); + + depGraphBuilder.addPkgNode( + depGraph.getNodePkg(nodeId), + nodeId, + getNodeInfo(depGraph, nodeId), + ); + depGraphBuilder.connectDep(nodeId, dependencyNodeId); + + for (const parentId of depGraph.getNodeParentsNodeIds(nodeId)) { + parentQueue.push([parentId, nodeId]); + + if (eventLoopSpinner.isStarving()) { + await eventLoopSpinner.spin(); + } + } + } + + return depGraphBuilder.build(); +} + +function getNodeInfo( + depGraph: DepGraphInternal, + nodeId: string, +): NodeInfo | undefined { + const nodeInfo: NodeInfo = depGraph.getNode(nodeId); + if (!nodeInfo || Object.keys(nodeInfo).length === 0) { + return undefined; + } + return nodeInfo; +} diff --git a/src/core/dep-graph.ts b/src/core/dep-graph.ts index 8fdc930..b95cc33 100644 --- a/src/core/dep-graph.ts +++ b/src/core/dep-graph.ts @@ -255,7 +255,7 @@ class DepGraphImpl implements types.DepGraphInternal { compareRoot: boolean, traversedPairs = new Set(), ): boolean { - // Skip root nodes comparision if needed. + // Skip root nodes comparison if needed. if ( compareRoot || (nodeIdA !== graphA.rootNodeId && nodeIdB !== graphB.rootNodeId) diff --git a/src/index.ts b/src/index.ts index 970b1e5..633b29b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,9 +8,12 @@ export { } from './core/types'; export { createFromJSON } from './core/create-from-json'; export { DepGraphBuilder } from './core/builder'; +export { createChangedPackagesGraph } from './core/create-changed-packages-graph'; import * as Errors from './core/errors'; + export { Errors }; import * as legacy from './legacy'; + export { legacy }; diff --git a/test/core/create-changed-packages-graph.test.ts b/test/core/create-changed-packages-graph.test.ts new file mode 100644 index 0000000..234b1af --- /dev/null +++ b/test/core/create-changed-packages-graph.test.ts @@ -0,0 +1,54 @@ +import * as depGraphLib from '../../src'; +import * as helpers from '../helpers'; +import { createChangedPackagesGraph } from '../../src'; + +describe('filter-unchanged-packages', () => { + it.each` + fixture + ${'equals/simple.json'} + ${'cyclic-complex-dep-graph.json'} + ${'goof-graph.json'} + `( + 'result and $fixture are equals for empty initial graph', + async ({ fixture }) => { + const graphB = depGraphLib.createFromJSON(helpers.loadFixture(fixture)); + + const graphA = new depGraphLib.DepGraphBuilder( + graphB.pkgManager, + graphB.rootPkg, + ).build(); + + const result = await createChangedPackagesGraph(graphA, graphB); + expect(graphB.equals(result)).toBe(true); + }, + ); + + it.each` + fixtureA | fixtureB | expected + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-direct-dep-added.json'} | ${'changed-packages-graph/graph-direct-dep-added-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-direct-dep-changed-cycle.json'} | ${'changed-packages-graph/graph-direct-dep-changed-cycle-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-direct-dep-changed.json'} | ${'changed-packages-graph/graph-direct-dep-changed-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-direct-dep-removed.json'} | ${'changed-packages-graph/graph-direct-dep-removed-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.json'} | ${'changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-root-and-direct-dep-changed.json'} | ${'changed-packages-graph/graph-root-and-direct-dep-changed-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-root-changed-expected.json'} | ${'changed-packages-graph/graph-root-changed-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-transitive-dep-as-direct-dep.json'} | ${'changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-transitive-dep-changed-cycle.json'} | ${'changed-packages-graph/graph-transitive-dep-changed-cycle-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-transitive-dep-changed.json'} | ${'changed-packages-graph/graph-transitive-dep-changed-expected.json'} + ${'changed-packages-graph/graph.json'} | ${'changed-packages-graph/graph-transitive-dep-removed.json'} | ${'changed-packages-graph/graph-transitive-dep-removed-expected.json'} + `( + 'result is $expected for $fixtureA and $fixtureB', + async ({ fixtureA, fixtureB, expected }) => { + const graphA = depGraphLib.createFromJSON(helpers.loadFixture(fixtureA)); + + const graphB = depGraphLib.createFromJSON(helpers.loadFixture(fixtureB)); + + const expectedResult = depGraphLib.createFromJSON( + helpers.loadFixture(expected), + ); + + const result = await createChangedPackagesGraph(graphA, graphB); + expect(expectedResult.equals(result, { compareRoot: true })).toBe(true); + }, + ); +}); diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.json b/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.json new file mode 100644 index 0000000..a64a7b8 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.json @@ -0,0 +1,57 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "l@0.1", + "info": { + "name": "l", + "version": "0.1" + } + }, + { + "id": "m@1.2", + "info": { + "name": "m", + "version": "1.2" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "12", + "pkgId": "l@0.1", + "deps": [ + { + "nodeId": "13" + } + ] + }, + { + "nodeId": "13", + "pkgId": "m@1.2", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "12" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.png b/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.png new file mode 100644 index 0000000..ccfac43 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-added-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-added.json b/test/fixtures/changed-packages-graph/graph-direct-dep-added.json new file mode 100644 index 0000000..9a3c003 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-added.json @@ -0,0 +1,220 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + }, + { + "id": "l@0.1", + "info": { + "name": "l", + "version": "0.1" + } + }, + { + "id": "m@1.2", + "info": { + "name": "m", + "version": "1.2" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + }, + { + "nodeId": "12" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + }, + { + "nodeId": "12", + "pkgId": "l@0.1", + "deps": [ + { + "nodeId": "13" + } + ] + }, + { + "nodeId": "13", + "pkgId": "m@1.2", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-added.png b/test/fixtures/changed-packages-graph/graph-direct-dep-added.png new file mode 100644 index 0000000..46ef34e Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-added.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.json b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.json new file mode 100644 index 0000000..52cc863 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "c@3.1", + "info": { + "name": "c", + "version": "3.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "3", + "pkgId": "c@3.1", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "3" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.png b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.png new file mode 100644 index 0000000..0717d6f Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.json b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.json new file mode 100644 index 0000000..4ad21cb --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3.1", + "info": { + "name": "c", + "version": "3.1" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3.1", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.png b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.png new file mode 100644 index 0000000..c5bb6d9 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-cycle.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.json b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.json new file mode 100644 index 0000000..4e8de80 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.json @@ -0,0 +1,56 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "c@4", + "info": { + "name": "c", + "version": "4" + } + }, + { + "id": "d@4.1", + "info": { + "name": "d", + "version": "4.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "3", + "pkgId": "c@4", + "deps": [] + }, + { + "nodeId": "4", + "pkgId": "d@4.1", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.png b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.png new file mode 100644 index 0000000..e8c214d Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-changed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed.json b/test/fixtures/changed-packages-graph/graph-direct-dep-changed.json new file mode 100644 index 0000000..1d12247 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-changed.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@4", + "info": { + "name": "c", + "version": "4" + } + }, + { + "id": "d@4.1", + "info": { + "name": "d", + "version": "4.1" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@4", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4.1", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-changed.png b/test/fixtures/changed-packages-graph/graph-direct-dep-changed.png new file mode 100644 index 0000000..70281c7 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-changed.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.json b/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.json new file mode 100644 index 0000000..cd4ac7b --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.png b/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.png new file mode 100644 index 0000000..d9a1032 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-removed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-removed.json b/test/fixtures/changed-packages-graph/graph-direct-dep-removed.json new file mode 100644 index 0000000..ad8f91a --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-removed.json @@ -0,0 +1,112 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-removed.png b/test/fixtures/changed-packages-graph/graph-direct-dep-removed.png new file mode 100644 index 0000000..c6673b0 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-removed.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.json b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.json new file mode 100644 index 0000000..7876065 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "l@0.1", + "info": { + "name": "l", + "version": "0.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "12", + "pkgId": "l@0.1", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "12" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.png b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.png new file mode 100644 index 0000000..3b64bd0 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.json b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.json new file mode 100644 index 0000000..26da571 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.json @@ -0,0 +1,205 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + }, + { + "id": "l@0.1", + "info": { + "name": "l", + "version": "0.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + }, + { + "nodeId": "12" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + }, + { + "nodeId": "12", + "pkgId": "l@0.1", + "deps": [ + { + "nodeId": "10" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.png b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.png new file mode 100644 index 0000000..8f3a92f Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-direct-dep-with-exiting-transitive-dep-added.png differ diff --git a/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.json b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.json new file mode 100644 index 0000000..a9c8f03 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.json @@ -0,0 +1,41 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1.1", + "info": { + "name": "a", + "version": "1.1" + } + }, + { + "id": "b@2.1", + "info": { + "name": "b", + "version": "2.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "2", + "pkgId": "b@2.1", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1.1", + "deps": [ + { + "nodeId": "2" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.png b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.png new file mode 100644 index 0000000..2e92e24 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.json b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.json new file mode 100644 index 0000000..2d7a271 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1.1", + "info": { + "name": "a", + "version": "1.1" + } + }, + { + "id": "b@2.1", + "info": { + "name": "b", + "version": "2.1" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1.1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2.1", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.png b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.png new file mode 100644 index 0000000..e5777a5 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-root-and-direct-dep-changed.png differ diff --git a/test/fixtures/changed-packages-graph/graph-root-changed-expected.json b/test/fixtures/changed-packages-graph/graph-root-changed-expected.json new file mode 100644 index 0000000..d38c0d4 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-root-changed-expected.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1.1", + "info": { + "name": "a", + "version": "1.1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1.1", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-root-changed-expected.png b/test/fixtures/changed-packages-graph/graph-root-changed-expected.png new file mode 100644 index 0000000..3dc6067 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-root-changed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-root-changed.json b/test/fixtures/changed-packages-graph/graph-root-changed.json new file mode 100644 index 0000000..45478aa --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-root-changed.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1.1", + "info": { + "name": "a", + "version": "1.1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1.1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-root-changed.png b/test/fixtures/changed-packages-graph/graph-root-changed.png new file mode 100644 index 0000000..654f7eb Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-root-changed.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.json new file mode 100644 index 0000000..cd4ac7b --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.png new file mode 100644 index 0000000..d9a1032 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.json new file mode 100644 index 0000000..247cfd1 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.png new file mode 100644 index 0000000..6852616 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-as-direct-dep.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.json new file mode 100644 index 0000000..c00e1b9 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.json @@ -0,0 +1,112 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "e@6", + "info": { + "name": "e", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@6", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.png new file mode 100644 index 0000000..be7105f Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.json new file mode 100644 index 0000000..7e35927 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@6", + "info": { + "name": "e", + "version": "6" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@6", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.png new file mode 100644 index 0000000..f506d20 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-cycle.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.json new file mode 100644 index 0000000..28554d4 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.json @@ -0,0 +1,73 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "j@2", + "info": { + "name": "j", + "version": "2" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@2", + "deps": [] + }, + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "4" + } + ] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.png new file mode 100644 index 0000000..0709704 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.json new file mode 100644 index 0000000..3116a9c --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@2", + "info": { + "name": "j", + "version": "2" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@2", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.png new file mode 100644 index 0000000..9f57445 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-changed.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.json new file mode 100644 index 0000000..cd4ac7b --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.3.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.png new file mode 100644 index 0000000..d9a1032 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed-expected.png differ diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.json b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.json new file mode 100644 index 0000000..9d8b773 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.json @@ -0,0 +1,174 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.png b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.png new file mode 100644 index 0000000..0f95087 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph-transitive-dep-removed.png differ diff --git a/test/fixtures/changed-packages-graph/graph.json b/test/fixtures/changed-packages-graph/graph.json new file mode 100644 index 0000000..d39d787 --- /dev/null +++ b/test/fixtures/changed-packages-graph/graph.json @@ -0,0 +1,189 @@ +{ + "schemaVersion": "1.2.0", + "pkgManager": { + "name": "pip" + }, + "pkgs": [ + { + "id": "a@1", + "info": { + "name": "a", + "version": "1" + } + }, + { + "id": "b@2", + "info": { + "name": "b", + "version": "2" + } + }, + { + "id": "c@3", + "info": { + "name": "c", + "version": "3" + } + }, + { + "id": "d@4", + "info": { + "name": "d", + "version": "4" + } + }, + { + "id": "e@5", + "info": { + "name": "e", + "version": "5" + } + }, + { + "id": "f@6", + "info": { + "name": "f", + "version": "6" + } + }, + { + "id": "g@7", + "info": { + "name": "g", + "version": "7" + } + }, + { + "id": "h@2.1", + "info": { + "name": "h", + "version": "2.1" + } + }, + { + "id": "i@9", + "info": { + "name": "i", + "version": "9" + } + }, + { + "id": "j@1", + "info": { + "name": "j", + "version": "1" + } + }, + { + "id": "k@3", + "info": { + "name": "k", + "version": "3" + } + } + ], + "graph": { + "rootNodeId": "root-node", + "nodes": [ + { + "nodeId": "root-node", + "pkgId": "a@1", + "deps": [ + { + "nodeId": "2" + }, + { + "nodeId": "3" + }, + { + "nodeId": "4" + } + ] + }, + { + "nodeId": "2", + "pkgId": "b@2", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "3", + "pkgId": "c@3", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "4", + "pkgId": "d@4", + "deps": [ + { + "nodeId": "8" + }, + { + "nodeId": "9" + } + ] + }, + { + "nodeId": "5", + "pkgId": "e@5", + "deps": [ + { + "nodeId": "6" + } + ] + }, + { + "nodeId": "6", + "pkgId": "f@6", + "deps": [ + { + "nodeId": "7" + } + ] + }, + { + "nodeId": "7", + "pkgId": "g@7", + "deps": [ + { + "nodeId": "5" + } + ] + }, + { + "nodeId": "8", + "pkgId": "h@2.1", + "deps": [] + }, + { + "nodeId": "9", + "pkgId": "i@9", + "deps": [ + { + "nodeId": "10" + }, + { + "nodeId": "11" + } + ] + }, + { + "nodeId": "10", + "pkgId": "j@1", + "deps": [] + }, + { + "nodeId": "11", + "pkgId": "k@3", + "deps": [] + } + ] + } +} diff --git a/test/fixtures/changed-packages-graph/graph.png b/test/fixtures/changed-packages-graph/graph.png new file mode 100644 index 0000000..6de69f6 Binary files /dev/null and b/test/fixtures/changed-packages-graph/graph.png differ