The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/e2e/various-suite/mysql.spec.ts

119 lines
4.4 KiB

import { e2e } from '../utils';
import datasetResponse from './fixtures/datasets-response.json';
import fieldsResponse from './fixtures/fields-response.json';
import tablesResponse from './fixtures/tables-response.json';
const tableNameWithSpecialCharacter = tablesResponse.results.tables.frames[0].data.values[0][1];
const normalTableName = tablesResponse.results.tables.frames[0].data.values[0][0];
describe('MySQL datasource', () => {
beforeEach(() => {
cy.intercept('POST', '/api/ds/query', (req) => {
if (req.body.queries[0].refId === 'datasets') {
req.alias = 'datasets';
req.reply({
body: datasetResponse,
});
} else if (req.body.queries[0].refId === 'tables') {
req.alias = 'tables';
req.reply({
body: tablesResponse,
});
} else if (req.body.queries[0].refId === 'fields') {
req.alias = 'fields';
req.reply({
body: fieldsResponse,
});
}
});
e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD'));
e2e.pages.Explore.visit();
e2e.components.DataSourcePicker.container().should('be.visible').type('gdev-mysql{enter}');
cy.wait('@datasets');
});
it('code editor autocomplete should handle table name escaping/quoting', () => {
cy.get("label[for^='option-code']").should('be.visible').click();
cy.get('textarea').type('S{downArrow}{enter}');
cy.wait('@tables');
cy.get('.suggest-widget').contains(tableNameWithSpecialCharacter).should('be.visible');
cy.get('textarea').type('{enter}');
cy.get('textarea').should('have.value', `SELECT FROM grafana.\`${tableNameWithSpecialCharacter}\``);
const deleteTimes = new Array(tableNameWithSpecialCharacter.length + 2).fill(
'{backspace}',
0,
tableNameWithSpecialCharacter.length + 2
);
cy.get('textarea').type(deleteTimes.join(''));
const commandKey = Cypress.platform === 'darwin' ? '{command}' : '{ctrl}';
cy.get('textarea').type(`${commandKey}i`);
cy.get('.suggest-widget').contains(tableNameWithSpecialCharacter).should('be.visible');
cy.get('textarea').type('S{downArrow}{enter}');
cy.get('textarea').should('have.value', `SELECT FROM grafana.${normalTableName}`);
cy.get('textarea').type('.');
cy.get('.suggest-widget').contains('No suggestions.').should('be.visible');
});
describe('visual query builder', () => {
it('should be able to add timeFilter macro', () => {
cy.get("[aria-label='Table selector']").should('be.visible').click();
selectOption(normalTableName);
// Open column selector
cy.get("[id^='select-column-0']").should('be.visible').click();
selectOption('createdAt');
// Toggle where row
cy.get("label[for^='sql-filter']").last().should('be.visible').click();
// Click add filter button
cy.get('button[title="Add filter"]').should('be.visible').click();
cy.get('button[title="Add filter"]').should('be.visible').click(); // For some reason we need to click twice
// Open field selector
cy.get("[aria-label='Field']").should('be.visible').click();
selectOption('createdAt');
// Open operator selector
cy.get("[aria-label='Operator']").should('be.visible').click();
selectOption('Macros');
// Open macros value selector
cy.get("[aria-label='Macros value selector']").should('be.visible').click();
selectOption('timeFilter');
// Validate that the timeFilter macro was added
e2e.components.CodeEditor.container()
.get('textarea')
.should(
'have.value',
`SELECT\n createdAt\nFROM\n DataMaker.normalTable\nWHERE\n $__timeFilter(createdAt)\nLIMIT\n 50`
);
// Validate that the timeFilter macro was removed when changed to equals operator
// For some reason the input is not visible the second time so we need to force the click
cy.get("[aria-label='Operator']").click({ force: true });
selectOption('==');
e2e.components.DateTimePicker.input().should('be.visible').click().blur();
e2e.components.CodeEditor.container()
.get('textarea')
.should(
'not.have.value',
`SELECT\n createdAt\nFROM\n DataMaker.normalTable\nWHERE\n $__timeFilter(createdAt)\nLIMIT\n 50`
);
});
});
});
function selectOption(option: string) {
cy.get("[aria-label='Select option']").contains(option).should('be.visible').click();
}