Skip to content

Commit 8c6b692

Browse files
feat(Helpers): added test helper for callback param adding
1 parent 6cdb4fe commit 8c6b692

File tree

3 files changed

+119
-158
lines changed

3 files changed

+119
-158
lines changed
Lines changed: 2 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,3 @@
1-
const ruleTester = require("../../ruletester");
2-
const rule = require("../../../lib/rules/v5/dataList-updated-callback");
1+
const { addCallbackParamTester } = require("../../testHelpers");
32

4-
ruleTester.run("dataList-updated-callback", rule, {
5-
valid: [
6-
{
7-
code: `import { DataList } from '@patternfly/react-core'; <DataList />;`,
8-
},
9-
{
10-
code: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={() => onSelect()} />;`,
11-
},
12-
{
13-
code: `import { DataList } from '@patternfly/react-core'; const onSelect = () => {}; <DataList onSelectDataListItem={onSelect} />;`,
14-
},
15-
{
16-
code: `import { DataList } from '@patternfly/react-core'; function onSelect() {}; <DataList onSelectDataListItem={onSelect} />;`,
17-
},
18-
{
19-
// No @patternfly/react-core import
20-
code: `<DataList onSelectDataListItem />;`,
21-
},
22-
],
23-
invalid: [
24-
{
25-
code: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={(id) => onSelect(id)} />;`,
26-
output: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={(_event, id) => onSelect(id)} />;`,
27-
errors: [
28-
{
29-
message: `The "onSelectDataListItem" prop for DataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
30-
type: "JSXOpeningElement",
31-
},
32-
],
33-
},
34-
{
35-
code: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={id => onSelect(id)} />;`,
36-
output: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={(_event, id) => onSelect(id)} />;`,
37-
errors: [
38-
{
39-
message: `The "onSelectDataListItem" prop for DataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
40-
type: "JSXOpeningElement",
41-
},
42-
],
43-
},
44-
{
45-
code: `import { DataList } from '@patternfly/react-core'; const onSelect = (id) => {}; <DataList onSelectDataListItem={onSelect} />;`,
46-
output: `import { DataList } from '@patternfly/react-core'; const onSelect = (_event, id) => {}; <DataList onSelectDataListItem={onSelect} />;`,
47-
errors: [
48-
{
49-
message: `The "onSelectDataListItem" prop for DataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
50-
type: "JSXOpeningElement",
51-
},
52-
],
53-
},
54-
{
55-
code: `import { DataList } from '@patternfly/react-core'; function onSelect(id) {}; <DataList onSelectDataListItem={onSelect} />;`,
56-
output: `import { DataList } from '@patternfly/react-core'; function onSelect(_event, id) {}; <DataList onSelectDataListItem={onSelect} />;`,
57-
errors: [
58-
{
59-
message: `The "onSelectDataListItem" prop for DataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
60-
type: "JSXOpeningElement",
61-
},
62-
],
63-
},
64-
{
65-
code: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={this.onSelect} />;`,
66-
output: `import { DataList } from '@patternfly/react-core'; <DataList onSelectDataListItem={this.onSelect} />;`,
67-
errors: [
68-
{
69-
message: `The "onSelectDataListItem" prop for DataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
70-
type: "JSXOpeningElement",
71-
},
72-
],
73-
},
74-
{
75-
code: `import { DataList as PFDataList } from '@patternfly/react-core'; <PFDataList onSelectDataListItem={(id) => onSelect(id)} />;`,
76-
output: `import { DataList as PFDataList } from '@patternfly/react-core'; <PFDataList onSelectDataListItem={(_event, id) => onSelect(id)} />;`,
77-
errors: [
78-
{
79-
message: `The "onSelectDataListItem" prop for PFDataList has been updated to include the "_event" parameter as its first parameter. "onSelectDataListItem" handlers may require an update.`,
80-
type: "JSXOpeningElement",
81-
},
82-
],
83-
},
84-
],
85-
});
3+
addCallbackParamTester("dataList-updated-callback", "DataList", "onSelectDataListItem");
Lines changed: 2 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
const ruleTester = require("../../ruletester");
2-
const rule = require("../../../lib/rules/v5/onToggle-updated-paramaters");
1+
const { addCallbackParamTester } = require("../../testHelpers");
32
const onToggleAPIUpdateList = [
43
"ApplicationLauncher",
54
"BadgeToggle",
@@ -10,75 +9,4 @@ const onToggleAPIUpdateList = [
109
"SelectToggle",
1110
];
1211

13-
ruleTester.run("onToggle-updated-paramaters", rule, {
14-
valid: [
15-
...onToggleAPIUpdateList.map((component) => ({
16-
code: `import { ${component} } from '@patternfly/react-core'; <${component} />;`,
17-
})),
18-
...onToggleAPIUpdateList.map((component) => ({
19-
code: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={() => onToggle} />;`,
20-
})),
21-
...onToggleAPIUpdateList.map((component) => ({
22-
code: `import { ${component} } from '@patternfly/react-core'; const onToggle = () => {}; <${component} onToggle={onToggle} />;`,
23-
})),
24-
...onToggleAPIUpdateList.map((component) => ({
25-
code: `import { ${component} } from '@patternfly/react-core'; function onToggle() {}; <${component} onToggle={onToggle} />;`,
26-
})),
27-
// No @patternfly/react-core import
28-
...onToggleAPIUpdateList.map((component) => ({
29-
code: `<${component} onToggle />;`,
30-
})),
31-
],
32-
invalid: [
33-
...onToggleAPIUpdateList.map((component) => ({
34-
code: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={(isOpen) => onToggle(isOpen)} />;`,
35-
output: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={(_event, isOpen) => onToggle(isOpen)} />;`,
36-
errors: [
37-
{
38-
message: `The "onToggle" prop for ${component} has been updated to include the "_event" parameter as its first parameter. "onToggle" handlers may require an update.`,
39-
type: "JSXOpeningElement",
40-
},
41-
],
42-
})),
43-
...onToggleAPIUpdateList.map((component) => ({
44-
code: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={isOpen => onToggle(isOpen)} />;`,
45-
output: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={(_event, isOpen) => onToggle(isOpen)} />;`,
46-
errors: [
47-
{
48-
message: `The "onToggle" prop for ${component} has been updated to include the "_event" parameter as its first parameter. "onToggle" handlers may require an update.`,
49-
type: "JSXOpeningElement",
50-
},
51-
],
52-
})),
53-
...onToggleAPIUpdateList.map((component) => ({
54-
code: `import { ${component} } from '@patternfly/react-core'; const onToggle = (isOpen) => {}; <${component} onToggle={onToggle} />;`,
55-
output: `import { ${component} } from '@patternfly/react-core'; const onToggle = (_event, isOpen) => {}; <${component} onToggle={onToggle} />;`,
56-
errors: [
57-
{
58-
message: `The "onToggle" prop for ${component} has been updated to include the "_event" parameter as its first parameter. "onToggle" handlers may require an update.`,
59-
type: "JSXOpeningElement",
60-
},
61-
],
62-
})),
63-
...onToggleAPIUpdateList.map((component) => ({
64-
code: `import { ${component} } from '@patternfly/react-core'; function onToggle(isOpen) {}; <${component} onToggle={onToggle} />;`,
65-
output: `import { ${component} } from '@patternfly/react-core'; function onToggle(_event, isOpen) {}; <${component} onToggle={onToggle} />;`,
66-
errors: [
67-
{
68-
message: `The "onToggle" prop for ${component} has been updated to include the "_event" parameter as its first parameter. "onToggle" handlers may require an update.`,
69-
type: "JSXOpeningElement",
70-
},
71-
],
72-
})),
73-
...onToggleAPIUpdateList.map((component) => ({
74-
code: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={this.onToggle} />;`,
75-
output: `import { ${component} } from '@patternfly/react-core'; <${component} onToggle={this.onToggle} />;`,
76-
errors: [
77-
{
78-
message: `The "onToggle" prop for ${component} has been updated to include the "_event" parameter as its first parameter. "onToggle" handlers may require an update.`,
79-
type: "JSXOpeningElement",
80-
},
81-
],
82-
})),
83-
],
84-
});
12+
addCallbackParamTester("onToggle-updated-paramaters", onToggleAPIUpdateList, 'onToggle');
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
const ruleTester = require("./ruletester");
2+
3+
function getAddCallbackParamMessage(componentName, propName, newParamName) {
4+
return `The "${propName}" prop for ${componentName} has been updated to include the "${newParamName}" parameter as its first parameter. "${propName}" handlers may require an update.`
5+
}
6+
7+
function getValidAddCallbackParamTests(componentNameArray, propNameArray) {
8+
let tests = [];
9+
10+
componentNameArray.forEach((componentName) => {
11+
tests.push({
12+
code: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} />;`,
13+
});
14+
propNameArray.forEach((propName) => {
15+
tests.push({
16+
code: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={() => handler()} />;`,
17+
});
18+
tests.push({
19+
code: `import { ${componentName} } from '@patternfly/react-core'; const handler = () => {}; <${componentName} ${propName}={handler} />;`,
20+
});
21+
tests.push({
22+
code: `import { ${componentName} } from '@patternfly/react-core'; function handler() {}; <${componentName} ${propName}={handler} />;`,
23+
});
24+
tests.push({ code: `<${componentName} ${propName} />;` });
25+
});
26+
});
27+
return tests;
28+
}
29+
30+
function getInvalidAddCallbackParamTests(componentNameArray, propNameArray, newParamName, getCustomMessage) {
31+
let tests = [];
32+
33+
componentNameArray.forEach((componentName) => {
34+
propNameArray.forEach((propName) => {
35+
tests.push({
36+
code: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={(id) => handler(id)} />;`,
37+
output: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={(${newParamName}, id) => handler(id)} />;`,
38+
errors: [
39+
{
40+
message: getAddCallbackParamMessage(componentName, propName, newParamName),
41+
type: "JSXOpeningElement",
42+
},
43+
],
44+
});
45+
tests.push({
46+
code: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={id => handler(id)} />;`,
47+
output: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={(${newParamName}, id) => handler(id)} />;`,
48+
errors: [
49+
{
50+
message: getAddCallbackParamMessage(componentName, propName, newParamName),
51+
type: "JSXOpeningElement",
52+
},
53+
],
54+
});
55+
tests.push({
56+
code: `import { ${componentName} } from '@patternfly/react-core'; const handler = (id) => {}; <${componentName} ${propName}={handler} />;`,
57+
output: `import { ${componentName} } from '@patternfly/react-core'; const handler = (${newParamName}, id) => {}; <${componentName} ${propName}={handler} />;`,
58+
errors: [
59+
{
60+
message: getAddCallbackParamMessage(componentName, propName, newParamName),
61+
type: "JSXOpeningElement",
62+
},
63+
],
64+
});
65+
tests.push({
66+
code: `import { ${componentName} } from '@patternfly/react-core'; function handler(id) {}; <${componentName} ${propName}={handler} />;`,
67+
output: `import { ${componentName} } from '@patternfly/react-core'; function handler(${newParamName}, id) {}; <${componentName} ${propName}={handler} />;`,
68+
errors: [
69+
{
70+
message: getAddCallbackParamMessage(componentName, propName, newParamName),
71+
type: "JSXOpeningElement",
72+
},
73+
],
74+
});
75+
tests.push({
76+
code: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={this.handler} />;`,
77+
output: `import { ${componentName} } from '@patternfly/react-core'; <${componentName} ${propName}={this.handler} />;`,
78+
errors: [
79+
{
80+
message: getAddCallbackParamMessage(componentName, propName, newParamName),
81+
type: "JSXOpeningElement",
82+
},
83+
],
84+
});
85+
tests.push({
86+
code: `import { ${componentName} as PF${componentName} } from '@patternfly/react-core'; <PF${componentName} ${propName}={(id) => handler(id)} />;`,
87+
output: `import { ${componentName} as PF${componentName} } from '@patternfly/react-core'; <PF${componentName} ${propName}={(${newParamName}, id) => handler(id)} />;`,
88+
errors: [
89+
{
90+
message: getAddCallbackParamMessage(`PF${componentName}`, propName, newParamName),
91+
type: "JSXOpeningElement",
92+
},
93+
],
94+
});
95+
});
96+
});
97+
return tests;
98+
}
99+
100+
function addCallbackParamTester(ruleName, componentNames, propNames, newParamName = '_event') {
101+
const rule = require(`../lib/rules/v5/${ruleName}`);
102+
const componentNameArray =
103+
typeof componentNames === "string" ? [componentNames] : componentNames;
104+
const propNameArray =
105+
typeof propNames === "string" ? [propNames] : propNames;
106+
107+
ruleTester.run(ruleName, rule, {
108+
valid: getValidAddCallbackParamTests(componentNameArray, propNameArray),
109+
invalid: getInvalidAddCallbackParamTests(componentNameArray, propNameArray, newParamName),
110+
});
111+
}
112+
113+
module.exports = {
114+
addCallbackParamTester
115+
};

0 commit comments

Comments
 (0)