rhdh-e2e-test-utils 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +577 -56
  2. package/dist/deployment/keycloak/config/keycloak-values.yaml +94 -0
  3. package/dist/deployment/keycloak/constants.d.ts +29 -0
  4. package/dist/deployment/keycloak/constants.d.ts.map +1 -0
  5. package/dist/deployment/keycloak/constants.js +75 -0
  6. package/dist/deployment/keycloak/deployment.d.ts +89 -0
  7. package/dist/deployment/keycloak/deployment.d.ts.map +1 -0
  8. package/dist/deployment/keycloak/deployment.js +437 -0
  9. package/dist/deployment/keycloak/index.d.ts +2 -0
  10. package/dist/deployment/keycloak/index.d.ts.map +1 -0
  11. package/dist/deployment/keycloak/index.js +1 -0
  12. package/dist/deployment/keycloak/types.d.ts +59 -0
  13. package/dist/deployment/keycloak/types.d.ts.map +1 -0
  14. package/dist/deployment/keycloak/types.js +1 -0
  15. package/dist/deployment/rhdh/config/auth/guest/app-config.yaml +5 -0
  16. package/dist/deployment/rhdh/config/auth/keycloak/app-config.yaml +19 -0
  17. package/dist/deployment/rhdh/config/auth/keycloak/dynamic-plugins.yaml +3 -0
  18. package/dist/deployment/rhdh/config/auth/keycloak/secrets.yaml +12 -0
  19. package/dist/deployment/rhdh/config/{dynamic-plugins.yaml → common/dynamic-plugins.yaml} +1 -0
  20. package/dist/deployment/rhdh/constants.d.ts +6 -0
  21. package/dist/deployment/rhdh/constants.d.ts.map +1 -1
  22. package/dist/deployment/rhdh/constants.js +17 -5
  23. package/dist/deployment/rhdh/deployment.d.ts +8 -1
  24. package/dist/deployment/rhdh/deployment.d.ts.map +1 -1
  25. package/dist/deployment/rhdh/deployment.js +47 -39
  26. package/dist/deployment/rhdh/index.d.ts +0 -1
  27. package/dist/deployment/rhdh/index.d.ts.map +1 -1
  28. package/dist/deployment/rhdh/types.d.ts +4 -1
  29. package/dist/deployment/rhdh/types.d.ts.map +1 -1
  30. package/dist/eslint/base.config.d.ts.map +1 -1
  31. package/dist/eslint/base.config.js +9 -2
  32. package/dist/playwright/base-config.d.ts +3 -3
  33. package/dist/playwright/base-config.d.ts.map +1 -1
  34. package/dist/playwright/base-config.js +5 -4
  35. package/dist/playwright/fixtures/test.d.ts +4 -1
  36. package/dist/playwright/fixtures/test.d.ts.map +1 -1
  37. package/dist/playwright/fixtures/test.js +16 -4
  38. package/dist/playwright/global-setup.d.ts.map +1 -1
  39. package/dist/playwright/global-setup.js +36 -1
  40. package/dist/playwright/helpers/accessibility.d.ts +13 -0
  41. package/dist/playwright/helpers/accessibility.d.ts.map +1 -0
  42. package/dist/playwright/helpers/accessibility.js +24 -0
  43. package/dist/playwright/helpers/api-endpoints.d.ts +11 -0
  44. package/dist/playwright/helpers/api-endpoints.d.ts.map +1 -0
  45. package/dist/playwright/helpers/api-endpoints.js +15 -0
  46. package/dist/playwright/helpers/api-helper.d.ts +77 -0
  47. package/dist/playwright/helpers/api-helper.d.ts.map +1 -0
  48. package/dist/playwright/helpers/api-helper.js +285 -0
  49. package/dist/playwright/helpers/common.d.ts +31 -0
  50. package/dist/playwright/helpers/common.d.ts.map +1 -0
  51. package/dist/playwright/helpers/common.js +342 -0
  52. package/dist/playwright/helpers/index.d.ts +5 -0
  53. package/dist/playwright/helpers/index.d.ts.map +1 -0
  54. package/dist/playwright/helpers/index.js +4 -0
  55. package/dist/playwright/helpers/navbar.d.ts +2 -0
  56. package/dist/playwright/helpers/navbar.d.ts.map +1 -0
  57. package/dist/playwright/helpers/navbar.js +1 -0
  58. package/dist/playwright/helpers/ui-helper.d.ts +106 -0
  59. package/dist/playwright/helpers/ui-helper.d.ts.map +1 -0
  60. package/dist/playwright/helpers/ui-helper.js +439 -0
  61. package/dist/playwright/page-objects/global-obj.d.ts +25 -0
  62. package/dist/playwright/page-objects/global-obj.d.ts.map +1 -0
  63. package/dist/playwright/page-objects/global-obj.js +24 -0
  64. package/dist/playwright/page-objects/page-obj.d.ts +41 -0
  65. package/dist/playwright/page-objects/page-obj.d.ts.map +1 -0
  66. package/dist/playwright/page-objects/page-obj.js +40 -0
  67. package/dist/playwright/pages/catalog-import.d.ts +31 -0
  68. package/dist/playwright/pages/catalog-import.d.ts.map +1 -0
  69. package/dist/playwright/pages/catalog-import.js +65 -0
  70. package/dist/playwright/pages/catalog.d.ts +14 -0
  71. package/dist/playwright/pages/catalog.d.ts.map +1 -0
  72. package/dist/playwright/pages/catalog.js +37 -0
  73. package/dist/playwright/pages/extensions.d.ts +38 -0
  74. package/dist/playwright/pages/extensions.d.ts.map +1 -0
  75. package/dist/playwright/pages/extensions.js +110 -0
  76. package/dist/playwright/pages/home-page.d.ts +10 -0
  77. package/dist/playwright/pages/home-page.d.ts.map +1 -0
  78. package/dist/playwright/pages/home-page.js +46 -0
  79. package/dist/playwright/pages/index.d.ts +6 -0
  80. package/dist/playwright/pages/index.d.ts.map +1 -0
  81. package/dist/playwright/pages/index.js +5 -0
  82. package/dist/playwright/pages/notifications.d.ts +24 -0
  83. package/dist/playwright/pages/notifications.d.ts.map +1 -0
  84. package/dist/playwright/pages/notifications.js +112 -0
  85. package/dist/utils/kubernetes-client.d.ts +9 -0
  86. package/dist/utils/kubernetes-client.d.ts.map +1 -1
  87. package/dist/utils/kubernetes-client.js +57 -2
  88. package/dist/utils/merge-yamls.d.ts +25 -4
  89. package/dist/utils/merge-yamls.d.ts.map +1 -1
  90. package/dist/utils/merge-yamls.js +52 -12
  91. package/package.json +18 -2
  92. /package/dist/deployment/rhdh/config/{app-config-rhdh.yaml → common/app-config-rhdh.yaml} +0 -0
  93. /package/dist/deployment/rhdh/config/{rhdh-secrets.yaml → common/rhdh-secrets.yaml} +0 -0
  94. /package/dist/deployment/rhdh/{helm → config/helm}/value_file.yaml +0 -0
  95. /package/dist/deployment/rhdh/{operator → config/operator}/subscription.yaml +0 -0
@@ -0,0 +1,94 @@
1
+ global:
2
+ security:
3
+ allowInsecureImages: true
4
+
5
+ replicaCount: 1
6
+
7
+ # Use Bitnami legacy repository (Bitnami images moved to bitnamilegacy as of Aug 2025)
8
+ # Note: Legacy images are not updated/maintained. Consider migrating to official Keycloak image for long-term.
9
+ image:
10
+ registry: docker.io
11
+ repository: bitnamilegacy/keycloak
12
+ tag: "26.3.3-debian-12-r0"
13
+ pullPolicy: IfNotPresent
14
+
15
+ auth:
16
+ adminUser: admin
17
+ adminPassword: admin123
18
+
19
+ service:
20
+ type: ClusterIP
21
+ port: 8080
22
+
23
+ # OpenShift Route configuration
24
+ route:
25
+ enabled: true
26
+ host: "" # Will be auto-generated by OpenShift
27
+ tls:
28
+ enabled: false
29
+
30
+ ingress:
31
+ enabled: false
32
+
33
+ postgresql:
34
+ enabled: true
35
+ image:
36
+ registry: docker.io
37
+ repository: bitnamilegacy/postgresql
38
+ tag: "17.6.0-debian-12-r4"
39
+ pullPolicy: IfNotPresent
40
+ auth:
41
+ postgresPassword: postgres123
42
+ username: keycloak
43
+ password: keycloak123
44
+ database: keycloak
45
+ primary:
46
+ resources:
47
+ limits:
48
+ cpu: 1000m
49
+ memory: 1Gi
50
+ requests:
51
+ cpu: 100m
52
+ memory: 256Mi
53
+ persistence:
54
+ enabled: true
55
+ size: 1Gi
56
+
57
+ resources:
58
+ limits:
59
+ cpu: 1000m
60
+ memory: 1Gi
61
+ requests:
62
+ cpu: 100m
63
+ memory: 256Mi
64
+
65
+ extraEnvVars:
66
+ - name: KEYCLOAK_ADMIN
67
+ value: admin
68
+ - name: KEYCLOAK_ADMIN_PASSWORD
69
+ value: admin123
70
+ - name: KC_HTTP_ENABLED
71
+ value: "true"
72
+ - name: KC_PROXY_HEADERS
73
+ value: "xforwarded"
74
+ - name: KC_HOSTNAME_STRICT
75
+ value: "false"
76
+ - name: JAVA_OPTS_APPEND
77
+ value: "-Djava.net.preferIPv4Stack=true -Xms256m -Xmx512m"
78
+
79
+ # Increase probe timeouts for slower startup on resource-constrained clusters
80
+ livenessProbe:
81
+ enabled: true
82
+ initialDelaySeconds: 120
83
+ periodSeconds: 10
84
+ timeoutSeconds: 5
85
+ failureThreshold: 6
86
+ successThreshold: 1
87
+
88
+ readinessProbe:
89
+ enabled: true
90
+ initialDelaySeconds: 60
91
+ periodSeconds: 10
92
+ timeoutSeconds: 5
93
+ failureThreshold: 6
94
+ successThreshold: 1
@@ -0,0 +1,29 @@
1
+ import type { KeycloakClientConfig } from "./types.js";
2
+ export declare const DEFAULT_KEYCLOAK_CONFIG: {
3
+ namespace: string;
4
+ releaseName: string;
5
+ adminUser: string;
6
+ adminPassword: string;
7
+ realm: string;
8
+ };
9
+ export declare const DEFAULT_CONFIG_PATHS: {
10
+ valuesFile: string;
11
+ };
12
+ export declare const BITNAMI_CHART_REPO = "https://charts.bitnami.com/bitnami";
13
+ export declare const BITNAMI_CHART_NAME = "bitnami/keycloak";
14
+ export declare const DEFAULT_RHDH_CLIENT: KeycloakClientConfig;
15
+ export declare const DEFAULT_GROUPS: {
16
+ name: string;
17
+ }[];
18
+ export declare const DEFAULT_USERS: {
19
+ username: string;
20
+ email: string;
21
+ firstName: string;
22
+ lastName: string;
23
+ enabled: boolean;
24
+ emailVerified: boolean;
25
+ password: string;
26
+ groups: string[];
27
+ }[];
28
+ export declare const SERVICE_ACCOUNT_ROLES: string[];
29
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;CAKhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AACvE,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,oBA0BjC,CAAC;AAEF,eAAO,MAAM,cAAc;;GAI1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;GAqBzB,CAAC;AAGF,eAAO,MAAM,qBAAqB,UAIjC,CAAC"}
@@ -0,0 +1,75 @@
1
+ import path from "path";
2
+ // Navigate from dist/deployment/keycloak/ to package root
3
+ const PACKAGE_ROOT = path.resolve(import.meta.dirname, "../../..");
4
+ export const DEFAULT_KEYCLOAK_CONFIG = {
5
+ namespace: "rhdh-keycloak",
6
+ releaseName: "keycloak",
7
+ adminUser: "admin",
8
+ adminPassword: "admin123",
9
+ realm: "rhdh",
10
+ };
11
+ export const DEFAULT_CONFIG_PATHS = {
12
+ valuesFile: path.join(PACKAGE_ROOT, "dist/deployment/keycloak/config/keycloak-values.yaml"),
13
+ };
14
+ export const BITNAMI_CHART_REPO = "https://charts.bitnami.com/bitnami";
15
+ export const BITNAMI_CHART_NAME = "bitnami/keycloak";
16
+ export const DEFAULT_RHDH_CLIENT = {
17
+ clientId: "rhdh-client",
18
+ clientSecret: "rhdh-client-secret",
19
+ name: "RHDH Client",
20
+ redirectUris: ["*"],
21
+ webOrigins: ["*"],
22
+ standardFlowEnabled: true,
23
+ implicitFlowEnabled: true,
24
+ directAccessGrantsEnabled: true,
25
+ serviceAccountsEnabled: true,
26
+ authorizationServicesEnabled: true,
27
+ publicClient: false,
28
+ defaultClientScopes: [
29
+ "service_account",
30
+ "web-origins",
31
+ "roles",
32
+ "profile",
33
+ "basic",
34
+ "email",
35
+ ],
36
+ optionalClientScopes: [
37
+ "address",
38
+ "phone",
39
+ "offline_access",
40
+ "microprofile-jwt",
41
+ ],
42
+ };
43
+ export const DEFAULT_GROUPS = [
44
+ { name: "developers" },
45
+ { name: "admins" },
46
+ { name: "viewers" },
47
+ ];
48
+ export const DEFAULT_USERS = [
49
+ {
50
+ username: "test1",
51
+ email: "test1@example.com",
52
+ firstName: "Test",
53
+ lastName: "User1",
54
+ enabled: true,
55
+ emailVerified: true,
56
+ password: "test1@123",
57
+ groups: ["developers"],
58
+ },
59
+ {
60
+ username: "test2",
61
+ email: "test2@example.com",
62
+ firstName: "Test",
63
+ lastName: "User2",
64
+ enabled: true,
65
+ emailVerified: true,
66
+ password: "test2@123",
67
+ groups: ["developers"],
68
+ },
69
+ ];
70
+ // Service account roles required for RHDH integration
71
+ export const SERVICE_ACCOUNT_ROLES = [
72
+ "view-authorization",
73
+ "manage-authorization",
74
+ "view-users",
75
+ ];
@@ -0,0 +1,89 @@
1
+ import { KubernetesClientHelper } from "../../utils/kubernetes-client.js";
2
+ import type { KeycloakDeploymentOptions, KeycloakDeploymentConfig, KeycloakClientConfig, KeycloakUserConfig, KeycloakGroupConfig, KeycloakRealmConfig, KeycloakConnectionConfig } from "./types.js";
3
+ export declare class KeycloakHelper {
4
+ k8sClient: KubernetesClientHelper;
5
+ deploymentConfig: KeycloakDeploymentConfig;
6
+ keycloakUrl: string;
7
+ realm: string;
8
+ clientId: string;
9
+ clientSecret: string;
10
+ private _adminClient;
11
+ constructor(options?: KeycloakDeploymentOptions);
12
+ /**
13
+ * Deploy Keycloak using Helm and configure it for RHDH.
14
+ */
15
+ deploy(): Promise<void>;
16
+ /**
17
+ * Check if Keycloak is already running
18
+ */
19
+ isRunning(): Promise<boolean>;
20
+ /**
21
+ * Configure Keycloak with realm, client, groups, and users for RHDH
22
+ */
23
+ configureForRHDH(options?: {
24
+ realm?: string;
25
+ client?: Partial<KeycloakClientConfig>;
26
+ groups?: KeycloakGroupConfig[];
27
+ users?: KeycloakUserConfig[];
28
+ }): Promise<void>;
29
+ /**
30
+ * Connect to an existing Keycloak instance
31
+ */
32
+ connect(config: KeycloakConnectionConfig): Promise<void>;
33
+ /**
34
+ * Create a new realm
35
+ */
36
+ createRealm(config: KeycloakRealmConfig): Promise<void>;
37
+ /**
38
+ * Create a new client in a realm
39
+ */
40
+ createClient(realm: string, config: KeycloakClientConfig): Promise<void>;
41
+ /**
42
+ * Create a group in a realm
43
+ */
44
+ createGroup(realm: string, config: KeycloakGroupConfig): Promise<void>;
45
+ /**
46
+ * Create a user in a realm with optional group membership
47
+ */
48
+ createUser(realm: string, config: KeycloakUserConfig): Promise<void>;
49
+ /**
50
+ * Get all users in a realm
51
+ */
52
+ getUsers(realm: string): Promise<KeycloakUserConfig[]>;
53
+ /**
54
+ * Get all groups in a realm
55
+ */
56
+ getGroups(realm: string): Promise<KeycloakGroupConfig[]>;
57
+ /**
58
+ * Delete a user from a realm
59
+ */
60
+ deleteUser(realm: string, username: string): Promise<void>;
61
+ /**
62
+ * Delete a group from a realm
63
+ */
64
+ deleteGroup(realm: string, groupName: string): Promise<void>;
65
+ /**
66
+ * Delete a realm
67
+ */
68
+ deleteRealm(realm: string): Promise<void>;
69
+ /**
70
+ * Teardown Keycloak deployment
71
+ */
72
+ teardown(): Promise<void>;
73
+ /**
74
+ * Wait for Keycloak to be ready
75
+ */
76
+ waitUntilReady(timeout?: number): Promise<void>;
77
+ private _buildDeploymentConfig;
78
+ private _deployWithHelm;
79
+ private _createRoute;
80
+ getRouteLocation(): Promise<string>;
81
+ private _waitForKeycloak;
82
+ private _initializeAdminClient;
83
+ private _ensureAdminClient;
84
+ private _assignServiceAccountRoles;
85
+ private _addUserToGroup;
86
+ private _isConflictError;
87
+ private _log;
88
+ }
89
+ //# sourceMappingURL=deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAY1E,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAClB,SAAS,yBAAgC;IACzC,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAM;IACzB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,YAAY,EAAE,MAAM,CAAM;IACjC,OAAO,CAAC,YAAY,CAAoC;gBAE5C,OAAO,GAAE,yBAA8B;IAInD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9D;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1E;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAe5D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAQ9D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACG,cAAc,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,OAAO,CAAC,sBAAsB;YAahB,eAAe;YAWf,YAAY;IA2BpB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;YAO3B,gBAAgB;YAoBhB,sBAAsB;YActB,kBAAkB;YAQlB,0BAA0B;YAmD1B,eAAe;IAqB7B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,IAAI;CAGb"}