/
types-node-matching-engine.spec.ts
98 lines (89 loc) · 2.46 KB
/
types-node-matching-engine.spec.ts
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
import PackageJson from "../types/package-json";
import { typesNodeMatchingEngine } from "./types-node-matching-engine";
let pkg: PackageJson & Required<Pick<PackageJson, "engines">>;
beforeEach(() => {
pkg = {
name: "mock-package",
version: "1.2.3",
engines: {},
};
});
it("should return error when engine is lower major than types", () => {
expect.assertions(1);
pkg.devDependencies = {
"@types/node": "^14.1.2",
};
pkg.engines.node = ">= 12";
expect(Array.from(typesNodeMatchingEngine(pkg))).toMatchInlineSnapshot(`
[
{
"column": 1,
"line": 1,
"message": "@types/node v14 does not equal engines.node v12",
"ruleId": "types-node-matching-engine",
"severity": 2,
},
]
`);
});
it("should return error when engine is higher major than types", () => {
expect.assertions(1);
pkg.devDependencies = {
"@types/node": "^12.1.2",
};
pkg.engines.node = ">= 14";
expect(Array.from(typesNodeMatchingEngine(pkg))).toMatchInlineSnapshot(`
[
{
"column": 1,
"line": 1,
"message": "@types/node v12 does not equal engines.node v14",
"ruleId": "types-node-matching-engine",
"severity": 2,
},
]
`);
});
it("should not return error when engine and types have same major", () => {
expect.assertions(1);
pkg.devDependencies = {
"@types/node": "^12.1.2",
};
pkg.engines.node = ">= 12";
expect(Array.from(typesNodeMatchingEngine(pkg))).toEqual([]);
});
it("should handle || in engine constraint", () => {
expect.assertions(1);
pkg.devDependencies = {
"@types/node": "^14.1.2",
};
pkg.engines.node = "^10.2.3 || ^12.2.3 || 14.2.3";
expect(Array.from(typesNodeMatchingEngine(pkg))).toMatchInlineSnapshot(`
[
{
"column": 1,
"line": 1,
"message": "@types/node v14 does not equal engines.node v10",
"ruleId": "types-node-matching-engine",
"severity": 2,
},
]
`);
});
it("should handle when @types/node dependency is missing", () => {
expect.assertions(1);
delete pkg.dependencies;
delete pkg.devDependencies;
delete pkg.peerDependencies;
expect(Array.from(typesNodeMatchingEngine(pkg))).toEqual([]);
});
it("should handle when engines.node is missing", () => {
expect.assertions(1);
delete pkg.engines.node;
expect(Array.from(typesNodeMatchingEngine(pkg))).toEqual([]);
});
it("should handle when engines.node is not a valid semver range", () => {
expect.assertions(1);
pkg.engines.node = "foobar";
expect(Array.from(typesNodeMatchingEngine(pkg))).toEqual([]);
});