Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion e2e_tests/api/server.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import GrafanaHelper from '@helpers/grafana.helper';
import { Timeouts } from '@helpers/timeouts';
import apiEndpoints from '@helpers/apiEndpoints';

interface PmmVersion {
export interface PmmVersion {
major: number;
minor: number;
patch: number;
Expand Down
30 changes: 21 additions & 9 deletions e2e_tests/fixtures/pmmTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ import SettingsPage from '@pages/ha/settings.page';
import HighAvailabilityPage from '@pages/ha/highAvailability.page';
import UpdatesPage from '@pages/updates.page';
import DownloadsPage from '@pages/downloads.page';
import { serverVersionBelow } from '@helpers/version.helper';
import ServerApi from '@api/server.api';
import { getServerVersion, serverVersionBelow } from '@helpers/version.helper';
import { minPmmVersion } from '@helpers/versionGates';

const pmmTest = base.extend<{
Expand All @@ -52,6 +53,7 @@ const pmmTest = base.extend<{
nodesPage: NodesPage;
realTimeAnalyticsPage: RealTimeAnalyticsPage;
vacuumDashboardPage: VacuumDashboard;
versionGate: undefined;
updatesPage: UpdatesPage;
downloadsPage: DownloadsPage;
}>({
Expand Down Expand Up @@ -168,14 +170,24 @@ const pmmTest = base.extend<{
await use(urlHelper);
},
vacuumDashboardPage: async ({ page }, use) => await use(new VacuumDashboard(page)),
});

pmmTest.beforeEach(async ({ api }, testInfo) => {
const testId = testInfo.title.match(/PMM-T\d+/)?.[0];
const minVersion = testId ? minPmmVersion[testId] : undefined;
if (!minVersion) return;

pmmTest.skip(serverVersionBelow(await api.serverApi.getPmmVersion(), minVersion), `Requires PMM Server ${minVersion}+`);
// Registering this as a beforeEach hook would only gate the first spec file that imports this
// module, since the module is evaluated once and the hook attaches to the file loading at that
// moment. An auto fixture applies to every test instead.
versionGate: [
async ({ request }, use, testInfo) => {
const testId = testInfo.title.match(/PMM-T\d+/)?.[0];
const minVersion = testId ? minPmmVersion[testId] : undefined;

if (minVersion) {
const version = await getServerVersion(new ServerApi(request));

testInfo.skip(serverVersionBelow(version, minVersion), `Requires PMM Server ${minVersion}+`);
}

await use(undefined);
},
{ auto: true },
],
});

export default pmmTest;
9 changes: 9 additions & 0 deletions e2e_tests/helpers/version.helper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
import ServerApi, { PmmVersion } from '@api/server.api';

let cachedVersion: Promise<PmmVersion> | undefined;

// One request per worker process: the promise is cached, so parallel tests share the same
// in-flight call instead of each hitting the server.
export const getServerVersion = (serverApi: ServerApi): Promise<PmmVersion> =>
(cachedVersion ??= serverApi.getPmmVersion());
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

export const serverVersionBelow = (
version: { major: number; minor: number; patch: number },
minVersion: string,
Expand Down
Loading