Lint e2e tests, enforce selectors

This commit is contained in:
Yury Bondarenko
2024-03-14 14:30:25 +01:00
parent 13e9808df2
commit 9a27db3835
4 changed files with 68 additions and 1 deletions

View File

@@ -266,6 +266,7 @@
"options": { "options": {
"lintFilePatterns": [ "lintFilePatterns": [
"src/**/*.ts", "src/**/*.ts",
"cypress/**/*.ts",
"src/**/*.html", "src/**/*.html",
"src/**/*.json5" "src/**/*.json5"
] ]

View File

@@ -98,7 +98,20 @@ export default ESLintUtils.RuleCreator.withoutDocs({
// ignore tests and non-routing modules // ignore tests and non-routing modules
if (context.getFilename()?.endsWith('.spec.ts')) { if (context.getFilename()?.endsWith('.spec.ts')) {
return { return {
[`CallExpression[callee.object.name = "By"][callee.property.name = "css"] > Literal[value = /.*${DISALLOWED_THEME_SELECTORS}.*/]`](node: any) { [`CallExpression[callee.object.name = "By"][callee.property.name = "css"] > Literal:first-child[value = /.*${DISALLOWED_THEME_SELECTORS}.*/]`](node: any) {
context.report({
node,
messageId: 'mustUseThemedWrapper',
fix(fixer: any){
const newSelector = fixSelectors(node.raw);
return fixer.replaceText(node, newSelector);
}
});
},
};
} else if (context.getFilename()?.endsWith('.cy.ts')) {
return {
[`CallExpression[callee.object.name = "cy"][callee.property.name = "get"] > Literal:first-child[value = /.*${DISALLOWED_THEME_SELECTORS}.*/]`](node: any) {
context.report({ context.report({
node, node,
messageId: 'mustUseThemedWrapper', messageId: 'mustUseThemedWrapper',

View File

@@ -0,0 +1,8 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/

View File

@@ -52,6 +52,13 @@ export class Something {
name: fixture('src/app/test/test.component.spec.ts'), name: fixture('src/app/test/test.component.spec.ts'),
code: ` code: `
By.css('ds-themeable'); By.css('ds-themeable');
By.Css('#test > ds-themeable > #nest');
`,
},
{
name: fixture('src/app/test/test.component.cy.ts'),
code: `
By.css('ds-themeable');
By.Css('#test > ds-themeable > #nest'); By.Css('#test > ds-themeable > #nest');
`, `,
}, },
@@ -123,6 +130,44 @@ By.css('ds-themeable');
By.css('#test > ds-themeable > #nest'); By.css('#test > ds-themeable > #nest');
`, `,
}, },
{
filename: fixture('src/app/test/test.component.cy.ts'),
code: `
cy.get('ds-themed-themeable');
cy.get('#test > ds-themed-themeable > #nest');
`,
errors: [
{
messageId: 'mustUseThemedWrapper',
},
{
messageId: 'mustUseThemedWrapper',
},
],
output: `
cy.get('ds-themeable');
cy.get('#test > ds-themeable > #nest');
`,
},
{
filename: fixture('src/app/test/test.component.cy.ts'),
code: `
cy.get('ds-base-themeable');
cy.get('#test > ds-base-themeable > #nest');
`,
errors: [
{
messageId: 'mustUseThemedWrapper',
},
{
messageId: 'mustUseThemedWrapper',
},
],
output: `
cy.get('ds-themeable');
cy.get('#test > ds-themeable > #nest');
`,
},
], ],
} as any); } as any);
}); });