Skip to content

Commit

Permalink
use grafana api client instead of logged in user
Browse files Browse the repository at this point in the history
  • Loading branch information
sunker committed Oct 10, 2024
1 parent cc79851 commit 2f8f99c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
22 changes: 8 additions & 14 deletions packages/plugin-e2e/src/fixtures/commands/createDataSource.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,27 @@
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<DataSourceSettings>,
PlaywrightArgs
>;

export const createDataSourceViaAPI = async (
request: APIRequestContext,
grafanaAPIClient: GrafanaAPIClient,
datasource: CreateDataSourceArgs
): Promise<DataSourceSettings> => {
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) {
Expand All @@ -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);
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ type CreateDataSourceConfigPageFixture = TestFixture<
>;

export const createDataSourceConfigPage: CreateDataSourceConfigPageFixture = async (
{ request, page, selectors, grafanaVersion },
{ request, page, selectors, grafanaVersion, grafanaAPIClient },
use,
testInfo
) => {
let datasourceConfigPage: DataSourceConfigPage | undefined;
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;
Expand Down
21 changes: 20 additions & 1 deletion packages/plugin-e2e/src/models/GrafanaAPIClient.ts
Original file line number Diff line number Diff line change
@@ -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) {}
Expand Down Expand Up @@ -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}`);
}
}

0 comments on commit 2f8f99c

Please sign in to comment.