const ruleTester = require("../../ruletester");
import * as rule from "./toolbar-replaced-spacer-spaceItems";
import {
ValidTests,
InvalidTests,
createValidTest,
createInvalidTest,
} from "../../helpers/testHelpers";
const toolbarComponents = ["ToolbarGroup", "ToolbarToggleGroup", "ToolbarItem"];
const validTests: ValidTests = [];
const invalidTests: InvalidTests = [];
const createErrorObject = (message: string) => ({
message,
type: "JSXOpeningElement",
});
toolbarComponents.forEach((component) => {
validTests.push(createValidTest(`<${component} spacer />`));
validTests.push(createValidTest(`<${component} spaceItems />`));
validTests.push(
createValidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} />`
)
);
const spacerErrorMessage = `The spacer property has been removed from ${component}. We recommend instead using our new gap, columnGap, or rowGap properties.`;
const spaceItemsErrorMessage = `spaceItems property has been removed from ${component}.`;
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} spacer={{default: "spacerNone"}} />`,
`import { ${component} } from '@patternfly/react-core'; <${component} gap={{default: "gapNone"}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; const NO_SPACER = "spacerNone"; <${component} spacer={{default: NO_SPACER}} />`,
`import { ${component} } from '@patternfly/react-core'; const NO_SPACER = "spacerNone"; <${component} gap={{default: NO_SPACER}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} as CustomComponent } from '@patternfly/react-core'; `,
`import { ${component} as CustomComponent } from '@patternfly/react-core'; `,
[
createErrorObject(
`The spacer property has been removed from CustomComponent. We recommend instead using our new gap, columnGap, or rowGap properties.`
),
]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} spacer={{default: "spacerNone", md: "spacerLg", lg: "spacerSm"}} />`,
`import { ${component} } from '@patternfly/react-core'; <${component} gap={{default: "gapNone", md: "gapLg", lg: "gapSm"}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} spaceItems={{default: "spaceItemsNone"}} />`,
`import { ${component} } from '@patternfly/react-core'; <${component} />`,
[createErrorObject(`The ${spaceItemsErrorMessage}`)]
);
createInvalidTest(
`import { ${component} } from '@patternfly/react-core'; <${component} spacer={{default: "spacerNone"}} spaceItems={{default: "spaceItemsNone"}} />`,
`import { ${component} } from '@patternfly/react-core'; <${component} gap={{default: "gapNone"}} />`,
[
createErrorObject(
`${spacerErrorMessage} Additionally, the ${spaceItemsErrorMessage}`
),
]
);
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} spacer={{default: "spacerNone"}} />`,
`import { ${component} } from '@patternfly/react-core/dist/esm/components/Toolbar/index.js'; <${component} gap={{default: "gapNone"}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} spacer={{default: "spacerNone"}} />`,
`import { ${component} } from '@patternfly/react-core/dist/js/components/Toolbar/index.js'; <${component} gap={{default: "gapNone"}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
invalidTests.push(
createInvalidTest(
`import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} spacer={{default: "spacerNone"}} />`,
`import { ${component} } from '@patternfly/react-core/dist/dynamic/components/Toolbar/index.js'; <${component} gap={{default: "gapNone"}} />`,
[createErrorObject(spacerErrorMessage)]
)
);
});
ruleTester.run("toolbar-replaced-spacer-spaceItems", rule, {
valid: validTests,
invalid: invalidTests,
});