diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.test.ts b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.test.ts index 4c09f68b9..121eaf076 100644 --- a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.test.ts +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.test.ts @@ -6,88 +6,99 @@ const renameMap = { title: "titleText", }; -const errors = Object.entries(renameMap).map(([oldName, newName]) => ({ - message: `The ${oldName} prop for NotAuthorized has been renamed to ${newName}.`, - type: "JSXOpeningElement", -})); +const getErrors = (component: string) => + Object.entries(renameMap).map(([oldName, newName]) => ({ + message: `The ${oldName} prop for ${component} has been renamed to ${newName}.`, + type: "JSXOpeningElement", + })); -ruleTester.run("component-groups-notAuthorized-rename-props", rule, { - valid: [ +const components = ["NotAuthorized", "UnauthorizedAccess"]; + +const valid = components + .map((component) => [ { - code: ``, + code: `<${component} description="" />`, }, { - code: ``, + code: `<${component} title="" />`, }, { - code: `import { NotAuthorized } from '@patternfly/react-component-groups'; `, + code: `import { ${component} } from '@patternfly/react-component-groups'; <${component} someOtherProp />`, }, - ], - invalid: [ + ]) + .flat(); + +const invalid = components + .map((component) => [ { - code: `import { NotAuthorized } from '@patternfly/react-component-groups'; - `, - output: `import { NotAuthorized } from '@patternfly/react-component-groups'; - `, - errors, + code: `import { ${component} } from '@patternfly/react-component-groups'; + <${component} + description="Description text" + title="Title text" + />`, + output: `import { ${component} } from '@patternfly/react-component-groups'; + <${component} + bodyText="Description text" + titleText="Title text" + />`, + errors: getErrors(component), }, { - code: `import NotAuthorized from '@patternfly/react-component-groups/dist/cjs/NotAuthorized/index'; - `, - output: `import NotAuthorized from '@patternfly/react-component-groups/dist/cjs/NotAuthorized/index'; - `, - errors, + code: `import ${component} from '@patternfly/react-component-groups/dist/cjs/${component}/index'; + <${component} + description="Description text" + title="Title text" + />`, + output: `import ${component} from '@patternfly/react-component-groups/dist/cjs/${component}/index'; + <${component} + bodyText="Description text" + titleText="Title text" + />`, + errors: getErrors(component), }, { - code: `import NotAuthorized from '@patternfly/react-component-groups/dist/esm/NotAuthorized/index'; - `, - output: `import NotAuthorized from '@patternfly/react-component-groups/dist/esm/NotAuthorized/index'; - `, - errors, + code: `import ${component} from '@patternfly/react-component-groups/dist/esm/${component}/index'; + <${component} + description="Description text" + title="Title text" + />`, + output: `import ${component} from '@patternfly/react-component-groups/dist/esm/${component}/index'; + <${component} + bodyText="Description text" + titleText="Title text" + />`, + errors: getErrors(component), }, { - code: `import NotAuthorized from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; - `, - output: `import NotAuthorized from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; - `, - errors, + code: `import ${component} from '@patternfly/react-component-groups/dist/dynamic/${component}'; + <${component} + description="Description text" + title="Title text" + />`, + output: `import ${component} from '@patternfly/react-component-groups/dist/dynamic/${component}'; + <${component} + bodyText="Description text" + titleText="Title text" + />`, + errors: getErrors(component), }, { - code: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; - `, - output: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; - `, - errors, + code: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/${component}'; + `, + output: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/${component}'; + `, + errors: getErrors(component), }, - ], + ]) + .flat(); + +ruleTester.run("component-groups-notAuthorized-rename-props", rule, { + valid, + invalid, }); diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.ts b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.ts index 01b27666a..36d1aa923 100644 --- a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.ts +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameProps/component-groups-notAuthorized-rename-props.ts @@ -3,20 +3,27 @@ import { Renames } from "../../helpers/renameSinglePropOnNode"; // https://github.com/patternfly/react-component-groups/pull/145 -const formatMessage = (oldPropName: string, newPropName: string) => - `The ${oldPropName} prop for NotAuthorized has been renamed to ${newPropName}.`; +const formatMessage = ( + component: string, + oldPropName: string, + newPropName: string +) => + `The ${oldPropName} prop for ${component} has been renamed to ${newPropName}.`; -const renames: Renames = { - NotAuthorized: { - description: { - newName: "bodyText", - message: formatMessage("description", "bodyText"), - }, - title: { - newName: "titleText", - message: formatMessage("title", "titleText"), - }, +const getPropsRenames = (component: string) => ({ + description: { + newName: "bodyText", + message: formatMessage(component, "description", "bodyText"), + }, + title: { + newName: "titleText", + message: formatMessage(component, "title", "titleText"), }, +}); + +const renames: Renames = { + NotAuthorized: getPropsRenames("NotAuthorized"), + UnauthorizedAccess: getPropsRenames("UnauthorizedAccess"), }; module.exports = { diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.md b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.md new file mode 100644 index 000000000..b029280ad --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.md @@ -0,0 +1,18 @@ +### component-groups-notAuthorized-rename-to-unauthorizedAccess [(react-component-groups/#313)](https://github.com/patternfly/react-component-groups/pull/313) + +In react-component-groups, we've renamed NotAuthorized component to UnauthorizedAccess + +#### Examples + +In: + +```jsx +%inputExample% +``` + +Out: + +```jsx +%outputExample% +``` + diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.test.ts b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.test.ts new file mode 100644 index 000000000..4d7de0056 --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.test.ts @@ -0,0 +1,61 @@ +const ruleTester = require("../../ruletester"); +import * as rule from "./component-groups-notAuthorized-rename-to-unauthorizedAccess"; + +const errors = [ + { + message: `NotAuthorized has been renamed to UnauthorizedAccess.`, + type: "JSXOpeningElement", + }, +]; + +ruleTester.run( + "component-groups-notAuthorized-rename-to-unauthorizedAccess", + rule, + { + valid: [ + // missing import + { + code: ``, + }, + // import from wrong package + { + code: `import { NotAuthorized } from '@patternfly/react-core'; `, + }, + ], + invalid: [ + { + code: `import { NotAuthorized } from '@patternfly/react-component-groups'; `, + output: `import { UnauthorizedAccess } from '@patternfly/react-component-groups'; `, + errors, + }, + // named import with alias + { + code: `import { NotAuthorized as NotAuth } from '@patternfly/react-component-groups'; `, + output: `import { UnauthorizedAccess as NotAuth } from '@patternfly/react-component-groups'; `, + errors, + }, + // default imports + { + code: `import NotAuthorized from '@patternfly/react-component-groups/dist/cjs/NotAuthorized/index'; `, + output: `import UnauthorizedAccess from '@patternfly/react-component-groups/dist/cjs/UnauthorizedAccess/index'; `, + errors, + }, + { + code: `import NotAuthorized from '@patternfly/react-component-groups/dist/esm/NotAuthorized/index'; `, + output: `import UnauthorizedAccess from '@patternfly/react-component-groups/dist/esm/UnauthorizedAccess/index'; `, + errors, + }, + { + code: `import NotAuthorized from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; `, + output: `import UnauthorizedAccess from '@patternfly/react-component-groups/dist/dynamic/UnauthorizedAccess'; `, + errors, + }, + // default import with name not matching the component name + { + code: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/NotAuthorized'; `, + output: `import NotAuth from '@patternfly/react-component-groups/dist/dynamic/UnauthorizedAccess'; `, + errors, + }, + ], + } +); diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.ts b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.ts new file mode 100644 index 000000000..02ec4787c --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/component-groups-notAuthorized-rename-to-unauthorizedAccess.ts @@ -0,0 +1,12 @@ +import { renameComponent } from "../../helpers/renameComponent"; + +// https://github.com/patternfly/react-component-groups/pull/313 +module.exports = { + meta: { fixable: "code" }, + create: renameComponent( + { + NotAuthorized: "UnauthorizedAccess", + }, + "@patternfly/react-component-groups" + ), +}; diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessInput.tsx b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessInput.tsx new file mode 100644 index 000000000..cb0fbde07 --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessInput.tsx @@ -0,0 +1,4 @@ +import { NotAuthorized } from "@patternfly/react-component-groups"; + +export const ComponentGroupsNotAuthorizedRenameToUnauthorizedAccessInput = + () => ; diff --git a/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessOutput.tsx b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessOutput.tsx new file mode 100644 index 000000000..03e22d9ec --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/src/rules/v6/componentGroupsNotAuthorizedRenameToUnauthorizedAccess/componentGroupsNotAuthorizedRenameToUnauthorizedAccessOutput.tsx @@ -0,0 +1,4 @@ +import { UnauthorizedAccess } from "@patternfly/react-component-groups"; + +export const ComponentGroupsNotAuthorizedRenameToUnauthorizedAccessInput = + () => ;