|
1 |
| -import { NpmInfo } from "@definitelytyped/utils"; |
| 1 | +import * as util from "util"; |
| 2 | +import * as pacote from "pacote"; |
2 | 3 | import { createTypingsVersionRaw, testo } from "./utils";
|
3 | 4 | import { GitDiff, getNotNeededPackages, checkNotNeededPackage } from "../src/git";
|
4 | 5 | import { NotNeededPackage, TypesDataFile, AllPackages } from "../src/packages";
|
@@ -65,94 +66,62 @@ testo({
|
65 | 66 | // TODO: Test with dependents, etc etc
|
66 | 67 | });
|
67 | 68 |
|
68 |
| -const empty: NpmInfo = { |
69 |
| - homepage: "", |
70 |
| - distTags: new Map(), |
71 |
| - versions: new Map(), |
72 |
| - time: new Map(), |
73 |
| -}; |
| 69 | +jest.mock("pacote", () => ({ |
| 70 | + async manifest(spec: string, opts: pacote.Options) { |
| 71 | + switch (spec) { |
| 72 | + case "[email protected]": // Older than the @types/jest package. |
| 73 | + case "[email protected]": // The same version as the @types/jest package. |
| 74 | + case "[email protected]": // Newer than the @types/jest package. |
| 75 | + // These versions exist (don't throw). |
| 76 | + return; |
| 77 | + case "[email protected]": // A nonexistent version of the replacement package. |
| 78 | + // eslint-disable-next-line no-throw-literal |
| 79 | + throw { code: "ETARGET" }; |
| 80 | + case "@types/jest": // The @types/jest package. |
| 81 | + return { version: "50.0.0" }; |
| 82 | + case "[email protected]": // A nonexistent replacement package. |
| 83 | + case "@types/nonexistent": // A nonexistent @types package. |
| 84 | + // eslint-disable-next-line no-throw-literal |
| 85 | + throw { code: opts.offline ? "ENOTCACHED" : "E404" }; |
| 86 | + } |
| 87 | + throw new Error(`Unexpected npm registry fetch: ${util.inspect(spec)}`); |
| 88 | + }, |
| 89 | +})); |
| 90 | + |
| 91 | +const newerReplacement = new NotNeededPackage("jest", "jest", "100.0.0"); |
| 92 | +const olderReplacement = new NotNeededPackage("jest", "jest", "4.0.0"); |
| 93 | +const sameVersion = new NotNeededPackage("jest", "jest", "50.0.0"); |
| 94 | +const nonexistentReplacementVersion = new NotNeededPackage("jest", "jest", "999.0.0"); |
| 95 | +const nonexistentReplacementPackage = new NotNeededPackage("jest", "nonexistent", "100.0.0"); |
| 96 | +const nonexistentTypesPackage = new NotNeededPackage("nonexistent", "jest", "100.0.0"); |
| 97 | + |
74 | 98 | testo({
|
75 | 99 | missingSource() {
|
76 |
| - expect(() => checkNotNeededPackage(jestNotNeeded[0], undefined, empty)).toThrow( |
| 100 | + return expect(checkNotNeededPackage(nonexistentReplacementPackage)).rejects.toThrow( |
77 | 101 | "The entry for @types/jest in notNeededPackages.json"
|
78 | 102 | );
|
79 | 103 | },
|
80 | 104 | missingTypings() {
|
81 |
| - expect(() => checkNotNeededPackage(jestNotNeeded[0], empty, undefined)).toThrow( |
82 |
| - "@types package not found for @types/jest" |
83 |
| - ); |
84 |
| - }, |
85 |
| - missingTypingsLatest() { |
86 |
| - expect(() => checkNotNeededPackage(jestNotNeeded[0], empty, empty)).toThrow( |
87 |
| - '@types/jest is missing the "latest" tag' |
| 105 | + return expect(checkNotNeededPackage(nonexistentTypesPackage)).rejects.toThrow( |
| 106 | + "@types package not found for @types/nonexistent" |
88 | 107 | );
|
89 | 108 | },
|
90 | 109 | deprecatedSameVersion() {
|
91 |
| - expect(() => { |
92 |
| - checkNotNeededPackage(jestNotNeeded[0], empty, { |
93 |
| - homepage: "jest.com", |
94 |
| - distTags: new Map([["latest", "100.0.0"]]), |
95 |
| - versions: new Map(), |
96 |
| - time: new Map([["modified", ""]]), |
97 |
| - }); |
98 |
| - }).toThrow(`The specified version 100.0.0 of jest must be newer than the version |
99 |
| -it is supposed to replace, 100.0.0 of @types/jest.`); |
| 110 | + return expect(checkNotNeededPackage(sameVersion)).rejects |
| 111 | + .toThrow(`The specified version 50.0.0 of jest must be newer than the version |
| 112 | +it is supposed to replace, 50.0.0 of @types/jest.`); |
100 | 113 | },
|
101 | 114 | deprecatedOlderVersion() {
|
102 |
| - expect(() => { |
103 |
| - checkNotNeededPackage(jestNotNeeded[0], empty, { |
104 |
| - homepage: "jest.com", |
105 |
| - distTags: new Map([["latest", "999.0.0"]]), |
106 |
| - versions: new Map(), |
107 |
| - time: new Map([["modified", ""]]), |
108 |
| - }); |
109 |
| - }).toThrow(`The specified version 100.0.0 of jest must be newer than the version |
110 |
| -it is supposed to replace, 999.0.0 of @types/jest.`); |
| 115 | + return expect(checkNotNeededPackage(olderReplacement)).rejects |
| 116 | + .toThrow(`The specified version 4.0.0 of jest must be newer than the version |
| 117 | +it is supposed to replace, 50.0.0 of @types/jest.`); |
111 | 118 | },
|
112 | 119 | missingNpmVersion() {
|
113 |
| - expect(() => { |
114 |
| - checkNotNeededPackage(jestNotNeeded[0], empty, { |
115 |
| - homepage: "jest.com", |
116 |
| - distTags: new Map([["latest", "4.0.0"]]), |
117 |
| - versions: new Map(), |
118 |
| - time: new Map([["modified", ""]]), |
119 |
| - }); |
120 |
| - }).toThrow("The specified version 100.0.0 of jest is not on npm."); |
121 |
| - }, |
122 |
| - olderNpmVersion() { |
123 |
| - expect(() => |
124 |
| - checkNotNeededPackage( |
125 |
| - jestNotNeeded[0], |
126 |
| - { |
127 |
| - homepage: "jest.com", |
128 |
| - distTags: new Map(), |
129 |
| - versions: new Map([["50.0.0", {}]]), |
130 |
| - time: new Map([["modified", ""]]), |
131 |
| - }, |
132 |
| - { |
133 |
| - homepage: "jest.com", |
134 |
| - distTags: new Map([["latest", "4.0.0"]]), |
135 |
| - versions: new Map(), |
136 |
| - time: new Map([["modified", ""]]), |
137 |
| - } |
138 |
| - ) |
139 |
| - ).toThrow("The specified version 100.0.0 of jest is not on npm."); |
| 120 | + return expect(checkNotNeededPackage(nonexistentReplacementVersion)).rejects.toThrow( |
| 121 | + "The specified version 999.0.0 of jest is not on npm." |
| 122 | + ); |
140 | 123 | },
|
141 | 124 | ok() {
|
142 |
| - checkNotNeededPackage( |
143 |
| - jestNotNeeded[0], |
144 |
| - { |
145 |
| - homepage: "jest.com", |
146 |
| - distTags: new Map(), |
147 |
| - versions: new Map([["100.0.0", {}]]), |
148 |
| - time: new Map([["modified", ""]]), |
149 |
| - }, |
150 |
| - { |
151 |
| - homepage: "jest.com", |
152 |
| - distTags: new Map([["latest", "4.0.0"]]), |
153 |
| - versions: new Map(), |
154 |
| - time: new Map([["modified", ""]]), |
155 |
| - } |
156 |
| - ); |
| 125 | + return checkNotNeededPackage(newerReplacement); |
157 | 126 | },
|
158 | 127 | });
|
0 commit comments