Skip to content

Commit

Permalink
feat(website): address comments
Browse files Browse the repository at this point in the history
feat(website): remove hardcoded accessions from e2e
  • Loading branch information
TobiasKampmann committed Feb 27, 2024
1 parent 6279701 commit c961dca
Show file tree
Hide file tree
Showing 11 changed files with 157 additions and 251 deletions.
2 changes: 1 addition & 1 deletion website/.nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v20
v21
25 changes: 1 addition & 24 deletions website/tests/e2e.fixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import { SequencePage } from './pages/sequences/sequences.page';
import { SubmitPage } from './pages/submit/submit.page';
import { GroupPage } from './pages/user/group/group.page.ts';
import { UserSequencePage } from './pages/user/userSequencePage/userSequencePage.ts';
import { AccessionTransformer } from './util/accessionTransformer.ts';
import { createGroup } from './util/backendCalls.ts';
import { ACCESS_TOKEN_COOKIE, clientMetadata, realmPath, REFRESH_TOKEN_COOKIE } from '../src/middleware/authMiddleware';
import { BackendClient } from '../src/services/backendClient';
Expand Down Expand Up @@ -56,35 +55,13 @@ export const e2eLogger = winston.createLogger({
transports: [new winston.transports.Console()],
});

export const accessionPrefix = 'LOC_';
export const accessionTransformer = new AccessionTransformer(accessionPrefix);

export const backendClient = BackendClient.create(backendUrl, e2eLogger);
export const groupManagementClient = GroupManagementClient.create(backendUrl, e2eLogger);

export const testSequenceEntry = {
name: `${accessionTransformer.generateCustomId(1)}.1`,
accession: accessionTransformer.generateCustomId(1),
version: 1,
export const testSequenceEntryData = {
unaligned: 'A'.repeat(123),
orf1a: 'QRFEINSA',
};
export const revokedSequenceEntry = {
accession: accessionTransformer.generateCustomId(11),
version: 1,
};
export const revocationSequenceEntry = {
accession: accessionTransformer.generateCustomId(11),
version: 2,
};
export const deprecatedSequenceEntry = {
accession: accessionTransformer.generateCustomId(21),
version: 1,
};
export const revisedSequenceEntry = {
accession: accessionTransformer.generateCustomId(21),
version: 2,
};

export const testUser = 'testuser';
export const testUserPassword = 'testuser';
Expand Down
22 changes: 16 additions & 6 deletions website/tests/pages/search/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { DateTime } from 'luxon';

import { routes } from '../../../src/routes.ts';
import { baseUrl, dummyOrganism, expect, test, testSequenceEntry } from '../../e2e.fixture';
import { baseUrl, dummyOrganism, expect, test } from '../../e2e.fixture';
import { getAccessionVersionString } from '../../../src/utils/extractAccessionVersion.ts';
import { getTestSequences } from '../../util/testSequenceProvider.ts';

test.describe('The search page', () => {
test('should show the search form with button and a table', async ({ searchPage }) => {
Expand All @@ -20,16 +22,22 @@ test.describe('The search page', () => {
});

test('should search for existing sequence entries', async ({ searchPage }) => {
const testAccessionVersion = getAccessionVersionString(getTestSequences().testSequenceEntry);

await searchPage.goto();
await searchPage.getEmptyAccessionVersionField().fill(testSequenceEntry.name);
await searchPage.getEmptyAccessionVersionField().fill(testAccessionVersion);
await searchPage.clickSearchButton();

await searchPage.page.waitForURL(
`${baseUrl}${routes.searchPage(dummyOrganism.key, [
{ name: 'accessionVersion', type: 'string', filterValue: testSequenceEntry.name },
{
name: 'accessionVersion',
type: 'string',
filterValue: testAccessionVersion,
},
])}`,
);
await expect(searchPage.page.getByText(testSequenceEntry.name, { exact: true })).toBeVisible();
await expect(searchPage.page.getByText(testAccessionVersion, { exact: true })).toBeVisible();
await expect(searchPage.page.getByText('2002-12-15')).toBeVisible();
await expect(searchPage.page.getByText('B.1.1.7')).toBeVisible();
});
Expand All @@ -45,9 +53,11 @@ test.describe('The search page', () => {

test('should reset the search', async ({ searchPage }) => {
await searchPage.goto();
await searchPage.getEmptyAccessionVersionField().fill(testSequenceEntry.name);

await expect(searchPage.getFilledAccessionVersionField()).toHaveValue(testSequenceEntry.name);
const testAccessionVersion = getAccessionVersionString(getTestSequences().testSequenceEntry);
await searchPage.getEmptyAccessionVersionField().fill(testAccessionVersion);

await expect(searchPage.getFilledAccessionVersionField()).toHaveValue(testAccessionVersion);

await searchPage.clickResetButton();

Expand Down
18 changes: 13 additions & 5 deletions website/tests/pages/sequences/accession.fa.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
import { routes } from '../../../src/routes.ts';
import { baseUrl, dummyOrganism, expect, test, testSequenceEntry } from '../../e2e.fixture';
import { baseUrl, dummyOrganism, expect, test, testSequenceEntryData } from '../../e2e.fixture';
import { getAccessionVersionString } from '../../../src/utils/extractAccessionVersion.ts';
import { getTestSequences } from '../../util/testSequenceProvider.ts';

test.describe('The sequence.fa page', () => {
test('can load and show fasta file', async () => {
const url = `${baseUrl}${routes.sequencesFastaPage(dummyOrganism.key, testSequenceEntry)}`;
const testSequences = getTestSequences();

const url = `${baseUrl}${routes.sequencesFastaPage(dummyOrganism.key, testSequences.testSequenceEntry)}`;
const response = await fetch(url);
const content = await response.text();
expect(content).toBe(`>${testSequenceEntry.name}\n${testSequenceEntry.unaligned}\n`);
expect(content).toBe(
`>${getAccessionVersionString(testSequences.testSequenceEntry)}\n${testSequenceEntryData.unaligned}\n`,
);
});

test('can download fasta file', async () => {
const downloadUrl = `${baseUrl}${routes.sequencesFastaPage(dummyOrganism.key, testSequenceEntry, true)}`;
const testSequences = getTestSequences();

const downloadUrl = `${baseUrl}${routes.sequencesFastaPage(dummyOrganism.key, testSequences.testSequenceEntry, true)}`;
const response = await fetch(downloadUrl);
const contentDisposition = response.headers.get('Content-Disposition');

expect(contentDisposition).not.toBeNull();
expect(contentDisposition).toContain('attachment');
expect(contentDisposition).toContain(testSequenceEntry.name);
expect(contentDisposition).toContain(getAccessionVersionString(testSequences.testSequenceEntry));
});
});
39 changes: 18 additions & 21 deletions website/tests/pages/sequences/accession.spec.ts
Original file line number Diff line number Diff line change
@@ -1,55 +1,52 @@
import { routes } from '../../../src/routes.ts';
import { getAccessionVersionString } from '../../../src/utils/extractAccessionVersion.ts';
import {
baseUrl,
deprecatedSequenceEntry,
dummyOrganism,
expect,
revisedSequenceEntry,
revocationSequenceEntry,
revokedSequenceEntry,
test,
testSequenceEntry,
} from '../../e2e.fixture';
import { baseUrl, dummyOrganism, expect, test, testSequenceEntryData } from '../../e2e.fixture';
import { getTestSequences } from '../../util/testSequenceProvider.ts';

test.describe('The detailed sequence page', () => {
test('can load and show sequence data', async ({ sequencePage }) => {
await sequencePage.goto();
await expect(sequencePage.page.getByText(testSequenceEntry.orf1a)).not.toBeVisible();
const testSequenceEntry = getTestSequences().testSequenceEntry;

await sequencePage.goto(testSequenceEntry);
await expect(sequencePage.page.getByText(testSequenceEntryData.orf1a)).not.toBeVisible();

await sequencePage.loadSequences();
await sequencePage.clickORF1aButton();

await expect(sequencePage.page.getByText(testSequenceEntry.orf1a, { exact: false })).toBeVisible();
await expect(sequencePage.page.getByText(testSequenceEntryData.orf1a, { exact: false })).toBeVisible();
});

test('check initial sequences and verify that banners are shown when revoked or revised', async ({
sequencePage,
}) => {
await sequencePage.goto(revokedSequenceEntry);
const testSequences = getTestSequences();

await sequencePage.goto(testSequences.revokedSequenceEntry);
await expect(sequencePage.page.getByText(`This sequence entry has been revoked!`)).toBeVisible();
await expect(sequencePage.notLatestVersionBanner).toBeVisible();

await sequencePage.goto(revocationSequenceEntry);
await sequencePage.goto(testSequences.revocationSequenceEntry);
await expect(sequencePage.revocationVersionBanner).toBeVisible();

await sequencePage.goto(deprecatedSequenceEntry);
await sequencePage.goto(testSequences.deprecatedSequenceEntry);
await expect(sequencePage.notLatestVersionBanner).toBeVisible();

await sequencePage.goto(revisedSequenceEntry);
await sequencePage.goto(testSequences.revisedSequenceEntry);
await expect(sequencePage.notLatestVersionBanner).not.toBeVisible();
});

test('can navigate to the versions page and click the link to the deprecated version', async ({ sequencePage }) => {
await sequencePage.goto(revisedSequenceEntry);
const testSequences = getTestSequences();

await sequencePage.goto(testSequences.revisedSequenceEntry);
await sequencePage.gotoAllVersions();
await expect(
sequencePage.page.getByText(`Versions for accession ${revisedSequenceEntry.accession}`),
sequencePage.page.getByText(`Versions for accession ${testSequences.revisedSequenceEntry.accession}`),
).toBeVisible();
await expect(sequencePage.page.getByText(`Latest version`)).toBeVisible();
await expect(sequencePage.page.getByText(`Revised`)).toBeVisible();

const deprecatedVersionString = getAccessionVersionString(deprecatedSequenceEntry);
const deprecatedVersionString = getAccessionVersionString(testSequences.deprecatedSequenceEntry);
const linkToDeprecatedVersion = sequencePage.page.getByRole('link', {
name: `${deprecatedVersionString}`,
});
Expand Down
9 changes: 5 additions & 4 deletions website/tests/pages/sequences/sequences.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ import { expect, type Locator, type Page } from '@playwright/test';
import { routes } from '../../../src/routes.ts';
import type { AccessionVersion } from '../../../src/types/backend.ts';
import { getAccessionVersionString } from '../../../src/utils/extractAccessionVersion.ts';
import { baseUrl, dummyOrganism, testSequenceEntry } from '../../e2e.fixture';
import { baseUrl, dummyOrganism } from '../../e2e.fixture';

export class SequencePage {
public readonly notLatestVersionBanner: Locator;
public readonly revocationVersionBanner: Locator;

private readonly loadButton: Locator;
private readonly allVersions: Locator;
private readonly orf1aButton: Locator;
readonly notLatestVersionBanner: Locator;
readonly revocationVersionBanner: Locator;

constructor(public readonly page: Page) {
this.loadButton = this.page.getByRole('button', { name: 'Load sequences' });
Expand All @@ -22,7 +23,7 @@ export class SequencePage {
this.revocationVersionBanner = this.page.getByText('This is a revocation version.');
}

public async goto(accessionVersion: AccessionVersion = testSequenceEntry) {
public async goto(accessionVersion: AccessionVersion) {
await this.page.goto(`${baseUrl}${routes.sequencesDetailsPage(dummyOrganism.key, accessionVersion)}`, {
waitUntil: 'networkidle',
});
Expand Down
2 changes: 0 additions & 2 deletions website/tests/pages/submit/submit.page.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import type { Locator, Page } from '@playwright/test';

import { routes } from '../../../src/routes.ts';
import { restrictedDataUseTermsType } from '../../../src/types/backend.ts';
import {
baseUrl,
compressedMetadataTestFile,
Expand All @@ -10,7 +9,6 @@ import {
metadataTestFile,
sequencesTestFile,
} from '../../e2e.fixture';
import { expect } from '../../e2e.fixture.ts';

export class SubmitPage {
public readonly submitButton: Locator;
Expand Down
Loading

0 comments on commit c961dca

Please sign in to comment.