@monorepolint/rules 0.5.0-alpha.82 → 0.5.0-alpha.85

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 (106) hide show
  1. package/lib/__tests__/alphabeticalScripts.spec.js +22 -24
  2. package/lib/__tests__/alphabeticalScripts.spec.js.map +1 -1
  3. package/lib/__tests__/bannedDependencies.spec.js +67 -9
  4. package/lib/__tests__/bannedDependencies.spec.js.map +1 -1
  5. package/lib/__tests__/consistentDependencies.spec.js +11 -10
  6. package/lib/__tests__/consistentDependencies.spec.js.map +1 -1
  7. package/lib/__tests__/consistentVersions.spec.js +23 -22
  8. package/lib/__tests__/consistentVersions.spec.js.map +1 -1
  9. package/lib/__tests__/fileContents.spec.js +25 -32
  10. package/lib/__tests__/fileContents.spec.js.map +1 -1
  11. package/lib/__tests__/mustSatisfyPeerDependencies.spec.js +49 -48
  12. package/lib/__tests__/mustSatisfyPeerDependencies.spec.js.map +1 -1
  13. package/lib/__tests__/nestedWorkspaces.spec.js +10 -8
  14. package/lib/__tests__/nestedWorkspaces.spec.js.map +1 -1
  15. package/lib/__tests__/packageEntry.spec.js +47 -40
  16. package/lib/__tests__/packageEntry.spec.js.map +1 -1
  17. package/lib/__tests__/packageOrder.spec.js +34 -33
  18. package/lib/__tests__/packageOrder.spec.js.map +1 -1
  19. package/lib/__tests__/packageScript.spec.js +50 -51
  20. package/lib/__tests__/packageScript.spec.js.map +1 -1
  21. package/lib/__tests__/requireDependency.spec.js +12 -11
  22. package/lib/__tests__/requireDependency.spec.js.map +1 -1
  23. package/lib/__tests__/utils.d.ts +68 -1
  24. package/lib/__tests__/utils.d.ts.map +1 -1
  25. package/lib/__tests__/utils.js +70 -21
  26. package/lib/__tests__/utils.js.map +1 -1
  27. package/lib/alphabeticalDependencies.js +3 -3
  28. package/lib/alphabeticalDependencies.js.map +1 -1
  29. package/lib/alphabeticalScripts.js +1 -1
  30. package/lib/alphabeticalScripts.js.map +1 -1
  31. package/lib/bannedDependencies.d.ts +21 -12
  32. package/lib/bannedDependencies.d.ts.map +1 -1
  33. package/lib/bannedDependencies.js +86 -57
  34. package/lib/bannedDependencies.js.map +1 -1
  35. package/lib/consistentDependencies.d.ts +6 -6
  36. package/lib/consistentDependencies.d.ts.map +1 -1
  37. package/lib/consistentDependencies.js +2 -3
  38. package/lib/consistentDependencies.js.map +1 -1
  39. package/lib/consistentVersions.d.ts +1 -1
  40. package/lib/consistentVersions.js +8 -8
  41. package/lib/consistentVersions.js.map +1 -1
  42. package/lib/fileContents.d.ts +8 -8
  43. package/lib/fileContents.d.ts.map +1 -1
  44. package/lib/fileContents.js +32 -31
  45. package/lib/fileContents.js.map +1 -1
  46. package/lib/index.js +1 -0
  47. package/lib/index.js.map +1 -1
  48. package/lib/mustSatisfyPeerDependencies.d.ts +31 -31
  49. package/lib/mustSatisfyPeerDependencies.d.ts.map +1 -1
  50. package/lib/mustSatisfyPeerDependencies.js +18 -16
  51. package/lib/mustSatisfyPeerDependencies.js.map +1 -1
  52. package/lib/packageEntry.d.ts +11 -20
  53. package/lib/packageEntry.d.ts.map +1 -1
  54. package/lib/packageEntry.js +15 -7
  55. package/lib/packageEntry.js.map +1 -1
  56. package/lib/packageOrder.d.ts +3 -3
  57. package/lib/packageOrder.d.ts.map +1 -1
  58. package/lib/packageOrder.js +2 -3
  59. package/lib/packageOrder.js.map +1 -1
  60. package/lib/packageScript.d.ts +10 -10
  61. package/lib/packageScript.js +4 -4
  62. package/lib/packageScript.js.map +1 -1
  63. package/lib/requireDependency.d.ts +6 -6
  64. package/lib/requireDependency.d.ts.map +1 -1
  65. package/lib/requireDependency.js +3 -3
  66. package/lib/requireDependency.js.map +1 -1
  67. package/lib/standardTsconfig.d.ts +10 -10
  68. package/lib/standardTsconfig.d.ts.map +1 -1
  69. package/lib/standardTsconfig.js +26 -21
  70. package/lib/standardTsconfig.js.map +1 -1
  71. package/lib/util/checkAlpha.d.ts +1 -0
  72. package/lib/util/checkAlpha.d.ts.map +1 -1
  73. package/lib/util/checkAlpha.js +8 -5
  74. package/lib/util/checkAlpha.js.map +1 -1
  75. package/lib/util/makeDirectory.js +2 -2
  76. package/lib/util/makeDirectory.js.map +1 -1
  77. package/lib/util/packageDependencyGraphService.d.ts +3 -3
  78. package/lib/util/packageDependencyGraphService.d.ts.map +1 -1
  79. package/lib/util/packageDependencyGraphService.js +3 -3
  80. package/lib/util/packageDependencyGraphService.js.map +1 -1
  81. package/package.json +8 -9
  82. package/src/__tests__/alphabeticalScripts.spec.ts +27 -28
  83. package/src/__tests__/bannedDependencies.spec.ts +80 -6
  84. package/src/__tests__/consistentDependencies.spec.ts +11 -6
  85. package/src/__tests__/consistentVersions.spec.ts +32 -27
  86. package/src/__tests__/fileContents.spec.ts +32 -40
  87. package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +52 -47
  88. package/src/__tests__/nestedWorkspaces.spec.ts +12 -6
  89. package/src/__tests__/packageEntry.spec.ts +64 -45
  90. package/src/__tests__/packageOrder.spec.ts +46 -40
  91. package/src/__tests__/packageScript.spec.ts +62 -54
  92. package/src/__tests__/requireDependency.spec.ts +11 -6
  93. package/src/__tests__/utils.ts +109 -19
  94. package/src/bannedDependencies.ts +106 -74
  95. package/src/consistentDependencies.ts +1 -2
  96. package/src/consistentVersions.ts +2 -2
  97. package/src/fileContents.ts +32 -30
  98. package/src/mustSatisfyPeerDependencies.ts +6 -2
  99. package/src/packageEntry.ts +13 -5
  100. package/src/packageOrder.ts +1 -2
  101. package/src/packageScript.ts +2 -2
  102. package/src/requireDependency.ts +2 -2
  103. package/src/standardTsconfig.ts +22 -19
  104. package/src/util/checkAlpha.ts +6 -3
  105. package/src/util/packageDependencyGraphService.ts +8 -5
  106. package/tsconfig.tsbuildinfo +1 -6233
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { WorkspaceContext } from "@monorepolint/core";
9
- import { PackageJson, readJson, writeJson } from "@monorepolint/utils";
9
+ import { Host, PackageJson, SimpleHost } from "@monorepolint/utils";
10
10
  import * as path from "path";
11
11
  import * as tmp from "tmp";
12
12
  import {
@@ -65,29 +65,34 @@ describe("mustSatisfyPeerDependencies", () => {
65
65
  });
66
66
 
67
67
  function makeWorkspace(fix = false) {
68
- const workspaceContext = new WorkspaceContext(cwd!, {
69
- rules: [],
70
- fix,
71
- verbose: false,
72
- silent: true,
73
- });
68
+ const host: Host = new SimpleHost();
69
+ const workspaceContext = new WorkspaceContext(
70
+ cwd!,
71
+ {
72
+ rules: [],
73
+ fix,
74
+ verbose: false,
75
+ silent: true,
76
+ },
77
+ host
78
+ );
74
79
  const addErrorSpy = jest.spyOn(workspaceContext, "addError");
75
80
 
76
81
  function check(options: Options) {
77
82
  mustSatisfyPeerDependencies.check(workspaceContext, options);
78
83
  }
79
84
 
80
- return { addErrorSpy, check };
85
+ return { addErrorSpy, check, host };
81
86
  }
82
87
 
83
- function addPackageJson(filePath: string, packageJson: PackageJson) {
88
+ function addPackageJson(host: Host, filePath: string, packageJson: PackageJson) {
84
89
  const dirPath = path.resolve(cwd!, path.dirname(filePath));
85
90
  const resolvedFilePath = path.resolve(cwd!, filePath);
86
91
 
87
92
  makeDirectoryRecursively(dirPath);
88
- writeJson(resolvedFilePath, packageJson);
93
+ host.writeJson(resolvedFilePath, packageJson);
89
94
  return (): PackageJson => {
90
- return readJson(resolvedFilePath);
95
+ return host.readJson(resolvedFilePath);
91
96
  };
92
97
  }
93
98
 
@@ -821,7 +826,7 @@ describe("mustSatisfyPeerDependencies", () => {
821
826
  });
822
827
 
823
828
  it("Flags overloaded dependency (entry in regular dependencies and peer dependencies)", async () => {
824
- const { addErrorSpy, check } = makeWorkspace();
829
+ const { addErrorSpy, check, host } = makeWorkspace();
825
830
 
826
831
  const testPackageJson = {
827
832
  name: "test",
@@ -832,12 +837,12 @@ describe("mustSatisfyPeerDependencies", () => {
832
837
  greatLib: "15",
833
838
  },
834
839
  };
835
- addPackageJson("./package.json", testPackageJson);
840
+ addPackageJson(host, "./package.json", testPackageJson);
836
841
 
837
842
  const greatLibPackageJson = {
838
843
  name: "greatLib",
839
844
  };
840
- addPackageJson("./node_modules/greatLib/package.json", greatLibPackageJson);
845
+ addPackageJson(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
841
846
 
842
847
  check({});
843
848
  expect(addErrorSpy).toHaveBeenCalledTimes(1);
@@ -848,7 +853,7 @@ describe("mustSatisfyPeerDependencies", () => {
848
853
  });
849
854
 
850
855
  it("Flags conflicting peer dependencies", async () => {
851
- const { addErrorSpy, check } = makeWorkspace();
856
+ const { addErrorSpy, check, host } = makeWorkspace();
852
857
 
853
858
  const testPackageJson = {
854
859
  name: "test",
@@ -864,7 +869,7 @@ describe("mustSatisfyPeerDependencies", () => {
864
869
  ccc: "0.0.1",
865
870
  },
866
871
  };
867
- addPackageJson("./package.json", testPackageJson);
872
+ addPackageJson(host, "./package.json", testPackageJson);
868
873
 
869
874
  const aaaPackageJson = {
870
875
  name: "a",
@@ -873,21 +878,21 @@ describe("mustSatisfyPeerDependencies", () => {
873
878
  greatestLib: "100",
874
879
  },
875
880
  };
876
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
881
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
877
882
  const bbbPackageJson = {
878
883
  name: "b",
879
884
  peerDependencies: {
880
885
  greatLib: "16",
881
886
  },
882
887
  };
883
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
888
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
884
889
  const cccPackageJson = {
885
890
  name: "c",
886
891
  peerDependencies: {
887
892
  greatestLib: "200",
888
893
  },
889
894
  };
890
- addPackageJson("./node_modules/ccc/package.json", cccPackageJson);
895
+ addPackageJson(host, "./node_modules/ccc/package.json", cccPackageJson);
891
896
 
892
897
  check({});
893
898
  expect(addErrorSpy).toHaveBeenCalledTimes(1);
@@ -909,7 +914,7 @@ describe("mustSatisfyPeerDependencies", () => {
909
914
  });
910
915
 
911
916
  it("Flags unsatisfied peer dependencies (test package has regular dep)", async () => {
912
- const { addErrorSpy, check } = makeWorkspace();
917
+ const { addErrorSpy, check, host } = makeWorkspace();
913
918
 
914
919
  const testPackageJson = {
915
920
  name: "test",
@@ -922,33 +927,33 @@ describe("mustSatisfyPeerDependencies", () => {
922
927
  ccc: "0.0.1",
923
928
  },
924
929
  };
925
- addPackageJson("./package.json", testPackageJson);
930
+ addPackageJson(host, "./package.json", testPackageJson);
926
931
 
927
932
  const greatLibPackageJson = {
928
933
  name: "greatLib",
929
934
  };
930
- addPackageJson("./node_modules/greatLib/package.json", greatLibPackageJson);
935
+ addPackageJson(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
931
936
  const aaaPackageJson = {
932
937
  name: "a",
933
938
  peerDependencies: {
934
939
  greatLib: "^15.2 || ^16",
935
940
  },
936
941
  };
937
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
942
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
938
943
  const bbbPackageJson = {
939
944
  name: "b",
940
945
  peerDependencies: {
941
946
  greatLib: "^15.2.3 || ^16",
942
947
  },
943
948
  };
944
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
949
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
945
950
  const cccPackageJson = {
946
951
  name: "c",
947
952
  peerDependencies: {
948
953
  greatLib: "^15.8",
949
954
  },
950
955
  };
951
- addPackageJson("./node_modules/ccc/package.json", cccPackageJson);
956
+ addPackageJson(host, "./node_modules/ccc/package.json", cccPackageJson);
952
957
 
953
958
  check({});
954
959
  expect(addErrorSpy).toHaveBeenCalledTimes(1);
@@ -968,7 +973,7 @@ describe("mustSatisfyPeerDependencies", () => {
968
973
  });
969
974
 
970
975
  it("Flags missing peer dependencies (NO regular dependency present)", async () => {
971
- const { addErrorSpy, check } = makeWorkspace(true);
976
+ const { addErrorSpy, check, host } = makeWorkspace(true);
972
977
 
973
978
  const testPackageJson = {
974
979
  name: "test",
@@ -980,7 +985,7 @@ describe("mustSatisfyPeerDependencies", () => {
980
985
  ccc: "0.0.1",
981
986
  },
982
987
  };
983
- const readTestPackageJson = addPackageJson("./package.json", testPackageJson);
988
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
984
989
 
985
990
  const aaaPackageJson = {
986
991
  name: "a",
@@ -988,21 +993,21 @@ describe("mustSatisfyPeerDependencies", () => {
988
993
  greatLib: "15 || ^16.2",
989
994
  },
990
995
  };
991
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
996
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
992
997
  const bbbPackageJson = {
993
998
  name: "b",
994
999
  peerDependencies: {
995
1000
  greatLib: "^16",
996
1001
  },
997
1002
  };
998
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
1003
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
999
1004
  const cccPackageJson = {
1000
1005
  name: "c",
1001
1006
  peerDependencies: {
1002
1007
  greatestLib: "100",
1003
1008
  },
1004
1009
  };
1005
- addPackageJson("./node_modules/ccc/package.json", cccPackageJson);
1010
+ addPackageJson(host, "./node_modules/ccc/package.json", cccPackageJson);
1006
1011
 
1007
1012
  check({});
1008
1013
  expect(addErrorSpy).toHaveBeenCalledTimes(1);
@@ -1025,7 +1030,7 @@ describe("mustSatisfyPeerDependencies", () => {
1025
1030
  });
1026
1031
 
1027
1032
  it("Flags unsatisfied peer dependencies (test package has peer dep)", async () => {
1028
- const { addErrorSpy, check } = makeWorkspace(true);
1033
+ const { addErrorSpy, check, host } = makeWorkspace(true);
1029
1034
 
1030
1035
  const testPackageJson = {
1031
1036
  name: "test",
@@ -1040,7 +1045,7 @@ describe("mustSatisfyPeerDependencies", () => {
1040
1045
  ccc: "0.0.1",
1041
1046
  },
1042
1047
  };
1043
- const readTestPackageJson = addPackageJson("./package.json", testPackageJson);
1048
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
1044
1049
 
1045
1050
  const aaaPackageJson = {
1046
1051
  name: "a",
@@ -1048,21 +1053,21 @@ describe("mustSatisfyPeerDependencies", () => {
1048
1053
  greatLib: "15 || ^16",
1049
1054
  },
1050
1055
  };
1051
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
1056
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
1052
1057
  const bbbPackageJson = {
1053
1058
  name: "b",
1054
1059
  peerDependencies: {
1055
1060
  greatLib: "^16",
1056
1061
  },
1057
1062
  };
1058
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
1063
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
1059
1064
  const cccPackageJson = {
1060
1065
  name: "c",
1061
1066
  peerDependencies: {
1062
1067
  greatLib: "^16.2",
1063
1068
  },
1064
1069
  };
1065
- addPackageJson("./node_modules/ccc/package.json", cccPackageJson);
1070
+ addPackageJson(host, "./node_modules/ccc/package.json", cccPackageJson);
1066
1071
 
1067
1072
  check({});
1068
1073
  expect(addErrorSpy).toHaveBeenCalledTimes(1);
@@ -1083,7 +1088,7 @@ describe("mustSatisfyPeerDependencies", () => {
1083
1088
  });
1084
1089
 
1085
1090
  it("Honors dependencyWhitelist", async () => {
1086
- const { addErrorSpy, check } = makeWorkspace();
1091
+ const { addErrorSpy, check, host } = makeWorkspace();
1087
1092
 
1088
1093
  const testPackageJson = {
1089
1094
  name: "test",
@@ -1097,30 +1102,30 @@ describe("mustSatisfyPeerDependencies", () => {
1097
1102
  greatLib: "15",
1098
1103
  },
1099
1104
  };
1100
- addPackageJson("./package.json", testPackageJson);
1105
+ addPackageJson(host, "./package.json", testPackageJson);
1101
1106
 
1102
1107
  const startHerePackageJson = {
1103
1108
  name: "startHere",
1104
1109
  };
1105
- addPackageJson("./node_modules/startHere/package.json", startHerePackageJson);
1110
+ addPackageJson(host, "./node_modules/startHere/package.json", startHerePackageJson);
1106
1111
  const greatLibPackageJson = {
1107
1112
  name: "greatLib",
1108
1113
  };
1109
- addPackageJson("./node_modules/greatLib/package.json", greatLibPackageJson);
1114
+ addPackageJson(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
1110
1115
  const aaaPackageJson = {
1111
1116
  name: "a",
1112
1117
  peerDependencies: {
1113
1118
  greatLib: "15",
1114
1119
  },
1115
1120
  };
1116
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
1121
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
1117
1122
  const bbbPackageJson = {
1118
1123
  name: "b",
1119
1124
  peerDependencies: {
1120
1125
  greatLib: "16",
1121
1126
  },
1122
1127
  };
1123
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
1128
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
1124
1129
 
1125
1130
  check({ dependencyWhitelist: ["startHere"] });
1126
1131
  expect(addErrorSpy).toHaveBeenCalledTimes(0);
@@ -1129,7 +1134,7 @@ describe("mustSatisfyPeerDependencies", () => {
1129
1134
  });
1130
1135
 
1131
1136
  it("Honors dependencyBlacklist", async () => {
1132
- const { addErrorSpy, check } = makeWorkspace();
1137
+ const { addErrorSpy, check, host } = makeWorkspace();
1133
1138
 
1134
1139
  const testPackageJson = {
1135
1140
  name: "test",
@@ -1143,30 +1148,30 @@ describe("mustSatisfyPeerDependencies", () => {
1143
1148
  greatLib: "15",
1144
1149
  },
1145
1150
  };
1146
- addPackageJson("./package.json", testPackageJson);
1151
+ addPackageJson(host, "./package.json", testPackageJson);
1147
1152
 
1148
1153
  const startHerePackageJson = {
1149
1154
  name: "startHere",
1150
1155
  };
1151
- addPackageJson("./node_modules/startHere/package.json", startHerePackageJson);
1156
+ addPackageJson(host, "./node_modules/startHere/package.json", startHerePackageJson);
1152
1157
  const greatLibPackageJson = {
1153
1158
  name: "greatLib",
1154
1159
  };
1155
- addPackageJson("./node_modules/greatLib/package.json", greatLibPackageJson);
1160
+ addPackageJson(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
1156
1161
  const aaaPackageJson = {
1157
1162
  name: "a",
1158
1163
  peerDependencies: {
1159
1164
  greatLib: "15",
1160
1165
  },
1161
1166
  };
1162
- addPackageJson("./node_modules/aaa/package.json", aaaPackageJson);
1167
+ addPackageJson(host, "./node_modules/aaa/package.json", aaaPackageJson);
1163
1168
  const bbbPackageJson = {
1164
1169
  name: "b",
1165
1170
  peerDependencies: {
1166
1171
  greatLib: "16",
1167
1172
  },
1168
1173
  };
1169
- addPackageJson("./node_modules/bbb/package.json", bbbPackageJson);
1174
+ addPackageJson(host, "./node_modules/bbb/package.json", bbbPackageJson);
1170
1175
 
1171
1176
  check({ dependencyBlacklist: ["greatLib"] });
1172
1177
  expect(addErrorSpy).toHaveBeenCalledTimes(0);
@@ -5,6 +5,7 @@
5
5
  *
6
6
  */
7
7
  import { WorkspaceContext } from "@monorepolint/core";
8
+ import { SimpleHost } from "@monorepolint/utils";
8
9
  import { writeFileSync } from "fs";
9
10
  import * as path from "path";
10
11
  import * as tmp from "tmp";
@@ -55,12 +56,17 @@ describe("nestedWorkspaces", () => {
55
56
  });
56
57
 
57
58
  function makeWorkspace() {
58
- const workspaceContext = new WorkspaceContext(cwd!, {
59
- rules: [],
60
- fix: false,
61
- verbose: false,
62
- silent: true,
63
- });
59
+ const host = new SimpleHost();
60
+ const workspaceContext = new WorkspaceContext(
61
+ cwd!,
62
+ {
63
+ rules: [],
64
+ fix: false,
65
+ verbose: false,
66
+ silent: true,
67
+ },
68
+ host
69
+ );
64
70
 
65
71
  async function checkAndSpy() {
66
72
  const addErrorSpy = jest.spyOn(workspaceContext, "addError");
@@ -6,13 +6,10 @@
6
6
  */
7
7
 
8
8
  // tslint:disable:no-console
9
- import { createMockFiles } from "./utils";
10
9
 
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 { packageEntry } from "../packageEntry";
10
+ import { Context, Failure } from "@monorepolint/core";
11
+ import { createExpectedEntryErrorMessage, createStandardizedEntryErrorMessage, packageEntry } from "../packageEntry";
12
+ import { AddErrorSpy, createTestingWorkspace, HOST_FACTORIES, TestingWorkspace } from "./utils";
16
13
 
17
14
  const PACKAGE_MISSING_ENTRY =
18
15
  JSON.stringify(
@@ -55,26 +52,28 @@ const PACKAGE_REPOSITORY =
55
52
  2
56
53
  ) + "\n";
57
54
 
58
- describe("expectPackageEntries", () => {
59
- afterEach(() => {
60
- mockFiles.clear();
61
- });
62
-
55
+ describe.each(HOST_FACTORIES)("expectPackageEntries ($name)", (hostFactory) => {
63
56
  describe("fix: true", () => {
64
- const context = new PackageContext(".", {
65
- rules: [],
66
- fix: true,
67
- verbose: false,
68
- silent: true,
57
+ let workspace: TestingWorkspace;
58
+ let spy: AddErrorSpy;
59
+ let context: Context;
60
+
61
+ beforeEach(async () => {
62
+ workspace = await createTestingWorkspace({
63
+ fixFlag: true,
64
+ host: hostFactory.make(),
65
+ });
66
+ context = workspace.context; // minimizing delta
67
+
68
+ spy = jest.spyOn(workspace.context, "addError");
69
69
  });
70
- const spy = jest.spyOn(context, "addError");
71
70
 
72
71
  afterEach(() => {
73
72
  spy.mockClear();
74
73
  });
75
74
 
76
75
  it("fixes missing entries", () => {
77
- mockFiles.set("package.json", PACKAGE_MISSING_ENTRY);
76
+ workspace.writeFile("package.json", PACKAGE_MISSING_ENTRY);
78
77
 
79
78
  packageEntry.check(context, {
80
79
  entries: {
@@ -86,15 +85,19 @@ describe("expectPackageEntries", () => {
86
85
  expect(spy).toHaveBeenCalledTimes(1);
87
86
 
88
87
  const failure: Failure = spy.mock.calls[0][0];
89
- expect(failure.file).toBe("package.json");
90
- expect(failure.fixer).not.toBeUndefined();
91
- expect(failure.message).toBe("Expected standardized entry for 'license'");
92
-
93
- expect(mockFiles.get("package.json")).toEqual(PACKAGE_LICENSE);
88
+ expect(failure).toMatchObject(
89
+ workspace.failureMatcher({
90
+ file: "package.json",
91
+ hasFixer: true,
92
+ message: createStandardizedEntryErrorMessage("license"),
93
+ })
94
+ );
95
+
96
+ expect(workspace.readFile("package.json")).toEqual(PACKAGE_LICENSE);
94
97
  });
95
98
 
96
99
  it("fixes missing nested entries", () => {
97
- mockFiles.set("package.json", PACKAGE_MISSING_ENTRY);
100
+ workspace.writeFile("package.json", PACKAGE_MISSING_ENTRY);
98
101
 
99
102
  packageEntry.check(context, {
100
103
  entries: {
@@ -109,15 +112,19 @@ describe("expectPackageEntries", () => {
109
112
  expect(spy).toHaveBeenCalledTimes(1);
110
113
 
111
114
  const failure: Failure = spy.mock.calls[0][0];
112
- expect(failure.file).toBe("package.json");
113
- expect(failure.fixer).not.toBeUndefined();
114
- expect(failure.message).toBe("Expected standardized entry for 'repository'");
115
-
116
- expect(mockFiles.get("package.json")).toEqual(PACKAGE_REPOSITORY);
115
+ expect(failure).toMatchObject(
116
+ workspace.failureMatcher({
117
+ file: "package.json",
118
+ hasFixer: true,
119
+ message: createStandardizedEntryErrorMessage("repository"),
120
+ })
121
+ );
122
+
123
+ expect(workspace.readFile("package.json")).toEqual(PACKAGE_REPOSITORY);
117
124
  });
118
125
 
119
126
  it("doesn't error for nested entries that are defined", () => {
120
- mockFiles.set("package.json", PACKAGE_REPOSITORY);
127
+ workspace.writeFile("package.json", PACKAGE_REPOSITORY);
121
128
 
122
129
  packageEntry.check(context, {
123
130
  entries: {
@@ -130,11 +137,11 @@ describe("expectPackageEntries", () => {
130
137
  });
131
138
 
132
139
  expect(spy).toHaveBeenCalledTimes(0);
133
- expect(mockFiles.get("package.json")).toEqual(PACKAGE_REPOSITORY);
140
+ expect(workspace.readFile("package.json")).toEqual(PACKAGE_REPOSITORY);
134
141
  });
135
142
 
136
143
  it("errors for keys that are missing", () => {
137
- mockFiles.set("package.json", PACKAGE_REPOSITORY);
144
+ workspace.writeFile("package.json", PACKAGE_REPOSITORY);
138
145
 
139
146
  packageEntry.check(context, {
140
147
  entries: undefined,
@@ -144,14 +151,18 @@ describe("expectPackageEntries", () => {
144
151
  expect(spy).toHaveBeenCalledTimes(1);
145
152
 
146
153
  const failure: Failure = spy.mock.calls[0][0];
147
- expect(failure.file).toBe("package.json");
148
- expect(failure.fixer).toBeUndefined();
149
- expect(failure.message).toBe("Expected entry for 'bugs' to exist");
150
- expect(mockFiles.get("package.json")).toEqual(PACKAGE_REPOSITORY);
154
+ expect(failure).toMatchObject(
155
+ workspace.failureMatcher({
156
+ file: "package.json",
157
+ hasFixer: false,
158
+ message: createExpectedEntryErrorMessage("bugs"),
159
+ })
160
+ );
161
+ expect(workspace.readFile("package.json")).toEqual(PACKAGE_REPOSITORY);
151
162
  });
152
163
 
153
164
  it("handles both entries and entriesExist", () => {
154
- mockFiles.set("package.json", PACKAGE_MISSING_ENTRY);
165
+ workspace.writeFile("package.json", PACKAGE_MISSING_ENTRY);
155
166
 
156
167
  packageEntry.check(context, {
157
168
  entries: {
@@ -166,16 +177,24 @@ describe("expectPackageEntries", () => {
166
177
  expect(spy).toHaveBeenCalledTimes(2);
167
178
 
168
179
  const failure: Failure = spy.mock.calls[0][0];
169
- expect(failure.file).toBe("package.json");
170
- expect(failure.fixer).not.toBeUndefined();
171
- expect(failure.message).toBe("Expected standardized entry for 'repository'");
180
+ expect(failure).toMatchObject(
181
+ workspace.failureMatcher({
182
+ file: "package.json",
183
+ hasFixer: true,
184
+ message: createStandardizedEntryErrorMessage("repository"),
185
+ })
186
+ );
172
187
 
173
188
  const failure2: Failure = spy.mock.calls[1][0];
174
- expect(failure2.file).toBe("package.json");
175
- expect(failure2.fixer).toBeUndefined();
176
- expect(failure2.message).toBe("Expected entry for 'bugs' to exist");
177
-
178
- expect(mockFiles.get("package.json")).toEqual(PACKAGE_REPOSITORY);
189
+ expect(failure2).toMatchObject(
190
+ workspace.failureMatcher({
191
+ file: "package.json",
192
+ hasFixer: false,
193
+ message: createExpectedEntryErrorMessage("bugs"),
194
+ })
195
+ );
196
+
197
+ expect(workspace.readFile("package.json")).toEqual(PACKAGE_REPOSITORY);
179
198
  });
180
199
  });
181
200
  });