diff --git a/node/e2e-tests/src/constats.ts b/node/e2e-tests/src/constats.ts index 6d5221f3..f07c8612 100644 --- a/node/e2e-tests/src/constats.ts +++ b/node/e2e-tests/src/constats.ts @@ -1,4 +1,6 @@ export const namespace = 'theiacloud'; export const resourceGroup = 'theia.cloud'; -export const resourceVersion = 'v1beta8'; -export const resourcePlural = 'sessions'; +export const sessionVersion = 'v1beta8'; +export const sessionPlural = 'sessions'; +export const workspaceVersion = 'v1beta5'; +export const workspacePlural = 'workspaces'; diff --git a/node/e2e-tests/src/k8s.ts b/node/e2e-tests/src/k8s.ts new file mode 100644 index 00000000..5e14fb99 --- /dev/null +++ b/node/e2e-tests/src/k8s.ts @@ -0,0 +1,44 @@ +import { KubeConfig, CustomObjectsApi } from '@kubernetes/client-node'; +import { namespace, resourceGroup, sessionPlural, sessionVersion, workspacePlural, workspaceVersion } from './constats'; + +const kc = new KubeConfig(); +kc.loadFromDefault(); +export const k8sApi = kc.makeApiClient(CustomObjectsApi); + +export async function deleteAllSessions(): Promise { + const sessions: any = await k8sApi.listNamespacedCustomObject( + resourceGroup, + sessionVersion, + namespace, + sessionPlural + ); + + for (const resource of sessions.body.items) { + await k8sApi.deleteNamespacedCustomObject( + resourceGroup, + sessionVersion, + namespace, + sessionPlural, + resource.metadata.name + ); + } +} + +export async function deleteAllWorkspaces(): Promise { + const sessions: any = await k8sApi.listNamespacedCustomObject( + resourceGroup, + workspaceVersion, + namespace, + workspacePlural + ); + + for (const resource of sessions.body.items) { + await k8sApi.deleteNamespacedCustomObject( + resourceGroup, + workspaceVersion, + namespace, + workspacePlural, + resource.metadata.name + ); + } +} diff --git a/node/e2e-tests/src/tests/login.test.ts b/node/e2e-tests/src/tests/login.test.ts index 92178158..5309cb59 100644 --- a/node/e2e-tests/src/tests/login.test.ts +++ b/node/e2e-tests/src/tests/login.test.ts @@ -1,30 +1,10 @@ import { expect, test } from '@playwright/test'; -import { KubeConfig, CustomObjectsApi } from '@kubernetes/client-node'; -import { namespace, resourceGroup, resourcePlural, resourceVersion } from '../constats'; - -const kc = new KubeConfig(); -kc.loadFromDefault(); -const k8sApi = kc.makeApiClient(CustomObjectsApi); +import { deleteAllSessions, deleteAllWorkspaces } from '../k8s'; test.describe('Login', () => { test.beforeEach(async () => { - /* delete all sessions */ - const resources: any = await k8sApi.listNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural - ); - - for (const resource of resources.body.items) { - await k8sApi.deleteNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural, - resource.metadata.name - ); - } + deleteAllSessions(); + deleteAllWorkspaces(); }); test('should work', async ({ page, baseURL }) => { diff --git a/node/e2e-tests/src/tests/logout.test.ts b/node/e2e-tests/src/tests/logout.test.ts index 56fd4956..4f03c41c 100644 --- a/node/e2e-tests/src/tests/logout.test.ts +++ b/node/e2e-tests/src/tests/logout.test.ts @@ -1,30 +1,10 @@ import { expect, test } from '@playwright/test'; -import { KubeConfig, CustomObjectsApi } from '@kubernetes/client-node'; -import { namespace, resourceGroup, resourcePlural, resourceVersion } from '../constats'; - -const kc = new KubeConfig(); -kc.loadFromDefault(); -const k8sApi = kc.makeApiClient(CustomObjectsApi); +import { deleteAllSessions, deleteAllWorkspaces } from '../k8s'; test.describe('Logout', () => { test.beforeEach(async () => { - /* delete all sessions */ - const resources: any = await k8sApi.listNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural - ); - - for (const resource of resources.body.items) { - await k8sApi.deleteNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural, - resource.metadata.name - ); - } + deleteAllSessions(); + deleteAllWorkspaces(); }); test('should work', async ({ page, baseURL }) => { diff --git a/node/e2e-tests/src/tests/start.test.ts b/node/e2e-tests/src/tests/start.test.ts index b2752878..08cfc775 100644 --- a/node/e2e-tests/src/tests/start.test.ts +++ b/node/e2e-tests/src/tests/start.test.ts @@ -1,30 +1,11 @@ import { expect, test } from '@playwright/test'; -import { KubeConfig, CustomObjectsApi } from '@kubernetes/client-node'; -import { namespace, resourceGroup, resourcePlural, resourceVersion } from '../constats'; - -const kc = new KubeConfig(); -kc.loadFromDefault(); -const k8sApi = kc.makeApiClient(CustomObjectsApi); +import { namespace, resourceGroup, sessionPlural, sessionVersion } from '../constats'; +import { deleteAllSessions, deleteAllWorkspaces, k8sApi } from '../k8s'; test.describe('Start Session', () => { test.beforeEach(async () => { - /* delete all sessions */ - const resources: any = await k8sApi.listNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural - ); - - for (const resource of resources.body.items) { - await k8sApi.deleteNamespacedCustomObject( - resourceGroup, - resourceVersion, - namespace, - resourcePlural, - resource.metadata.name - ); - } + deleteAllSessions(); + deleteAllWorkspaces(); }); test('should work', async ({ page, baseURL }) => { @@ -56,15 +37,20 @@ test.describe('Start Session', () => { await expect(loadingAnimation).toBeHidden({ timeout: 180000 }); /* check redirect url */ - expect(page.url()).toContain(baseURL!.replace('trynow', 'instances')); + const browserUrl = page.url(); + expect(browserUrl).toContain(baseURL!.replace('trynow', 'instances')); /* check created session */ const resources: any = await k8sApi.listNamespacedCustomObject( resourceGroup, - resourceVersion, + sessionVersion, namespace, - resourcePlural + sessionPlural ); expect(resources.body.items).toHaveLength(1); + + const sessionUrl = resources.body.items[0].status.url; + expect(sessionUrl).toBeDefined(); + expect(browserUrl).toBe(sessionUrl); }); });