mirror of
https://github.com/grafana/grafana.git
synced 2024-11-25 02:10:45 -06:00
ac27fea5bc
* Sandbox: initial dummy datasource plugin for e2e * WIP: tests * Add metrics to plugin.json so it shows up in explore * Fix false positives in frontend-sandbox-datasource.spec.ts * Change typed name to be static * Add code to delete the datasource after tests are complete * Add fail on status code * Update tests for more config * Replace visit with existing page * Delete cleanup code
146 lines
5.6 KiB
TypeScript
146 lines
5.6 KiB
TypeScript
import { random } from 'lodash';
|
|
|
|
import { e2e } from '../utils';
|
|
|
|
const DATASOURCE_ID = 'sandbox-test-datasource';
|
|
let DATASOURCE_CONNECTION_ID = '';
|
|
const DATASOURCE_TYPED_NAME = 'SandboxDatasourceInstance';
|
|
|
|
describe('Datasource sandbox', () => {
|
|
before(() => {
|
|
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'), true);
|
|
|
|
e2e.pages.AddDataSource.visit();
|
|
e2e.pages.AddDataSource.dataSourcePluginsV2('Sandbox datasource test plugin')
|
|
.scrollIntoView()
|
|
.should('be.visible') // prevents flakiness
|
|
.click();
|
|
e2e.pages.DataSource.name().clear();
|
|
e2e.pages.DataSource.name().type(DATASOURCE_TYPED_NAME);
|
|
e2e.pages.DataSource.saveAndTest().click();
|
|
cy.url().then((url) => {
|
|
const split = url.split('/');
|
|
DATASOURCE_CONNECTION_ID = split[split.length - 1];
|
|
});
|
|
});
|
|
beforeEach(() => {
|
|
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'), true);
|
|
});
|
|
|
|
describe('Config Editor', () => {
|
|
describe('Sandbox disabled', () => {
|
|
beforeEach(() => {
|
|
cy.window().then((win) => {
|
|
win.localStorage.setItem('grafana.featureToggles', 'pluginsFrontendSandbox=0');
|
|
});
|
|
});
|
|
it('Should not render a sandbox wrapper around the datasource config editor', () => {
|
|
e2e.pages.EditDataSource.visit(DATASOURCE_CONNECTION_ID);
|
|
cy.wait(300); // wait to prevent false positives because cypress checks too fast
|
|
cy.get(`div[data-plugin-sandbox="${DATASOURCE_ID}"]`).should('not.exist');
|
|
});
|
|
});
|
|
|
|
describe('Sandbox enabled', () => {
|
|
beforeEach(() => {
|
|
cy.window().then((win) => {
|
|
win.localStorage.setItem('grafana.featureToggles', 'pluginsFrontendSandbox=1');
|
|
});
|
|
});
|
|
|
|
it('Should render a sandbox wrapper around the datasource config editor', () => {
|
|
e2e.pages.EditDataSource.visit(DATASOURCE_CONNECTION_ID);
|
|
cy.get(`div[data-plugin-sandbox="${DATASOURCE_ID}"]`).should('exist');
|
|
});
|
|
|
|
it('Should store values in jsonData and secureJsonData correctly', () => {
|
|
e2e.pages.EditDataSource.visit(DATASOURCE_CONNECTION_ID);
|
|
|
|
const valueToStore = 'test' + random(100);
|
|
|
|
cy.get('[data-testid="sandbox-config-editor-query-input"]').should('not.be.disabled');
|
|
cy.get('[data-testid="sandbox-config-editor-query-input"]').type(valueToStore);
|
|
cy.get('[data-testid="sandbox-config-editor-query-input"]').should('have.value', valueToStore);
|
|
|
|
e2e.pages.DataSource.saveAndTest().click();
|
|
e2e.pages.DataSource.alert().should('exist').contains('Sandbox Success', {});
|
|
|
|
// validate the value was stored
|
|
e2e.pages.EditDataSource.visit(DATASOURCE_CONNECTION_ID);
|
|
cy.get('[data-testid="sandbox-config-editor-query-input"]').should('not.be.disabled');
|
|
cy.get('[data-testid="sandbox-config-editor-query-input"]').should('have.value', valueToStore);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Explore Page', () => {
|
|
describe('Sandbox disabled', () => {
|
|
beforeEach(() => {
|
|
cy.window().then((win) => {
|
|
win.localStorage.setItem('grafana.featureToggles', 'pluginsFrontendSandbox=0');
|
|
});
|
|
});
|
|
|
|
it('Should not wrap the query editor in a sandbox wrapper', () => {
|
|
e2e.pages.Explore.visit();
|
|
e2e.components.DataSourcePicker.container().should('be.visible').click();
|
|
cy.contains(DATASOURCE_TYPED_NAME).scrollIntoView().should('be.visible').click();
|
|
|
|
cy.wait(300); // wait to prevent false positives because cypress checks too fast
|
|
cy.get(`div[data-plugin-sandbox="${DATASOURCE_ID}"]`).should('not.exist');
|
|
});
|
|
|
|
it('Should accept values when typed', () => {
|
|
e2e.pages.Explore.visit();
|
|
e2e.components.DataSourcePicker.container().should('be.visible').click();
|
|
cy.contains(DATASOURCE_TYPED_NAME).scrollIntoView().should('be.visible').click();
|
|
|
|
const valueToType = 'test' + random(100);
|
|
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').should('not.be.disabled');
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').type(valueToType);
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').should('have.value', valueToType);
|
|
});
|
|
});
|
|
|
|
describe('Sandbox enabled', () => {
|
|
beforeEach(() => {
|
|
cy.window().then((win) => {
|
|
win.localStorage.setItem('grafana.featureToggles', 'pluginsFrontendSandbox=1');
|
|
});
|
|
});
|
|
|
|
it('Should wrap the query editor in a sandbox wrapper', () => {
|
|
e2e.pages.Explore.visit();
|
|
e2e.components.DataSourcePicker.container().should('be.visible').click();
|
|
cy.contains(DATASOURCE_TYPED_NAME).scrollIntoView().should('be.visible').click();
|
|
|
|
cy.get(`div[data-plugin-sandbox="${DATASOURCE_ID}"]`).should('exist');
|
|
});
|
|
|
|
it('Should accept values when typed', () => {
|
|
e2e.pages.Explore.visit();
|
|
e2e.components.DataSourcePicker.container().should('be.visible').click();
|
|
cy.contains(DATASOURCE_TYPED_NAME).scrollIntoView().should('be.visible').click();
|
|
|
|
const valueToType = 'test' + random(100);
|
|
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').should('not.be.disabled');
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').type(valueToType);
|
|
cy.get('[data-testid="sandbox-query-editor-query-input"]').should('have.value', valueToType);
|
|
|
|
// typing the query editor should reflect in the url
|
|
cy.url().should('include', valueToType);
|
|
});
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
e2e.flows.revertAllChanges();
|
|
});
|
|
|
|
after(() => {
|
|
cy.clearCookies();
|
|
});
|
|
});
|