@monorepolint/rules 0.5.0-alpha.13 → 0.5.0-alpha.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/.turbo/turbo-clean.log +4 -0
  2. package/.turbo/turbo-compile-typescript.log +4 -0
  3. package/.turbo/turbo-lint.log +14 -0
  4. package/.turbo/turbo-test.log +666 -0
  5. package/.turbo/turbo-transpile-typescript.log +18 -0
  6. package/build/js/chunk-A2MUUSNE.js +26 -0
  7. package/build/js/chunk-A2MUUSNE.js.map +1 -0
  8. package/build/js/index.js +1402 -0
  9. package/build/js/index.js.map +1 -0
  10. package/build/js/public/util.js +7 -0
  11. package/build/js/public/util.js.map +1 -0
  12. package/build/tsconfig.tsbuildinfo +1 -0
  13. package/build/types/__tests__/alphabeticalScripts.spec.d.ts.map +1 -0
  14. package/build/types/__tests__/bannedDependencies.spec.d.ts +2 -0
  15. package/build/types/__tests__/bannedDependencies.spec.d.ts.map +1 -0
  16. package/build/types/__tests__/consistentDependencies.spec.d.ts.map +1 -0
  17. package/build/types/__tests__/consistentVersions.spec.d.ts +8 -0
  18. package/build/types/__tests__/consistentVersions.spec.d.ts.map +1 -0
  19. package/build/types/__tests__/fileContents.spec.d.ts.map +1 -0
  20. package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts +8 -0
  21. package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts.map +1 -0
  22. package/build/types/__tests__/nestedWorkspaces.spec.d.ts +2 -0
  23. package/build/types/__tests__/nestedWorkspaces.spec.d.ts.map +1 -0
  24. package/build/types/__tests__/packageEntry.spec.d.ts.map +1 -0
  25. package/build/types/__tests__/packageOrder.spec.d.ts.map +1 -0
  26. package/build/types/__tests__/packageScript.spec.d.ts.map +1 -0
  27. package/build/types/__tests__/requireDependency.spec.d.ts +2 -0
  28. package/build/types/__tests__/requireDependency.spec.d.ts.map +1 -0
  29. package/build/types/__tests__/utils.d.ts +81 -0
  30. package/build/types/__tests__/utils.d.ts.map +1 -0
  31. package/build/types/alphabeticalDependencies.d.ts +8 -0
  32. package/build/types/alphabeticalDependencies.d.ts.map +1 -0
  33. package/build/types/alphabeticalScripts.d.ts +8 -0
  34. package/build/types/alphabeticalScripts.d.ts.map +1 -0
  35. package/build/types/bannedDependencies.d.ts +66 -0
  36. package/build/types/bannedDependencies.d.ts.map +1 -0
  37. package/build/types/consistentDependencies.d.ts +18 -0
  38. package/build/types/consistentDependencies.d.ts.map +1 -0
  39. package/build/types/consistentVersions.d.ts +25 -0
  40. package/build/types/consistentVersions.d.ts.map +1 -0
  41. package/build/types/fileContents.d.ts +39 -0
  42. package/build/types/fileContents.d.ts.map +1 -0
  43. package/build/types/index.d.ts +20 -0
  44. package/build/types/index.d.ts.map +1 -0
  45. package/build/types/mustSatisfyPeerDependencies.d.ts +427 -0
  46. package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -0
  47. package/build/types/nestedWorkspaces.d.ts +10 -0
  48. package/build/types/nestedWorkspaces.d.ts.map +1 -0
  49. package/build/types/packageEntry.d.ts +62 -0
  50. package/build/types/packageEntry.d.ts.map +1 -0
  51. package/build/types/packageOrder.d.ts +12 -0
  52. package/build/types/packageOrder.d.ts.map +1 -0
  53. package/build/types/packageScript.d.ts +47 -0
  54. package/build/types/packageScript.d.ts.map +1 -0
  55. package/build/types/public/util.d.ts +2 -0
  56. package/build/types/public/util.d.ts.map +1 -0
  57. package/build/types/requireDependency.d.ts +50 -0
  58. package/build/types/requireDependency.d.ts.map +1 -0
  59. package/build/types/standardTsconfig.d.ts +29 -0
  60. package/build/types/standardTsconfig.d.ts.map +1 -0
  61. package/{lib → build/types}/util/checkAlpha.d.ts +2 -1
  62. package/build/types/util/checkAlpha.d.ts.map +1 -0
  63. package/build/types/util/makeDirectory.d.ts.map +1 -0
  64. package/build/types/util/makeRule.d.ts +12 -0
  65. package/build/types/util/makeRule.d.ts.map +1 -0
  66. package/build/types/util/packageDependencyGraphService.d.ts +37 -0
  67. package/build/types/util/packageDependencyGraphService.d.ts.map +1 -0
  68. package/package.json +45 -20
  69. package/src/__tests__/alphabeticalScripts.spec.ts +33 -31
  70. package/src/__tests__/bannedDependencies.spec.ts +189 -0
  71. package/src/__tests__/consistentDependencies.spec.ts +40 -15
  72. package/src/__tests__/consistentVersions.spec.ts +224 -0
  73. package/src/__tests__/fileContents.spec.ts +69 -50
  74. package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +1189 -0
  75. package/src/__tests__/nestedWorkspaces.spec.ts +153 -0
  76. package/src/__tests__/packageEntry.spec.ts +127 -49
  77. package/src/__tests__/packageOrder.spec.ts +68 -53
  78. package/src/__tests__/packageScript.spec.ts +124 -98
  79. package/src/__tests__/requireDependency.spec.ts +152 -0
  80. package/src/__tests__/utils.ts +111 -19
  81. package/src/alphabeticalDependencies.ts +7 -9
  82. package/src/alphabeticalScripts.ts +7 -9
  83. package/src/bannedDependencies.ts +135 -46
  84. package/src/consistentDependencies.ts +41 -17
  85. package/src/consistentVersions.ts +141 -0
  86. package/src/fileContents.ts +45 -40
  87. package/src/index.ts +13 -9
  88. package/src/mustSatisfyPeerDependencies.ts +744 -0
  89. package/src/nestedWorkspaces.ts +60 -0
  90. package/src/packageEntry.ts +72 -28
  91. package/src/packageOrder.ts +17 -13
  92. package/src/packageScript.ts +15 -19
  93. package/src/public/util.ts +1 -0
  94. package/src/requireDependency.ts +71 -0
  95. package/src/standardTsconfig.ts +51 -27
  96. package/src/util/checkAlpha.ts +9 -6
  97. package/src/util/makeRule.ts +29 -0
  98. package/src/util/packageDependencyGraphService.ts +114 -0
  99. package/tsconfig.json +10 -2
  100. package/lib/__tests__/alphabeticalScripts.spec.d.ts.map +0 -1
  101. package/lib/__tests__/alphabeticalScripts.spec.js +0 -61
  102. package/lib/__tests__/alphabeticalScripts.spec.js.map +0 -1
  103. package/lib/__tests__/consistentDependencies.spec.d.ts.map +0 -1
  104. package/lib/__tests__/consistentDependencies.spec.js +0 -99
  105. package/lib/__tests__/consistentDependencies.spec.js.map +0 -1
  106. package/lib/__tests__/fileContents.spec.d.ts.map +0 -1
  107. package/lib/__tests__/fileContents.spec.js +0 -66
  108. package/lib/__tests__/fileContents.spec.js.map +0 -1
  109. package/lib/__tests__/packageEntry.spec.d.ts.map +0 -1
  110. package/lib/__tests__/packageEntry.spec.js +0 -99
  111. package/lib/__tests__/packageEntry.spec.js.map +0 -1
  112. package/lib/__tests__/packageOrder.spec.d.ts.map +0 -1
  113. package/lib/__tests__/packageOrder.spec.js +0 -115
  114. package/lib/__tests__/packageOrder.spec.js.map +0 -1
  115. package/lib/__tests__/packageScript.spec.d.ts.map +0 -1
  116. package/lib/__tests__/packageScript.spec.js +0 -172
  117. package/lib/__tests__/packageScript.spec.js.map +0 -1
  118. package/lib/__tests__/utils.d.ts +0 -9
  119. package/lib/__tests__/utils.d.ts.map +0 -1
  120. package/lib/__tests__/utils.js +0 -33
  121. package/lib/__tests__/utils.js.map +0 -1
  122. package/lib/alphabeticalDependencies.d.ts +0 -12
  123. package/lib/alphabeticalDependencies.d.ts.map +0 -1
  124. package/lib/alphabeticalDependencies.js +0 -21
  125. package/lib/alphabeticalDependencies.js.map +0 -1
  126. package/lib/alphabeticalScripts.d.ts +0 -12
  127. package/lib/alphabeticalScripts.d.ts.map +0 -1
  128. package/lib/alphabeticalScripts.js +0 -19
  129. package/lib/alphabeticalScripts.js.map +0 -1
  130. package/lib/bannedDependencies.d.ts +0 -15
  131. package/lib/bannedDependencies.d.ts.map +0 -1
  132. package/lib/bannedDependencies.js +0 -57
  133. package/lib/bannedDependencies.js.map +0 -1
  134. package/lib/consistentDependencies.d.ts +0 -10
  135. package/lib/consistentDependencies.d.ts.map +0 -1
  136. package/lib/consistentDependencies.js +0 -57
  137. package/lib/consistentDependencies.js.map +0 -1
  138. package/lib/fileContents.d.ts +0 -25
  139. package/lib/fileContents.d.ts.map +0 -1
  140. package/lib/fileContents.js +0 -80
  141. package/lib/fileContents.js.map +0 -1
  142. package/lib/index.d.ts +0 -16
  143. package/lib/index.d.ts.map +0 -1
  144. package/lib/index.js +0 -27
  145. package/lib/index.js.map +0 -1
  146. package/lib/packageEntry.d.ts +0 -16
  147. package/lib/packageEntry.d.ts.map +0 -1
  148. package/lib/packageEntry.js +0 -40
  149. package/lib/packageEntry.js.map +0 -1
  150. package/lib/packageOrder.d.ts +0 -12
  151. package/lib/packageOrder.d.ts.map +0 -1
  152. package/lib/packageOrder.js +0 -103
  153. package/lib/packageOrder.js.map +0 -1
  154. package/lib/packageScript.d.ts +0 -25
  155. package/lib/packageScript.d.ts.map +0 -1
  156. package/lib/packageScript.js +0 -89
  157. package/lib/packageScript.js.map +0 -1
  158. package/lib/standardTsconfig.d.ts +0 -33
  159. package/lib/standardTsconfig.d.ts.map +0 -1
  160. package/lib/standardTsconfig.js +0 -98
  161. package/lib/standardTsconfig.js.map +0 -1
  162. package/lib/util/checkAlpha.d.ts.map +0 -1
  163. package/lib/util/checkAlpha.js +0 -47
  164. package/lib/util/checkAlpha.js.map +0 -1
  165. package/lib/util/makeDirectory.d.ts.map +0 -1
  166. package/lib/util/makeDirectory.js +0 -27
  167. package/lib/util/makeDirectory.js.map +0 -1
  168. package/tsconfig.tsbuildinfo +0 -2510
  169. /package/{lib → build/types}/__tests__/alphabeticalScripts.spec.d.ts +0 -0
  170. /package/{lib → build/types}/__tests__/consistentDependencies.spec.d.ts +0 -0
  171. /package/{lib → build/types}/__tests__/fileContents.spec.d.ts +0 -0
  172. /package/{lib → build/types}/__tests__/packageEntry.spec.d.ts +0 -0
  173. /package/{lib → build/types}/__tests__/packageOrder.spec.d.ts +0 -0
  174. /package/{lib → build/types}/__tests__/packageScript.spec.d.ts +0 -0
  175. /package/{lib → build/types}/util/makeDirectory.d.ts +0 -0
  176. /package/{jest.config.js → jest.config.cjs} +0 -0
@@ -0,0 +1,224 @@
1
+ /*!
2
+ * Copyright 2020 Palantir Technologies, Inc.
3
+ *
4
+ * Licensed under the MIT license. See LICENSE file in the project root for details.
5
+ *
6
+ */
7
+
8
+ import { WorkspaceContextImpl } from "@monorepolint/core";
9
+ import { Host, PackageJson, SimpleHost } from "@monorepolint/utils";
10
+ import * as path from "path";
11
+ import * as tmp from "tmp";
12
+ import { consistentVersions, Options } from "../consistentVersions.js";
13
+ import { makeDirectoryRecursively } from "../util/makeDirectory.js";
14
+ import { describe, expect, it, beforeEach, afterEach, jest } from "@jest/globals";
15
+
16
+ describe("consistentVersions", () => {
17
+ tmp.setGracefulCleanup();
18
+
19
+ let cleanupJobs: Array<() => void> = [];
20
+ let cwd: string | undefined;
21
+
22
+ beforeEach(() => {
23
+ const dir = tmp.dirSync({ unsafeCleanup: true });
24
+ cleanupJobs.push(() => dir.removeCallback());
25
+ cwd = dir.name;
26
+
27
+ const spy = jest.spyOn(process, "cwd");
28
+ spy.mockReturnValue(cwd);
29
+ });
30
+
31
+ afterEach(() => {
32
+ for (const cleanupJob of cleanupJobs) {
33
+ cleanupJob();
34
+ }
35
+ cleanupJobs = [];
36
+ });
37
+
38
+ function makeWorkspace(fix = false) {
39
+ const host: Host = new SimpleHost();
40
+ const workspaceContext = new WorkspaceContextImpl(
41
+ cwd!,
42
+ {
43
+ rules: [],
44
+ fix,
45
+ verbose: false,
46
+ silent: true,
47
+ },
48
+ host
49
+ );
50
+ const addErrorSpy = jest.spyOn(workspaceContext, "addError");
51
+
52
+ function check(options: Options = { matchDependencyVersions: {} }) {
53
+ consistentVersions({ options }).check(workspaceContext);
54
+ }
55
+
56
+ return { addErrorSpy, check, host };
57
+ }
58
+
59
+ function addPackageJson(host: Host, filePath: string, packageJson: PackageJson) {
60
+ const dirPath = path.resolve(cwd!, path.dirname(filePath));
61
+ const resolvedFilePath = path.resolve(cwd!, filePath);
62
+
63
+ makeDirectoryRecursively(dirPath);
64
+ host.writeJson(resolvedFilePath, packageJson);
65
+ return (): PackageJson => {
66
+ return host.readJson(resolvedFilePath);
67
+ };
68
+ }
69
+
70
+ describe("standard tests", () => {
71
+ let testPackageJson: PackageJson;
72
+
73
+ beforeEach(() => {
74
+ testPackageJson = {
75
+ name: "test",
76
+ dependencies: {
77
+ greatLib: "^15",
78
+ both: "1",
79
+ },
80
+ peerDependencies: {
81
+ whatever: "15",
82
+ },
83
+ devDependencies: {
84
+ else: "27.2.1",
85
+ both: "1",
86
+ },
87
+ };
88
+ });
89
+
90
+ it("Does nothing when arguments are empty", async () => {
91
+ const { addErrorSpy, check, host } = makeWorkspace();
92
+ addPackageJson(host, "./package.json", testPackageJson);
93
+
94
+ check();
95
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
96
+ check({ matchDependencyVersions: {} });
97
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
98
+ });
99
+
100
+ it("Fixes packages that have an incorrect dependency version", async () => {
101
+ const { addErrorSpy, check, host } = makeWorkspace(true);
102
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
103
+
104
+ const requiredGreatLibVersion = "1.2.3";
105
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
106
+ check({
107
+ matchDependencyVersions: { both: testPackageJson.dependencies!.both, greatLib: requiredGreatLibVersion },
108
+ });
109
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
110
+ expect(readTestPackageJson().dependencies!.greatLib).toEqual(requiredGreatLibVersion);
111
+ });
112
+
113
+ it("Ignores packages that have a correct dependency version", async () => {
114
+ const { addErrorSpy, check, host } = makeWorkspace();
115
+ addPackageJson(host, "./package.json", testPackageJson);
116
+
117
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
118
+ check({
119
+ matchDependencyVersions: {
120
+ both: testPackageJson.dependencies!.both,
121
+ greatLib: testPackageJson.dependencies!.greatLib,
122
+ },
123
+ });
124
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
125
+ });
126
+
127
+ it("Fixes packages that have an incorrect devDependency version", async () => {
128
+ const { addErrorSpy, check, host } = makeWorkspace(true);
129
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
130
+
131
+ const requiredElseLibVersion = "1.2.3";
132
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
133
+ check({ matchDependencyVersions: { both: testPackageJson.dependencies!.both, else: requiredElseLibVersion } });
134
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
135
+ expect(readTestPackageJson().devDependencies!.else).toEqual(requiredElseLibVersion);
136
+ });
137
+
138
+ it("Ignores packages that have a correct devDependency version", async () => {
139
+ const { addErrorSpy, check, host } = makeWorkspace();
140
+ addPackageJson(host, "./package.json", testPackageJson);
141
+
142
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
143
+ check({
144
+ matchDependencyVersions: {
145
+ both: testPackageJson.dependencies!.both,
146
+ greatLib: testPackageJson.dependencies!.greatLib,
147
+ },
148
+ });
149
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
150
+ });
151
+
152
+ it("Fixes packages that have an incorrect dependency and devDependency versions", async () => {
153
+ const { addErrorSpy, check, host } = makeWorkspace(true);
154
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
155
+
156
+ const requiredBothVersion = "1.2.3";
157
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
158
+ check({ matchDependencyVersions: { both: requiredBothVersion } });
159
+ expect(addErrorSpy).toHaveBeenCalledTimes(2);
160
+ expect(readTestPackageJson().dependencies!.both).toEqual(requiredBothVersion);
161
+ expect(readTestPackageJson().devDependencies!.both).toEqual(requiredBothVersion);
162
+ });
163
+ });
164
+
165
+ describe("Multiple accepted versions tests", () => {
166
+ let testPackageJson: PackageJson;
167
+
168
+ beforeEach(() => {
169
+ testPackageJson = {
170
+ name: "test",
171
+ dependencies: {
172
+ greatLib: "^15",
173
+ both: "1",
174
+ },
175
+ peerDependencies: {
176
+ whatever: "15",
177
+ },
178
+ devDependencies: {
179
+ else: "27.2.1",
180
+ both: "1",
181
+ },
182
+ };
183
+ });
184
+
185
+ it("Accepts a match when multiple versions are configured", async () => {
186
+ const { addErrorSpy, check, host } = makeWorkspace();
187
+ addPackageJson(host, "./package.json", testPackageJson);
188
+
189
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
190
+ check({ matchDependencyVersions: { greatLib: [testPackageJson.dependencies!.greatLib] } });
191
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
192
+ check({ matchDependencyVersions: { greatLib: ["1", "2", testPackageJson.dependencies!.greatLib] } });
193
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
194
+ check({ matchDependencyVersions: { greatLib: ["1", "2", testPackageJson.dependencies!.greatLib, "99", "100"] } });
195
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
196
+ check({ matchDependencyVersions: { greatLib: [testPackageJson.dependencies!.greatLib, "99", "100"] } });
197
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
198
+ });
199
+
200
+ it("Errors when version does not match", async () => {
201
+ const { addErrorSpy, check, host } = makeWorkspace();
202
+ addPackageJson(host, "./package.json", testPackageJson);
203
+
204
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
205
+ check({ matchDependencyVersions: { greatLib: ["1", "2"] } });
206
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
207
+ addErrorSpy.mockReset();
208
+
209
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
210
+ check({ matchDependencyVersions: { both: ["99", "100"] } });
211
+ expect(addErrorSpy).toHaveBeenCalledTimes(2);
212
+ expect(addErrorSpy.mock.calls[0][0].message).toEqual(
213
+ `Expected dependency on both to match one of '["99","100"]', got '${
214
+ testPackageJson.dependencies!.both
215
+ }' instead.`
216
+ );
217
+ expect(addErrorSpy.mock.calls[1][0].message).toEqual(
218
+ `Expected devDependency on both to match one of '["99","100"]', got '${
219
+ testPackageJson.devDependencies!.both
220
+ }' instead.`
221
+ );
222
+ });
223
+ });
224
+ });
@@ -6,77 +6,96 @@
6
6
  */
7
7
 
8
8
  // tslint:disable:no-console
9
- import { createMockFiles } from "./utils";
10
-
11
- // done first since this also mocks 'fs'
12
- const mockFiles: Map<string, string> = createMockFiles();
13
-
14
- import { Failure, PackageContext } from "@monorepolint/core";
15
- import * as path from "path";
16
- import { fileContents } from "../fileContents";
9
+ import { createTestingWorkspace, HOST_FACTORIES, TestingWorkspace } from "./utils.js";
10
+ import { AddErrorOptions, Failure } from "@monorepolint/config";
11
+ import { fileContents } from "../fileContents.js";
12
+ import { describe, expect, it, beforeEach, jest } from "@jest/globals";
17
13
 
18
14
  const EXPECTED_FOO_FILE = "hello world";
19
15
 
20
- describe("fileContents", () => {
21
- afterEach(() => {
22
- mockFiles.clear();
23
- });
24
-
16
+ describe.each(HOST_FACTORIES)("fileContents ($name)", (hostFactory) => {
25
17
  describe("fix: true", () => {
26
- const context = new PackageContext(".", {
27
- rules: [],
28
- fix: true,
29
- verbose: false,
30
- silent: true,
31
- });
32
- const spy = jest.spyOn(context, "addError");
18
+ let workspace: TestingWorkspace;
19
+ let spy: jest.SpiedFunction<(opts: AddErrorOptions) => void>;
33
20
 
34
- afterEach(() => {
35
- spy.mockClear();
36
- });
21
+ beforeEach(async () => {
22
+ workspace = await createTestingWorkspace({
23
+ fixFlag: true,
24
+ host: hostFactory.make(),
25
+ });
26
+ workspace.writeFile("shared/foo-template.txt", EXPECTED_FOO_FILE);
37
27
 
38
- it("fixes missing file", () => {
39
- mockFiles.set(path.resolve(context.getWorkspaceContext().packageDir, "foo-template.txt"), EXPECTED_FOO_FILE);
28
+ spy = jest.spyOn(workspace.context, "addError");
29
+ });
40
30
 
41
- fileContents.check(context, {
42
- file: "foo.txt",
43
- templateFile: "foo-template.txt",
44
- generator: undefined,
45
- template: undefined,
46
- });
31
+ it("works with async generator", async () => {
32
+ await fileContents({
33
+ options: {
34
+ file: "foo.txt",
35
+ generator: () => Promise.resolve(EXPECTED_FOO_FILE),
36
+ },
37
+ }).check(workspace.context);
47
38
 
48
39
  expect(spy).toHaveBeenCalledTimes(1);
49
40
 
50
41
  const failure: Failure = spy.mock.calls[0][0];
51
- expect(failure.file).toBe("foo.txt");
52
- expect(failure.fixer).not.toBeUndefined();
53
- expect(failure.message).toBe("Expect file contents to match");
42
+ expect(failure).toMatchObject(
43
+ workspace.failureMatcher({
44
+ file: "foo.txt",
45
+ hasFixer: true,
46
+ message: "Expect file contents to match",
47
+ })
48
+ );
54
49
 
55
- expect(mockFiles.get("foo.txt")).toEqual(EXPECTED_FOO_FILE);
50
+ expect(workspace.readFile("foo.txt")).toEqual(EXPECTED_FOO_FILE);
56
51
  });
57
52
 
58
- it("fixes missing nested file", () => {
59
- mockFiles.set(
60
- path.resolve(context.getWorkspaceContext().packageDir, "shared/foo-template.txt"),
61
- EXPECTED_FOO_FILE
53
+ it("fixes missing file", async () => {
54
+ await fileContents({
55
+ options: {
56
+ file: "foo.txt",
57
+ templateFile: "shared/foo-template.txt",
58
+ generator: undefined,
59
+ template: undefined,
60
+ },
61
+ }).check(workspace.context);
62
+
63
+ expect(spy).toHaveBeenCalledTimes(1);
64
+
65
+ const failure: Failure = spy.mock.calls[0][0];
66
+ expect(failure).toMatchObject(
67
+ workspace.failureMatcher({
68
+ file: "foo.txt",
69
+ hasFixer: true,
70
+ message: "Expect file contents to match",
71
+ })
62
72
  );
63
73
 
64
- fileContents.check(context, {
65
- file: "nested/foo.txt",
66
- templateFile: "shared/foo-template.txt",
67
- generator: undefined,
68
- template: undefined,
69
- });
74
+ expect(workspace.readFile("foo.txt")).toEqual(EXPECTED_FOO_FILE);
75
+ });
76
+
77
+ it("fixes missing nested file", async () => {
78
+ await fileContents({
79
+ options: {
80
+ file: "nested/foo.txt",
81
+ templateFile: "shared/foo-template.txt",
82
+ generator: undefined,
83
+ template: undefined,
84
+ },
85
+ }).check(workspace.context);
70
86
 
71
87
  expect(spy).toHaveBeenCalledTimes(1);
72
88
 
73
89
  const failure: Failure = spy.mock.calls[0][0];
74
- expect(failure.file).toBe("nested/foo.txt");
75
- expect(failure.fixer).not.toBeUndefined();
76
- expect(failure.message).toBe("Expect file contents to match");
90
+ expect(failure).toMatchObject(
91
+ workspace.failureMatcher({
92
+ file: "nested/foo.txt",
93
+ hasFixer: true,
94
+ message: "Expect file contents to match",
95
+ })
96
+ );
77
97
 
78
- expect(mockFiles.get("nested")).not.toBeUndefined();
79
- expect(mockFiles.get("nested/foo.txt")).toEqual(EXPECTED_FOO_FILE);
98
+ expect(workspace.readFile("nested/foo.txt")).toEqual(EXPECTED_FOO_FILE);
80
99
  });
81
100
  });
82
101
  });