Skip to content

Commit

Permalink
test: workspace spec rearrange + one more test case for now [TESTENG-…
Browse files Browse the repository at this point in the history
…24] (#9674)
  • Loading branch information
JComins000 authored Jul 18, 2024
1 parent 1500f39 commit 4bbde85
Show file tree
Hide file tree
Showing 5 changed files with 204 additions and 127 deletions.
6 changes: 3 additions & 3 deletions webui/react/src/e2e/fixtures/api.auth.fixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@ export class ApiAuthFixture {
}
}

async loginBrowser(page: Page): Promise<void> {
async loginBrowser(page: Page | undefined = this._page): Promise<void> {
if (this.apiContext === undefined) {
throw new Error('Cannot login browser without first logging in API');
}
// Save cookie state into the file.
if (this._page !== undefined) {
if (page !== undefined) {
const state = await this.apiContext.storageState();
// add cookies to current page's existing context
this.browserContext = this._page.context();
this.browserContext = page.context();
// replace the domain of api base url with browser base url
state.cookies.forEach((cookie) => {
if (cookie.name === 'auth' && cookie.domain === new URL(this.baseURL).hostname) {
Expand Down
31 changes: 25 additions & 6 deletions webui/react/src/e2e/fixtures/global-fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { DevFixture } from './dev.fixture';
import { UserFixture } from './user.fixture';

type CustomFixtures = {
dev: DevFixture;
devSetup: Page;
auth: AuthFixture;
apiAuth: ApiAuthFixture;
Expand All @@ -23,9 +22,11 @@ type CustomFixtures = {
};

type CustomWorkerFixtures = {
dev: DevFixture;
newAdmin: V1PostUserRequest;
backgroundApiAuth: ApiAuthFixture;
backgroundApiUser: ApiUserFixture;
backgroundAuthedPage: Page;
};

// https://playwright.dev/docs/test-fixtures
Expand Down Expand Up @@ -72,6 +73,7 @@ export const test = baseTest.extend<CustomFixtures, CustomWorkerFixtures>({
},
{ scope: 'worker' },
],

/**
* Allows calling the user api without a page so that it can run in beforeAll(). You will need to get a bearer
* token by calling backgroundApiUser.apiAuth.loginAPI(). This will also provision a page in the background which
Expand All @@ -85,11 +87,28 @@ export const test = baseTest.extend<CustomFixtures, CustomWorkerFixtures>({
},
{ scope: 'worker' },
],
// eslint-disable-next-line no-empty-pattern
dev: async ({}, use) => {
const dev = new DevFixture();
await use(dev);
},

/**
* API authenticated page for use in beforeAll()
*/
backgroundAuthedPage: [
async ({ browser, dev, backgroundApiAuth }, use) => {
const page = await browser.newPage();
await dev.setServerAddress(page);
await backgroundApiAuth.loginBrowser(page);
await use(page);
await page.close();
},
{ scope: 'worker' },
],
dev: [
// eslint-disable-next-line no-empty-pattern
async ({}, use) => {
const dev = new DevFixture();
await use(dev);
},
{ scope: 'worker' },
],
devSetup: [
async ({ dev, page }, use) => {
await dev.setServerAddress(page);
Expand Down
23 changes: 8 additions & 15 deletions webui/react/src/e2e/tests/experimentList.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { AuthFixture } from 'e2e/fixtures/auth.fixture';
import { expect, test } from 'e2e/fixtures/global-fixtures';
import { ProjectDetails } from 'e2e/models/pages/ProjectDetails';
import { detExecSync, fullPath } from 'e2e/utils/detCLI';
Expand All @@ -15,34 +14,28 @@ test.describe('Experiment List', () => {
return parseInt(count);
};

test.beforeAll(async ({ browser, dev }) => {
const pageSetupTeardown = await browser.newPage();
await dev.setServerAddress(pageSetupTeardown);
const authFixtureSetupTeardown = new AuthFixture(pageSetupTeardown);
const projectDetailsPageSetupTeardown = new ProjectDetails(pageSetupTeardown);
await authFixtureSetupTeardown.login();
await projectDetailsPageSetupTeardown.gotoProject();
test.beforeAll(async ({ backgroundAuthedPage }) => {
const projectDetailsPageSetup = new ProjectDetails(backgroundAuthedPage);
await projectDetailsPageSetup.gotoProject();
await test.step('Create an experiment if not already present', async () => {
await projectDetailsPageSetupTeardown.f_experimentList.tableActionBar.pwLocator.waitFor();
await projectDetailsPageSetup.f_experimentList.tableActionBar.pwLocator.waitFor();
await expect(
projectDetailsPageSetupTeardown.f_experimentList.tableActionBar.count.pwLocator,
projectDetailsPageSetup.f_experimentList.tableActionBar.count.pwLocator,
).toContainText('experiment');
if (
await projectDetailsPageSetupTeardown.f_experimentList.noExperimentsMessage.pwLocator.isVisible()
await projectDetailsPageSetup.f_experimentList.noExperimentsMessage.pwLocator.isVisible()
) {
detExecSync(
`experiment create ${fullPath(
'/../../examples/tutorials/mnist_pytorch/const.yaml',
)} --paused`,
);
await pageSetupTeardown.reload();
await backgroundAuthedPage.reload();
await expect(
projectDetailsPageSetupTeardown.f_experimentList.dataGrid.rows.pwLocator,
projectDetailsPageSetup.f_experimentList.dataGrid.rows.pwLocator,
).not.toHaveCount(0);
}
});
await authFixtureSetupTeardown.logout();
await pageSetupTeardown.close();
});

test.beforeEach(async ({ authedPage }) => {
Expand Down
Loading

0 comments on commit 4bbde85

Please sign in to comment.