const ruleTester = require("../../ruletester"); import * as rule from "./toolbar-rename-chip-props"; import { ValidTests, InvalidTests, createInvalidTest, createValidTest, } from "../../helpers/testHelpers"; const renames: { [key: string]: { [key: string]: string } } = { Toolbar: { customChipGroupContent: "customLabelGroupContent", }, ToolbarExpandableContent: { chipContainerRef: "labelContainerRef", }, ToolbarFilter: { chips: "labels", deleteChipGroup: "deleteLabelGroup", deleteChip: "deleteLabel", chipGroupExpandedText: "labelGroupExpandedText", chipGroupCollapsedText: "labelGroupCollapsedText", expandableChipContainerRef: "expandableLabelContainerRef", }, ToolbarChipGroupContent: { chipGroupContentRef: "labelGroupContentRef", customChipGroupContent: "customLabelGroupContent", }, // We can't assume that the rename rule will run after this one, so just add the renamed // component to this list ToolbarLabelGroupContent: { chipGroupContentRef: "labelGroupContentRef", customChipGroupContent: "customLabelGroupContent", }, ToolbarToggleGroup: { chipContainerRef: "labelContainerRef", }, }; const validTests: ValidTests = []; const invalidTests: InvalidTests = []; for (const component in renames) { for (const oldProp in renames[component]) { const newProp = renames[component][oldProp]; validTests.push(createValidTest(`<${component} ${oldProp} />`)); validTests.push( createValidTest( `import { ${component} } from '@patternfly/react-core'; <${component} ${newProp} />` ) ); const createMessage = (name: string = component) => `${oldProp} prop for ${name} has been renamed to ${newProp}`; invalidTests.push( createInvalidTest( `import { ${component} } from '@patternfly/react-core'; <${component} ${oldProp} />`, `import { ${component} } from '@patternfly/react-core'; <${component} ${newProp} />`, [ { message: createMessage(), type: "JSXOpeningElement", }, ] ) ); invalidTests.push( createInvalidTest( `import { ${component} } from '@patternfly/react-core'; <${component} ${oldProp}="test" />`, `import { ${component} } from '@patternfly/react-core'; <${component} ${newProp}="test" />`, [ { message: createMessage(), type: "JSXOpeningElement", }, ] ) ); invalidTests.push( createInvalidTest( `import { ${component} as CustomThing } from '@patternfly/react-core'; `, `import { ${component} as CustomThing } from '@patternfly/react-core'; `, [ { message: createMessage("CustomThing"), type: "JSXOpeningElement", }, ] ) ); invalidTests.push( createInvalidTest( `import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} ${oldProp} />`, `import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} ${newProp} />`, [ { message: createMessage(), type: "JSXOpeningElement", }, ] ) ); invalidTests.push( createInvalidTest( `import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} ${oldProp} />`, `import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} ${newProp} />`, [ { message: createMessage(), type: "JSXOpeningElement", }, ] ) ); invalidTests.push( createInvalidTest( `import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} ${oldProp} />`, `import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} ${newProp} />`, [ { message: createMessage(), type: "JSXOpeningElement", }, ] ) ); } } ruleTester.run("toolbar-rename-chip-props", rule, { valid: validTests, invalid: invalidTests, });