eslint-plugin-logical-properties
Version:
77 lines (72 loc) • 1.96 kB
text/typescript
import type {
DirectionalTransformerTestsFactory,
TestInput,
} from '../types.js';
import { generateObjectStringTestCases } from '../utils/propertyTraverse.utils.js';
import { generateDirectionalPropertyError } from './directionalMapping.js';
export const directionalMappingTestGenerator: DirectionalTransformerTestsFactory = ({
testName: inputTestName,
options: inputOptions,
config: { mappings },
}) => {
if (!mappings) {
return {
valid: [],
invalid: [],
};
}
const { functions: functionNames = [], resolvers = [] } = inputOptions;
const options = [inputOptions];
const { valid, invalid } = {
valid: [],
invalid: [],
} as Required<TestInput>;
const testName = `${inputTestName}Mapping`;
for (const functionName of functionNames) {
for (const [source, target] of Object.entries(mappings)) {
const testCaseGenerator = generateObjectStringTestCases.bind(undefined, {
resolvers,
testName,
functionName,
});
// Valid Cases
const validInputs = testCaseGenerator({
input: { [target]: 42 },
});
valid.push(
...validInputs.map(({ code }) => ({
code,
options,
})),
);
// Invalid Cases
const invalidObjects = [
{
input: ({ [source]: 42 }),
output: ({ [target]: 42 }),
},
{
input: ({ [source]: 'theme.padding' }),
output: ({ [target]: 'theme.padding' }),
},
] as const;
const invalidInputs = invalidObjects.flatMap((input) => testCaseGenerator(input));
invalid.push(
...invalidInputs.map(({ code, output }) => ({
code,
options,
errors: [
{
message: generateDirectionalPropertyError(source, target),
},
],
output,
})),
);
}
}
return {
valid,
invalid,
} as const;
};