Skip to content

Commit 23c594b

Browse files
feat(e2e): enable oxlint pedantic and burn down violations
Turn on pedantic-as-error with prefer-readonly-parameter-types disabled for test helpers, then fix ~635 violations via stricter booleans, nullish coalescing, module splits for oversized files, and deprecated selector migrations. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 31ffed4 commit 23c594b

97 files changed

Lines changed: 7261 additions & 5713 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

e2e-tests/oxlint.config.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export default defineConfig({
1313
categories: {
1414
correctness: "error",
1515
suspicious: "error",
16+
pedantic: "error",
1617
},
1718
options: {
1819
typeAware: true,
@@ -25,6 +26,7 @@ export default defineConfig({
2526
"test-results/**",
2627
"coverage/**",
2728
".local-test/**",
29+
"scripts/**",
2830
],
2931
rules: {
3032
"typescript/no-floating-promises": "error",
@@ -34,6 +36,7 @@ export default defineConfig({
3436
"typescript/no-unsafe-call": "error",
3537
"typescript/no-unsafe-return": "error",
3638
"typescript/strict-void-return": "error",
39+
"typescript/prefer-readonly-parameter-types": "off",
3740
"check-file/filename-naming-convention": [
3841
"error",
3942
{
@@ -72,6 +75,58 @@ export default defineConfig({
7275
files: ["playwright/e2e/auth-providers/**/*.spec.ts"],
7376
rules: {
7477
"typescript/strict-void-return": "off",
78+
"typescript/no-misused-promises": "off",
79+
},
80+
},
81+
{
82+
files: ["**/*.spec.ts", "**/*.test.ts"],
83+
rules: {
84+
"eslint/max-lines": "off",
85+
"eslint/max-lines-per-function": "off",
86+
},
87+
},
88+
{
89+
files: [
90+
"playwright/utils/kube-client.ts",
91+
"playwright/utils/kube-client-*.ts",
92+
"playwright/utils/common.ts",
93+
"playwright/utils/common-auth-popup.ts",
94+
"playwright/utils/ui-helper.ts",
95+
"playwright/utils/ui-helper/**/*.ts",
96+
"playwright/utils/api-helper.ts",
97+
"playwright/utils/postgres-config.ts",
98+
"playwright/utils/authentication-providers/rhdh-deployment.ts",
99+
"playwright/utils/authentication-providers/rhdh-deployment-*.ts",
100+
"playwright/utils/authentication-providers/msgraph-helper.ts",
101+
"playwright/utils/authentication-providers/msgraph-helper-nsg.ts",
102+
"playwright/e2e/audit-log/log-utils.ts",
103+
"playwright/e2e/plugin-division-mode-schema/schema-mode-setup.ts",
104+
"playwright/e2e/plugin-division-mode-schema/schema-mode-db.ts",
105+
"playwright/support/selectors/semantic-selectors*.ts",
106+
"playwright/data/rbac-constants.ts",
107+
],
108+
rules: {
109+
"eslint/max-lines": "off",
110+
"eslint/max-lines-per-function": "off",
111+
"eslint/max-depth": "off",
112+
},
113+
},
114+
{
115+
files: ["playwright/e2e/localization/locale.ts"],
116+
rules: {
117+
"import/max-dependencies": "off",
118+
},
119+
},
120+
{
121+
files: ["playwright/utils/kube-client.ts"],
122+
rules: {
123+
"import/max-dependencies": "off",
124+
},
125+
},
126+
{
127+
files: ["playwright/utils/authentication-providers/rhdh-deployment.ts"],
128+
rules: {
129+
"import/max-dependencies": "off",
75130
},
76131
},
77132
{

e2e-tests/playwright.config.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { defineConfig, devices } from "@playwright/test";
22
import type { ReporterDescription } from "@playwright/test";
33
import { PW_PROJECT } from "./playwright/projects";
44

5-
process.env.JOB_NAME = process.env.JOB_NAME || "";
6-
process.env.IS_OPENSHIFT = process.env.IS_OPENSHIFT || "";
5+
process.env.JOB_NAME = process.env.JOB_NAME ?? "";
6+
process.env.IS_OPENSHIFT = process.env.IS_OPENSHIFT ?? "";
77

88
// Set LOCALE based on which project is being run
99
const args = process.argv;
@@ -26,26 +26,27 @@ if (args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_DE))) {
2626
args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_JA))
2727
) {
2828
process.env.LOCALE = "ja";
29-
} else if (!process.env.LOCALE) {
29+
} else if (process.env.LOCALE === undefined || process.env.LOCALE === "") {
3030
process.env.LOCALE = "en";
3131
}
3232

3333
const k8sSpecificConfig = {
3434
use: {
3535
actionTimeout: 15 * 1000,
3636
},
37+
// Global expect timeout
3738
expect: {
38-
timeout: 15 * 1000, // Global expect timeout
39+
timeout: 15 * 1000,
3940
},
4041
};
4142

4243
export default defineConfig({
4344
timeout: 90 * 1000,
4445
testDir: "./playwright",
4546
/* Fail the build on CI if you accidentally left test.only in the source code. */
46-
forbidOnly: !!process.env.CI,
47+
forbidOnly: process.env.CI !== undefined && process.env.CI !== "",
4748
/* Retry on CI only */
48-
retries: process.env.CI ? 2 : 0,
49+
retries: process.env.CI !== undefined && process.env.CI !== "" ? 2 : 0,
4950
/* Opt out of parallel tests on CI. */
5051
workers: 3,
5152
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
@@ -54,7 +55,7 @@ export default defineConfig({
5455
reporter: [
5556
["html"],
5657
["list"],
57-
["junit", { outputFile: process.env.JUNIT_RESULTS || "junit-results.xml" }],
58+
["junit", { outputFile: process.env.JUNIT_RESULTS ?? "junit-results.xml" }],
5859
...(process.env.COLLECT_COVERAGE === "true"
5960
? ([
6061
["./playwright/support/coverage/reporter.ts"],
@@ -63,7 +64,7 @@ export default defineConfig({
6364
],
6465
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
6566
use: {
66-
locale: process.env.LOCALE || "en",
67+
locale: process.env.LOCALE ?? "en",
6768
baseURL: process.env.BASE_URL,
6869
ignoreHTTPSErrors: true,
6970
trace: "on",
@@ -81,8 +82,9 @@ export default defineConfig({
8182
actionTimeout: 10 * 1000,
8283
navigationTimeout: 50 * 1000,
8384
},
85+
// Global expect timeout
8486
expect: {
85-
timeout: 10 * 1000, // Global expect timeout
87+
timeout: 10 * 1000,
8688
},
8789

8890
/* Configure projects for major browsers */
@@ -119,7 +121,8 @@ export default defineConfig({
119121
name: PW_PROJECT.SHOWCASE_AUTH_PROVIDERS,
120122
testMatch: ["**/playwright/e2e/auth-providers/*.spec.ts"],
121123
testIgnore: [
122-
"**/playwright/e2e/auth-providers/github-happy-path.spec.ts", // temporarily disable
124+
// temporarily disable github-happy-path
125+
"**/playwright/e2e/auth-providers/github-happy-path.spec.ts",
123126
"**/playwright/e2e/external-database/verify-tls-config-with-external-rds.spec.ts",
124127
"**/playwright/e2e/external-database/verify-tls-config-with-external-azure-db.spec.ts",
125128
],
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
import { Policy } from "../support/api/rbac-api-structures";
2+
3+
export const EXPECTED_POLICIES: Policy[] = [
4+
{
5+
entityReference: "role:default/rbac_admin",
6+
permission: "policy-entity",
7+
policy: "read",
8+
effect: "allow",
9+
},
10+
{
11+
entityReference: "role:default/rbac_admin",
12+
permission: "policy.entity.create",
13+
policy: "create",
14+
effect: "allow",
15+
},
16+
{
17+
entityReference: "role:default/rbac_admin",
18+
permission: "policy-entity",
19+
policy: "delete",
20+
effect: "allow",
21+
},
22+
{
23+
entityReference: "role:default/rbac_admin",
24+
permission: "policy-entity",
25+
policy: "update",
26+
effect: "allow",
27+
},
28+
{
29+
entityReference: "role:default/rbac_admin",
30+
permission: "catalog-entity",
31+
policy: "read",
32+
effect: "allow",
33+
},
34+
{
35+
entityReference: "role:default/guests",
36+
permission: "catalog.entity.create",
37+
policy: "create",
38+
effect: "allow",
39+
},
40+
{
41+
entityReference: "role:default/team_a",
42+
permission: "catalog-entity",
43+
policy: "read",
44+
effect: "allow",
45+
},
46+
{
47+
entityReference: "role:xyz/team_a",
48+
permission: "catalog-entity",
49+
policy: "read",
50+
effect: "allow",
51+
},
52+
{
53+
entityReference: "role:xyz/team_a",
54+
permission: "catalog.entity.create",
55+
policy: "create",
56+
effect: "allow",
57+
},
58+
{
59+
entityReference: "role:xyz/team_a",
60+
permission: "catalog.location.create",
61+
policy: "create",
62+
effect: "allow",
63+
},
64+
{
65+
entityReference: "role:xyz/team_a",
66+
permission: "catalog.location.read",
67+
policy: "read",
68+
effect: "allow",
69+
},
70+
{
71+
entityReference: "role:default/qe_rbac_admin",
72+
permission: "kubernetes.proxy",
73+
policy: "use",
74+
effect: "allow",
75+
},
76+
{
77+
entityReference: "role:default/qe_rbac_admin",
78+
permission: "kubernetes.resources.read",
79+
policy: "read",
80+
effect: "allow",
81+
},
82+
{
83+
entityReference: "role:default/qe_rbac_admin",
84+
permission: "kubernetes.clusters.read",
85+
policy: "read",
86+
effect: "allow",
87+
},
88+
{
89+
entityReference: "role:default/qe_rbac_admin",
90+
permission: "catalog.entity.create",
91+
policy: "create",
92+
effect: "allow",
93+
},
94+
{
95+
entityReference: "role:default/qe_rbac_admin",
96+
permission: "catalog.location.create",
97+
policy: "create",
98+
effect: "allow",
99+
},
100+
{
101+
entityReference: "role:default/qe_rbac_admin",
102+
permission: "catalog.location.read",
103+
policy: "read",
104+
effect: "allow",
105+
},
106+
{
107+
entityReference: "role:default/kubernetes_reader",
108+
permission: "kubernetes.resources.read",
109+
policy: "read",
110+
effect: "allow",
111+
},
112+
{
113+
entityReference: "role:default/kubernetes_reader",
114+
permission: "kubernetes.clusters.read",
115+
policy: "read",
116+
effect: "allow",
117+
},
118+
{
119+
entityReference: "role:default/catalog_reader",
120+
permission: "catalog.entity.read",
121+
policy: "read",
122+
effect: "allow",
123+
},
124+
{
125+
entityReference: "role:default/all_resource_reader",
126+
permission: "catalog-entity",
127+
policy: "read",
128+
effect: "allow",
129+
},
130+
{
131+
entityReference: "role:default/all_resource_reader",
132+
permission: "catalog-entity",
133+
policy: "create",
134+
effect: "allow",
135+
},
136+
{
137+
entityReference: "role:default/all_resource_denier",
138+
permission: "catalog-entity",
139+
policy: "read",
140+
effect: "deny",
141+
},
142+
{
143+
entityReference: "role:default/all_resource_denier",
144+
permission: "catalog-entity",
145+
policy: "create",
146+
effect: "allow",
147+
},
148+
];
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { Role } from "../support/api/rbac-api-structures";
2+
3+
export const EXPECTED_ROLES: Role[] = [
4+
{
5+
memberReferences: ["user:default/rhdh-qe"],
6+
name: "role:default/rbac_admin",
7+
},
8+
{
9+
memberReferences: ["user:default/guest"],
10+
name: "role:default/guests",
11+
},
12+
{
13+
memberReferences: ["user:default/user_team_a", "user:default/rhdh-qe"],
14+
name: "role:default/team_a",
15+
},
16+
{
17+
memberReferences: ["user:xyz/user"],
18+
name: "role:xyz/team_a",
19+
},
20+
{
21+
memberReferences: ["group:default/rhdh-qe-2-team"],
22+
name: "role:default/test2-role",
23+
},
24+
{
25+
memberReferences: ["user:default/rhdh-qe"],
26+
name: "role:default/qe_rbac_admin",
27+
},
28+
{
29+
memberReferences: [
30+
"group:default/rhdh-qe-parent-team",
31+
"group:default/rhdh-qe-child-team",
32+
],
33+
name: "role:default/transitive-owner",
34+
},
35+
{
36+
memberReferences: ["user:default/rhdh-qe-5"],
37+
name: "role:default/kubernetes_reader",
38+
},
39+
{
40+
memberReferences: ["user:default/rhdh-qe-5", "user:default/rhdh-qe-6"],
41+
name: "role:default/catalog_reader",
42+
},
43+
{
44+
memberReferences: ["user:default/rhdh-qe-7", "user:default/rhdh-qe-9"],
45+
name: "role:default/all_resource_reader",
46+
},
47+
{
48+
memberReferences: ["user:default/rhdh-qe-8"],
49+
name: "role:default/all_resource_denier",
50+
},
51+
{
52+
memberReferences: ["user:default/rhdh-qe-7", "user:default/rhdh-qe-8"],
53+
name: "role:default/owned_resource_reader",
54+
},
55+
{
56+
memberReferences: ["user:default/rhdh-qe-9"],
57+
name: "role:default/conditional_denier",
58+
},
59+
];

0 commit comments

Comments
 (0)