From 2f8f99c198052c5765ba37c470f5f7ec36d17fc3 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 10 Oct 2024 14:11:27 +0100 Subject: [PATCH] use grafana api client instead of logged in user --- .../src/fixtures/commands/createDataSource.ts | 22 +++++++------------ .../commands/createDataSourceConfigPage.ts | 4 ++-- .../plugin-e2e/src/models/GrafanaAPIClient.ts | 21 +++++++++++++++++- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/plugin-e2e/src/fixtures/commands/createDataSource.ts b/packages/plugin-e2e/src/fixtures/commands/createDataSource.ts index aef2e742d..642bc7f07 100644 --- a/packages/plugin-e2e/src/fixtures/commands/createDataSource.ts +++ b/packages/plugin-e2e/src/fixtures/commands/createDataSource.ts @@ -1,6 +1,7 @@ import { v4 as uuidv4 } from 'uuid'; -import { APIRequestContext, expect, TestFixture } from '@playwright/test'; +import { expect, TestFixture } from '@playwright/test'; import { CreateDataSourceArgs, DataSourceSettings, PlaywrightArgs } from '../../types'; +import { GrafanaAPIClient } from '../../models/GrafanaAPIClient'; type CreateDataSourceViaAPIFixture = TestFixture< (args: CreateDataSourceArgs) => Promise, @@ -8,26 +9,19 @@ type CreateDataSourceViaAPIFixture = TestFixture< >; export const createDataSourceViaAPI = async ( - request: APIRequestContext, + grafanaAPIClient: GrafanaAPIClient, datasource: CreateDataSourceArgs ): Promise => { const { type, name } = datasource; const dsName = name ?? `${type}-${uuidv4()}`; - const existingDataSource = await request.get(`/api/datasources/name/${dsName}`); + const existingDataSource = await grafanaAPIClient.getDataSourceByName(`/api/datasources/name/${dsName}`); if (await existingDataSource.ok()) { const json = await existingDataSource.json(); - await request.delete(`/api/datasources/uid/${json.uid}`); + await grafanaAPIClient.deleteDataSourceByUID(json.uid); } - const createDsReq = await request.post('/api/datasources', { - data: { - ...datasource, - name: dsName, - access: 'proxy', - isDefault: false, - }, - }); + const createDsReq = await grafanaAPIClient.createDataSource(datasource, dsName); const text = await createDsReq.text(); const status = await createDsReq.status(); if (status === 200) { @@ -38,8 +32,8 @@ export const createDataSourceViaAPI = async ( return existingDataSource.json(); }; -export const createDataSource: CreateDataSourceViaAPIFixture = async ({ request }, use) => { +export const createDataSource: CreateDataSourceViaAPIFixture = async ({ grafanaAPIClient }, use) => { await use(async (args) => { - return createDataSourceViaAPI(request, args); + return createDataSourceViaAPI(grafanaAPIClient, args); }); }; diff --git a/packages/plugin-e2e/src/fixtures/commands/createDataSourceConfigPage.ts b/packages/plugin-e2e/src/fixtures/commands/createDataSourceConfigPage.ts index 289d4e044..df8cb1051 100644 --- a/packages/plugin-e2e/src/fixtures/commands/createDataSourceConfigPage.ts +++ b/packages/plugin-e2e/src/fixtures/commands/createDataSourceConfigPage.ts @@ -9,7 +9,7 @@ type CreateDataSourceConfigPageFixture = TestFixture< >; export const createDataSourceConfigPage: CreateDataSourceConfigPageFixture = async ( - { request, page, selectors, grafanaVersion }, + { request, page, selectors, grafanaVersion, grafanaAPIClient }, use, testInfo ) => { @@ -17,7 +17,7 @@ export const createDataSourceConfigPage: CreateDataSourceConfigPageFixture = asy let deleteDataSource = true; await use(async (args) => { deleteDataSource = args.deleteDataSourceAfterTest ?? true; - const datasource = await createDataSourceViaAPI(request, args); + const datasource = await createDataSourceViaAPI(grafanaAPIClient, args); datasourceConfigPage = new DataSourceConfigPage({ page, selectors, grafanaVersion, request, testInfo }, datasource); await datasourceConfigPage.goto(); return datasourceConfigPage; diff --git a/packages/plugin-e2e/src/models/GrafanaAPIClient.ts b/packages/plugin-e2e/src/models/GrafanaAPIClient.ts index 47f859b72..6b4e70467 100644 --- a/packages/plugin-e2e/src/models/GrafanaAPIClient.ts +++ b/packages/plugin-e2e/src/models/GrafanaAPIClient.ts @@ -1,5 +1,5 @@ import { APIRequestContext } from '@playwright/test'; -import { DataSourceSettings, User } from '../types'; +import { CreateDataSourceArgs, DataSourceSettings, User } from '../types'; export class GrafanaAPIClient { constructor(private request: APIRequestContext) {} @@ -53,4 +53,23 @@ export class GrafanaAPIClient { const settings: DataSourceSettings = await response.json(); return settings; } + + async createDataSource(datasource: CreateDataSourceArgs, dsName: string) { + return this.request.post('/api/datasources', { + data: { + ...datasource, + name: dsName, + access: 'proxy', + isDefault: false, + }, + }); + } + + async getDataSourceByName(name: string) { + return this.request.get(`/api/datasources/name/${name}`); + } + + async deleteDataSourceByUID(uid: string) { + return this.request.delete(`/api/datasources/uid/${uid}`); + } }