Skip to content

Commit 17963b5

Browse files
author
david.wuerfel
committed
refactor (test): Extract parametrized converter and merger creation into method
1 parent 2426714 commit 17963b5

File tree

1 file changed

+72
-40
lines changed

1 file changed

+72
-40
lines changed

src/rules/convertRules.test.ts

Lines changed: 72 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,9 @@
11
import { ConversionError } from "../errors/conversionError";
22
import { convertRules } from "./convertRules";
33
import { TSLintRuleOptions, TSLintRuleSeverity } from "./types";
4-
import { RuleConverter } from "./converter";
4+
import { RuleConverter, ConversionResult } from "./converter";
55
import { RuleMerger } from "./merger";
66

7-
function setupConversionEnvironment(
8-
config: { ruleSeverity: TSLintRuleSeverity } = { ruleSeverity: "error" },
9-
) {
10-
const tslintRule = createSampleTsLintRule(config.ruleSeverity);
11-
const converters = new Map<string, RuleConverter>();
12-
const mergers = new Map<string, RuleMerger>();
13-
14-
return { tslintRule, converters, mergers };
15-
}
16-
17-
function createSampleTsLintRule(ruleSeverity: TSLintRuleSeverity = "error"): TSLintRuleOptions {
18-
return {
19-
ruleArguments: [],
20-
ruleName: "tslint-rule-a",
21-
ruleSeverity,
22-
};
23-
}
24-
257
describe("convertRules", () => {
268
it("doesn't marks a disabled rule as missing when its converter returns undefined", () => {
279
// Arrange
@@ -71,15 +53,16 @@ describe("convertRules", () => {
7153

7254
it("marks a converted rule name as converted when a conversion has rules", () => {
7355
// Arrange
74-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
7556
const conversionResult = {
7657
rules: [
7758
{
7859
ruleName: "eslint-rule-a",
7960
},
8061
],
8162
};
82-
converters.set(tslintRule.ruleName, () => conversionResult);
63+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
64+
conversionResult,
65+
});
8366

8467
// Act
8568
const { converted } = convertRules(
@@ -103,7 +86,6 @@ describe("convertRules", () => {
10386

10487
it("reports a failure when two outputs exist for a converted rule without a merger", () => {
10588
// Arrange
106-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
10789
const conversionResult = {
10890
rules: [
10991
{
@@ -114,7 +96,9 @@ describe("convertRules", () => {
11496
},
11597
],
11698
};
117-
converters.set(tslintRule.ruleName, () => conversionResult);
99+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
100+
conversionResult,
101+
});
118102

119103
// Act
120104
const { failed } = convertRules(
@@ -128,7 +112,6 @@ describe("convertRules", () => {
128112

129113
it("merges rule arguments two outputs exist for a converted rule with a merger", () => {
130114
// Arrange
131-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
132115
const conversionResult = {
133116
rules: [
134117
{
@@ -139,9 +122,10 @@ describe("convertRules", () => {
139122
},
140123
],
141124
};
142-
converters.set(tslintRule.ruleName, () => conversionResult);
143-
const mergedArguments = [{ merged: true }];
144-
mergers.set(conversionResult.rules[0].ruleName, () => mergedArguments);
125+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
126+
conversionResult,
127+
ruleToMerge: conversionResult.rules[0].ruleName,
128+
});
145129

146130
// Act
147131
const { converted } = convertRules(
@@ -155,7 +139,7 @@ describe("convertRules", () => {
155139
[
156140
"eslint-rule-a",
157141
{
158-
ruleArguments: mergedArguments,
142+
ruleArguments: [{ merged: true }],
159143
ruleName: "eslint-rule-a",
160144
ruleSeverity: "error",
161145
notices: [],
@@ -167,7 +151,6 @@ describe("convertRules", () => {
167151

168152
it("merges and deduplicates rule notices", () => {
169153
// Arrange
170-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
171154
const conversionResult = {
172155
rules: [
173156
{
@@ -180,9 +163,10 @@ describe("convertRules", () => {
180163
},
181164
],
182165
};
183-
converters.set(tslintRule.ruleName, () => conversionResult);
184-
const mergedArguments = [{ merged: true }];
185-
mergers.set(conversionResult.rules[0].ruleName, () => mergedArguments);
166+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
167+
conversionResult,
168+
ruleToMerge: conversionResult.rules[0].ruleName,
169+
});
186170

187171
// Act
188172
const { converted } = convertRules(
@@ -196,7 +180,7 @@ describe("convertRules", () => {
196180
[
197181
"eslint-rule-a",
198182
{
199-
ruleArguments: mergedArguments,
183+
ruleArguments: [{ merged: true }],
200184
ruleName: "eslint-rule-a",
201185
ruleSeverity: "error",
202186
notices: ["notice-1", "notice-2"],
@@ -208,7 +192,6 @@ describe("convertRules", () => {
208192

209193
it("merges undefined notices", () => {
210194
// Arrange
211-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
212195
const conversionResult = {
213196
rules: [
214197
{
@@ -221,9 +204,10 @@ describe("convertRules", () => {
221204
},
222205
],
223206
};
224-
converters.set(tslintRule.ruleName, () => conversionResult);
225-
const mergedArguments = [{ merged: true }];
226-
mergers.set(conversionResult.rules[0].ruleName, () => mergedArguments);
207+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
208+
conversionResult,
209+
ruleToMerge: conversionResult.rules[0].ruleName,
210+
});
227211

228212
// Act
229213
const { converted } = convertRules(
@@ -237,7 +221,7 @@ describe("convertRules", () => {
237221
[
238222
"eslint-rule-a",
239223
{
240-
ruleArguments: mergedArguments,
224+
ruleArguments: [{ merged: true }],
241225
ruleName: "eslint-rule-a",
242226
ruleSeverity: "error",
243227
notices: [],
@@ -249,12 +233,13 @@ describe("convertRules", () => {
249233

250234
it("marks a new plugin when a conversion has a new plugin", () => {
251235
// Arrange
252-
const { tslintRule, converters, mergers } = setupConversionEnvironment();
253236
const conversionResult = {
254237
plugins: ["extra-plugin"],
255238
rules: [],
256239
};
257-
converters.set(tslintRule.ruleName, () => conversionResult);
240+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
241+
conversionResult,
242+
});
258243

259244
// Act
260245
const { plugins } = convertRules(
@@ -266,3 +251,50 @@ describe("convertRules", () => {
266251
expect(plugins).toEqual(new Set(["extra-plugin"]));
267252
});
268253
});
254+
255+
function setupConversionEnvironment(
256+
config: {
257+
ruleSeverity?: TSLintRuleSeverity;
258+
conversionResult?: ConversionResult;
259+
ruleToMerge?: string;
260+
} = {},
261+
) {
262+
const { ruleSeverity, conversionResult, ruleToMerge } = config;
263+
264+
const tslintRule = createSampleTsLintRule(ruleSeverity);
265+
const converters = createConverters(tslintRule, conversionResult);
266+
const mergers = createMergers(ruleToMerge);
267+
268+
return { tslintRule, converters, mergers };
269+
}
270+
271+
function createSampleTsLintRule(ruleSeverity: TSLintRuleSeverity = "error"): TSLintRuleOptions {
272+
return {
273+
ruleArguments: [],
274+
ruleName: "tslint-rule-a",
275+
ruleSeverity,
276+
};
277+
}
278+
279+
function createConverters(
280+
tslintRule: TSLintRuleOptions,
281+
conversionResult?: ConversionResult,
282+
): Map<string, RuleConverter> {
283+
const converters = new Map<string, RuleConverter>();
284+
285+
if (conversionResult !== undefined) {
286+
converters.set(tslintRule.ruleName, () => conversionResult);
287+
}
288+
289+
return converters;
290+
}
291+
292+
function createMergers(ruleToMerge?: string): Map<string, RuleMerger> {
293+
const mergers = new Map<string, RuleMerger>();
294+
295+
if (ruleToMerge !== undefined) {
296+
mergers.set(ruleToMerge, () => [{ merged: true }]);
297+
}
298+
299+
return mergers;
300+
}

0 commit comments

Comments
 (0)