/
package-graph.test.js
153 lines (136 loc) · 4.49 KB
/
package-graph.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
"use strict";
const Package = require("@lerna/package");
// file under test
const PackageGraph = require("..");
describe("PackageGraph", () => {
describe("constructor", () => {
it("throws an error when duplicate package names are present", () => {
const pkgs = [
new Package({ name: "pkg-1", version: "1.0.0" }, "/test/pkg-1", "/test"),
new Package({ name: "pkg-2", version: "2.0.0" }, "/test/pkg-2", "/test"),
new Package({ name: "pkg-2", version: "3.0.0" }, "/test/pkg-3", "/test"),
];
try {
// eslint-disable-next-line no-unused-vars
const graph = new PackageGraph(pkgs);
} catch (err) {
expect(err.prefix).toBe("ENAME");
expect(err.message).toMatchInlineSnapshot(`
"Package name \\"pkg-2\\" used in multiple packages:
/test/pkg-2
/test/pkg-3"
`);
}
expect.assertions(2);
});
});
describe("Node", () => {
it("proxies Package properties", () => {
const pkg = new Package({ name: "my-pkg", version: "1.2.3" }, "/path/to/my-pkg");
const graph = new PackageGraph([pkg]);
const node = graph.get("my-pkg");
// most of these properties are non-enumerable, so a snapshot doesn't work
expect(node.name).toBe("my-pkg");
expect(node.location).toBe("/path/to/my-pkg");
expect(node.prereleaseId).toBeUndefined();
expect(node.version).toBe("1.2.3");
expect(node.pkg).toBe(pkg);
});
it("exposes graph-specific Map properties", () => {
const node = new PackageGraph([
new Package({ name: "my-pkg", version: "4.5.6" }, "/path/to/my-pkg"),
]).get("my-pkg");
expect(node).toHaveProperty("externalDependencies", expect.any(Map));
expect(node).toHaveProperty("localDependencies", expect.any(Map));
expect(node).toHaveProperty("localDependents", expect.any(Map));
});
it("computes prereleaseId from prerelease version", () => {
const node = new PackageGraph([
new Package({ name: "my-pkg", version: "1.2.3-rc.4" }, "/path/to/my-pkg"),
]).get("my-pkg");
expect(node.prereleaseId).toBe("rc");
});
});
describe(".get()", () => {
it("should return a node with localDependencies", () => {
const packages = [
new Package(
{
name: "my-package-1",
version: "1.0.0",
dependencies: {
"external-thing": "^1.0.0",
},
},
"/path/to/package-1"
),
new Package(
{
name: "my-package-2",
version: "1.0.0",
devDependencies: {
"my-package-1": "^1.0.0",
},
},
"/path/to/package-2"
),
];
const graph = new PackageGraph(packages, "allDependencies");
expect(graph.get("my-package-1").localDependencies.size).toBe(0);
expect(graph.get("my-package-2").localDependencies.has("my-package-1")).toBe(true);
});
it("should skip gitCommittish of packages that are not in localDependencies", () => {
const packages = [
new Package(
{
name: "my-package-1",
version: "1.0.0",
devDependencies: {
"my-package-2": "^1.0.0",
},
},
"/path/to/package-1"
),
new Package(
{
name: "my-package-2",
version: "1.0.0",
dependencies: {
"external-thing": "github:user-foo/project-foo#v1.0.0",
},
},
"/path/to/package-2"
),
];
const graph = new PackageGraph(packages, "dependencies");
expect(graph.get("my-package-1").localDependencies.size).toBe(0);
expect(graph.get("my-package-2").localDependencies.size).toBe(0);
});
it("should return the localDependencies for matched gitCommittish", () => {
const packages = [
new Package(
{
name: "my-package-1",
version: "1.0.0",
dependencies: {
"external-thing": "^1.0.0",
},
},
"/path/to/package-1"
),
new Package(
{
name: "my-package-2",
version: "1.0.0",
devDependencies: {
"my-package-1": "github:user-foo/project-foo#v1.0.0",
},
},
"/path/to/package-2"
),
];
const graph = new PackageGraph(packages);
expect(graph.get("my-package-2").localDependencies.has("my-package-1")).toBe(true);
});
});
});