test: add unflattened testcase and POM (#4905)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced a new `UnflattenedPage` class for structured UI
interactions in tests.
	- Added functionality to toggle quick mode in the testing framework.

- **Bug Fixes**
- Improved error handling and visibility assertions in various test
cases.

- **Documentation**
- Enhanced comments and code formatting for better readability and
maintainability.

- **Refactor**
- Restructured test cases to utilize the `UnflattenedPage` object,
promoting a page object model for improved code organization.
	- Updated test configurations for better clarity and consistency.

- **Chores**
- Removed several outdated test files related to dashboard and logging
functionalities, streamlining the test suite.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Neha P
2024-10-24 19:50:33 +05:30
committed by GitHub
parent 56dcacb513
commit 5bb3baad92
19 changed files with 336 additions and 6601 deletions
@@ -1,292 +0,0 @@
import { getTestId, getRandomText } from "../utils";
import logData from "../../fixtures/log.json";
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
const showHistogramToggle = getTestId(
"logs-search-bar-show-histogram-toggle-btn"
);
const showSQLModeHistogramToggle = getTestId(
"logs-search-bar-show-histogram-toggle-sqlmode-btn"
);
const logsSearchBarChart = getTestId("logs-search-result-bar-chart");
const vrlFunctionEditor = getTestId("logs-vrl-function-editor");
const searchBarSqlModeButton = getTestId("logs-search-bar-sql-mode-toggle-btn");
const logsSearchQueryToggle = getTestId(
"logs-search-bar-show-query-toggle-btn"
);
const queryEditor = getTestId("logs-search-bar-query-editor");
const saveFunctionDropdown = getTestId("logs-search-bar-function-dropdown")
const vrlQueryToggle = getTestId("logs-search-bar-show-query-toggle-btn")
const functionNameField = getTestId("saved-function-name-input")
const savedViewDialogButton = getTestId("saved-view-dialog-save-btn")
const functionsViaMenu = getTestId("menu-link-/functions-item")
const function_delete_confirm = getTestId("confirm-button")
const firstVrlEditor = `${vrlFunctionEditor}:first`
const LOGS_SEARCH_EXPAND = `[data-test="log-search-expand-${logData.expandedFieldValue.field}-field-btn]`;
const SAVED_FUNCTION_BUTTON = `${saveFunctionDropdown} > .q-btn-dropdown--current > .q-btn__content > :nth-child(1)`
const NOTIFICATION_MESSAGE = ".q-notification__message"
const DELETE_FUNCTION = '[title="Delete Function"]'
/** Verify if histogram toggle button is clicked */
export function clickHistogramToggle() {
cy.get(showHistogramToggle, { timeout: 2000 }).click({ force: true });
}
/** Verify if the chart is hidden */
export function confirmLogsSearchHidden() {
cy.get(logsSearchBarChart, { timeout: 2000 }).should("not.exist",{ timeout: 10000, interval: 1000 });
}
/** Verify if vrl function editor is visible */
export function displayVrlFunctionEditor() {
cy.get(vrlFunctionEditor, { timeout: 2000 }).should("be.visible");
}
/** Verify if logs search query toggle is clicked*/
export function clickSearchBarSqlMode() {
cy.get(searchBarSqlModeButton, { timeout: 2000 })
.eq(0)
.click({ force: true });
}
/** Verify if logs search query toggle is clicked*/
export function clickLogsSearchQueryToggle() {
cy.get(logsSearchQueryToggle, { timeout: 2000 }).click({ force: true });
}
/** Verify if the vrl function editor is hidden */
export function vrlFunctionEditorHidden() {
cy.get(vrlFunctionEditor, { timeout: 2000 }).should("be.hidden");
}
/** Verify if the vrl function editor is hidden */
export function histogramToggleDisabled() {
cy.get(showSQLModeHistogramToggle, { timeout: 2000 }).should(
"have.attr",
"aria-disabled",
"true"
);
}
export function histogramToggleEnabled() {
cy.get(showSQLModeHistogramToggle, { timeout: 2000 }).should(
"not.have.attr",
"aria-disabled",
"true"
);
}
//** Type the value of a variable into an input field*/
export function enterVrlFunctionvalue() {
cy.get('[data-test="logs-vrl-function-editor"]:first', { timeout: 2000 })
.click()
.type(logData.vrlFunctionValue);
}
//** Verify that the input field no longer has the attribute "data-test" with the value of the variable */
export function attributeToNotHaveVrlFunctionvalue() {
cy.get(vrlFunctionEditor, { timeout: 2000 }).should(
"not.have.attr",
"data-test",
logData.vrlFunctionValue
);
}
//** Verify that the input field no longer has the attribute "data-test" with the value of the variable */
export function expandLogsSearch() {
cy.get(
`[data-test="log-search-expand-${logData.expandedFieldValue.field}-field-btn"]`,
{ timeout: 2000 }
).trigger("mouseover", { force: true });
}
//** Verify that the input field no longer has the attribute "data-test" with the value of the variable */
export function verifyLogsStatusCode() {
cy.get(
`[data-test="log-search-expand-${logData.expandedFieldValue.field}-field-btn"]`,
{ timeout: 2000 }
).click({ force: true });
}
// get the value of the field name
export function clickValueEditor() {
cy.get(
`[data-test="log-search-expand-${logData.addEditorFieldValue.field}-field-btn"]`,
{ timeout: 2000 }
).trigger("mouseover", { force: true });
}
// ** click on the + button on expanded view/
export function clickExpandedViewplusButton() {
cy.get(
`[data-test="log-search-expand-${logData.addEditorFieldValue.field}-field-btn"] [data-test="log-search-index-list-filter-${logData.addEditorFieldValue.field}-field-btn"]`,
{ timeout: 2000 }
).click({ force: true });
}
//** Verify that a value is added under query editor */
export function addValueInQueryEditor() {
cy.get(queryEditor, { timeout: 2000 }).type(
`{backspace}${logData.addEditorFieldValue.value}'`
);
}
//** Verify that a value is added under query editor */
export function verifyAddedValue() {
cy.get(queryEditor).then((editor) => {
let text = editor.text();
const expectedString = `${logData.addEditorFieldValue.field}='${logData.addEditorFieldValue.value},'`;
text = removeUTFCharacters(text);
expect(text.includes(expectedString)).to.be.false;
});
}
//** add second value in query */
export function addMoreValueQueryEditor() {
cy.get(
`[data-test="log-search-expand-${logData.addEditorFieldValue.field1}-field-btn"] [data-test="log-search-index-list-filter-${logData.addEditorFieldValue.field1}-field-btn"]`,
{ timeout: 3000 }
).click({ force: true });
}
//** Verify if value is added on the editor when = is clicked*/
export function addSecondValues() {
cy.get(queryEditor, { timeout: 2000 }).type(
`{backspace}${logData.addEditorFieldValue.value1}'`
);
}
//** Verify if value is added on the editor when = is clicked*/
export function valueAddedInSqlMode() {
cy.get(queryEditor, { timeout: 2000 }).then((editor) => {
let text = editor.text();
const expectedString = `${logData.addEditorFieldValue.field}='${logData.addEditorFieldValue.value}' and ${logData.addEditorFieldValue.field1}='${logData.addEditorFieldValue.value1}'`;
text = removeUTFCharacters(text);
expect(text.includes(expectedString)).to.be.true;
});
}
//** Verify if add value field is clicked*/
export function addFeildandSubValue() {
cy.get(
`[data-test="log-search-expand-${logData.addFieldAndSubFieldValueWithEqual.field}-field-btn"]`
).click({ force: true });
}
export function addsubFieldValue() {
cy.get(
`[data-test="logs-search-subfield-add-${logData.addFieldAndSubFieldValueWithEqual.field}-${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}"] `
).trigger("mouseover", { force: true });
}
export function clickFieldSubvalue() {
cy.get(
`[data-test="logs-search-subfield-add-${logData.addFieldAndSubFieldValueWithEqual.field}-${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}"] [data-test="log-search-subfield-list-equal-${logData.addFieldAndSubFieldValueWithEqual.field}-field-btn"]`
).click({ force: true });
}
//** Verify if value is added on the editor when = is clicked*/
export function valueAddedOnPlusClick() {
cy.get('[data-test="logs-search-bar-query-editor"]').then((editor) => {
let text = editor.text();
expect(
text.includes(
`${logData.addFieldAndSubFieldValueWithEqual.field}='${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}'`
)
).to.be.true;
});
}
//** Verify if value is added on the editor when = is clicked*/
export function clickOnFirstField() {
cy.get(
`[data-test="log-search-expand-${logData.addFieldAndSubFieldValueWithEqual.field1}-field-btn"]`
).click({ force: true });
}
// //** Verify if value is added on the editor when = is clicked*/
export function addSecondFieldOnEditor() {
cy.get(
`[data-test="logs-search-subfield-add-${logData.addFieldAndSubFieldValueWithEqual.field}-${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}"] `
).trigger("mouseover", { force: true });
}
export function clickOnEqualToButton() {
cy.get(
`[data-test="logs-search-subfield-add-${logData.addFieldAndSubFieldValueWithEqual.field}-${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}"] [data-test="log-search-subfield-list-equal-${logData.addFieldAndSubFieldValueWithEqual.field}-field-btn"]`
).click({ force: true });
}
//**assertion for added both field value is added on the editor when = is clicked*/
export function bothFieldAddedOnEqualToClick() {
cy.get('[data-test="logs-search-bar-query-editor"]').then((editor) => {
let text = editor.text();
const expectedString = `${logData.addFieldAndSubFieldValueWithEqual.field}='${logData.addFieldAndSubFieldValueWithEqual.subFieldValue}' and ${logData.addFieldAndSubFieldValueWithEqual.field1}='${logData.addFieldAndSubFieldValueWithEqual.subFieldValue1}'`;
text = removeUTFCharacters(text);
expect(text.includes(expectedString)).to.be.false;
});
}
export function clickSaveFunctionButton() {
cy.get(SAVED_FUNCTION_BUTTON,{timeout:2000}).click({ force: true });
}
export function clickVrlQueryToggle() {
cy.get(vrlQueryToggle,{timeout:2000}).click({ force: true });
}
export function enterTextVrlQueryEditor(vrlQueryText) {
cy.get(firstVrlEditor,{timeout:2000}).type(vrlQueryText)
}
export function noFunctionFoundMessage() {
cy.get(NOTIFICATION_MESSAGE,{timeout:2000})
.should('be.visible')
.contains('No function definition found')
}
export function enterFunctionName(functiontext) {
cy.get(functionNameField,{timeout:2000}).type(functiontext)
}
export function clickSavedOkButton() {
cy.get(savedViewDialogButton,{timeout:2000}).click({ force: true });
}
export function clickFunctionsViaMenu() {
cy.get(functionsViaMenu,{timeout:2000}).click({ force: true });
}
export function deleteCreatedFunction() {
cy.get(DELETE_FUNCTION,{timeout:2000}).click({ multiple: true });
}
export function confirmFunctionDeleteButton() {
cy.get(function_delete_confirm,{timeout:2000}).click({ force: true });
}
@@ -1,17 +0,0 @@
import { getTestId, getRandomText } from "../utils";
import logData from "../../fixtures/log.json";
const showHistogramToggle = getTestId(
"logs-search-bar-show-histogram-toggle-btn"
);
const queryEditor = getTestId("query-editor");
const LOGS_SEARCH_EXPAND = `[data-test="log-search-expand-${logData.expandedFieldValue.field}-field-btn]`;
const MENU = ('q-drawer__content > .q-list')
export function menuDisplayed() {
cy.get(MENU, { timeout: 2000 }).should('be.visible');
}
@@ -1,74 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../support/commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
let dashboardName;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Generate a random number
const randomNumber = getRandomInt(1000, 9999);
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
beforeEach(() => {
cy.login();
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 3000 }).should("be.visible");
});
it("Add dashboard", () => {
// Create dynamic dashboard name
dashboardName = `${dashboardData.DashboardName}_${randomNumber}`;
console.log("==dashboardName==", dashboardName);
cy.get('[data-test="dashboard-add"]').click();
cy.get('[data-test="dashboard-name"]').type(dashboardName);
cy.get('[data-test="dashboard-add-submit"]').click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it("Delete dashboard", () => {
// find the dashboard name and click on the delete dashboard button. We can see that confirm dialog and click on cancel button
cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
.siblings() // gives you all the other cells in the row
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click();
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="cancel-button"]').click(); // click on the cancel button
cy.reload(); // reload the window
cy.get('[data-test="dashboard-table"] td').should(
"contain",
dashboardName
);
// find the dashboard name and click on the delete dashboard button. we cab see the confirm dialog and click on the confirm button
cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
.siblings() // gives you all the other cells in the row
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click();
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="confirm-button"]').click(); // click on the confirm button
cy.wait(1000)
cy.reload(); // reload the window
cy.get('[data-test="dashboard-table"] td').should(
"not.contain",
dashboardName
); // check that the dashboard is not available
});
})
@@ -1,662 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../support/commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
beforeEach(() => {
// cy.origin(Cypress.env('CYPRESS_BASEURL'),{args:{dashboardData}},({dashboardData})=>
// {
cy.login();
cy.wait(4000);
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
// cy.wait(2000)
// cy.get('[data-test="menu-link-/dashboards-item"]').click();
// .contains(dashboardData.ModuleDashboard)
cy.get("table.q-table", { timeout: 3000 }).should("be.visible");
// })
});
it("Add dashboard", () => {
cy.addDashboard();
});
it("Add area chart panel", () => {
cy.addAreaChartPanel();
});
it("Add panel errors without fields", () => {
cy.addDashboardPanel();
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-error"]').should("exist");
});
it("drag and drop element", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.XAxisValue1);
// Get the draggable element
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-${dashboardData.fields.XAxisValue1}"] [data-test="dashboard-add-data-indicator"]`
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-x-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
//cy.wait(5000);
cy.get('[data-test="dashboard-x-layout"]').should("contain", "_timestamp");
//---------------------------------------------------------
// Get the draggable element
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.YAxisValue2);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-${dashboardData.fields.YAxisValue2}"] [data-test="dashboard-add-data-indicator"]`
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-y-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
//cy.wait(3000);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.fields.YAxisValue2
);
cy.addAndSavePanel();
});
it("Verify query generation on the when fields are added and removed from axis", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}-remove"]`
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue2
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue2}-remove"]`
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.get('[data-test="dashboard-query-data"]').click();
cy.wait(5000);
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
console.log(text, "text");
text = removeUTFCharacters(text);
console.log(text);
console.log(dashboardData.QueryValue);
expect(text.includes(dashboardData.QueryValue)).to.be.true;
});
// cy.get('[data-test="dashboard-panel-query-editor"]').should(
// "have.value",
// dashboardData.QueryValue
// )
});
it("should update the chart when field configurations are updated including filters", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}"]`
).click();
// Click to open the inner dropdown
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}-menu"]`
).within(() => {
cy.get('[data-test="dashboard-x-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Histogram").click();
// change the label value
cy.get('[data-test="dashboard-x-item-input"]').clear().type("X-value");
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-x-item-input"]').should(
"have.value",
"X-value"
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
// add y drop down value
cy.get(
`[data-test="dashboard-y-item-${dashboardData.fields.YAxisValue1}"]`
).click();
// Click to open the inner dropdown
cy.get(
`[data-test="dashboard-y-item-${dashboardData.fields.YAxisValue1}-menu"]`
).within(() => {
cy.get('[data-test="dashboard-y-item-dropdown"]')
.children()
.first()
.should("have.text", "Count");
cy.get('[data-test="dashboard-y-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Sum").click();
// change the label value
cy.get('[data-test="dashboard-y-item-input"]').clear().type("Y-value");
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-y-item-input"]').should(
"have.value",
"Y-value"
);
// change the color picker color
cy.get('[data-test="dashboard-y-item-color"]').click();
cy.wait(1000);
// Set the color value in the color picker dialog
cy.get('input[type="color"]').invoke("val", "#ff0000").trigger("input");
// Close the color picker dialog (optional, if needed)
// cy.get('input[type="color"]').blur();
//Assert that input field color has the updated value
cy.get('[data-test="dashboard-y-item-color"]').should(
"have.value",
"#ff0000"
);
cy.addFieldToAxis(
fieldType.F,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.FilterValue1
);
cy.get(
`[data-test="dashboard-filter-item-${dashboardData.fields.FilterValue1}"]`
).click();
cy.get(
`[data-test="dashboard-filter-item-${dashboardData.fields.FilterValue1}-menu"] .q-tab[data-test="dashboard-filter-list-tab"]`
).click();
// get the dropdown value
cy.get(
'[data-test="dashboard-filter-list-panel"] [data-test="dashboard-filter-list-dropdown"]'
).click();
// select check box value
cy.get("div.q-item__section")
.contains(dashboardData.FilterDropdownValue)
.as("filter-checkbox");
cy.get("@filter-checkbox").click({ force: true });
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.get('[data-test="dashboard-apply"]').click();
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.wait("@search", { timeout: 3000 })
.its("response.statusCode")
.should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
cy.get("#chart1").should("exist").and("be.visible");
cy.get("[data-test='dashboard-x-label']").should(
"contain",
dashboardData.filterLabel.XLabel
);
cy.get("[data-test='dashboard-y-label']").should(
"contain",
dashboardData.filterLabel.YLabel
);
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
// console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
const expectedString = dashboardData.FilterQueryValue;
// console.log(expectedString, "expectedString");
expect(text.includes(expectedString)).to.be.true;
});
});
it("should update the value automatically when trying to save the chart after switching from the auto to custom mode", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
// check for the auto field generated
cy.get('[data-test="dashboard-auto"]');
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.get('[data-test="dashboard-panel-query-editor"]').should("exist");
cy.wait(5000);
cy.get('[data-test="dashboard-query-data"]').click({ force: true });
// assertion for value is added on the editor when = is clicked
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
const expectedString = dashboardData.QueryValue;
console.log(expectedString, "expectedString");
expect(text.includes(expectedString)).to.be.true;
});
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// Assertion for field is automatically on the x-axis and y-axis layout
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.customQueryValue.field1
);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.customQueryValue.field2
);
// cy.get('[data-test="dashboard-query-data"]').click({force:true});
cy.get('[data-test="dashboard-panel-query-editor"]')
.contains(dashboardData.customQueryValue.field1) // Find the specific word within the editor
.click({ force: true })
.wait(100)
.type(`{ctrl+d}{ctrl+d}{ctrl+d}${dashboardData.addCustomQueryValue.field1}`, { force: true }); // Select the desired text
// cy.get('[data-test="dashboard-x-layout"]').should(
// "contain",
// dashboardData.addCustomQueryValue.field1
// );
const updatedQuery = `SELECT histogram(_timestamp) as "${dashboardData.addCustomQueryValue.field1}", count(code) as "${dashboardData.customQueryValue.field2}" FROM "default" GROUP BY ${dashboardData.addCustomQueryValue.field1} ORDER BY ${dashboardData.addCustomQueryValue.field1}`;
// console.log(updatedQuery);
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]').should(
"contain",
updatedQuery
);
cy.wait("@search", { timeout: 5000 }).then(({ response }) => {
expect(response.statusCode).to.eq(200);
expect(response.body.hits).to.be.an("array");
});
cy.get("#chart1").should("exist").and("be.visible");
cy.get("[data-test='dashboard-x-label']").should(
"contain",
dashboardData.XLabel
);
cy.get("[data-test='dashboard-y-label']").should(
"contain",
dashboardData.YLabel
);
});
// it("should be able to generate chart with custom query mode after switching from the auto mode", () => {
// cy.addDashboardPanel();
// cy.get(
// `[data-test="selected-chart-${dashboardData.ChartType}-item"]`
// ).click();
// // check for the auto field generated
// cy.get('[data-test="dashboard-auto"]');
// cy.selectStream(dashboardData.Stream);
// cy.addFieldToAxis(
// fieldType.X,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.XAxisValue1
// );
// cy.addFieldToAxis(
// fieldType.Y,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.YAxisValue1
// );
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
// // check for the custom sql button
// cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]')
// .click()
// .type("{selectall}{backspace}")
// .type(dashboardData.QueryValue);
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
// ).trigger("mouseover");
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
// ).click();
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
// ).click();
// cy.addAndSavePanel();
// });
it("should clear the field after switch from custom to auto mode", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({force:true});
cy.get('[data-test="dashboard-panel-query-editor"]').type(
dashboardData.QueryValue
);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.get("[data-test='dashboard-auto']").click();
cy.get('[data-test="dialog-box"]').should("be.visible");
//check for the popup cancel button
cy.get('[data-test="cancel-button"]').click();
cy.get('[data-test="dashboard-auto"]').click();
// cy.wait(4000);
// check for the popup confirm button
cy.get('[data-test="confirm-button"]').click();
cy.get('[data-test="dashboard-panel-searchbar"]').should("be.visible");
cy.get('[data-test="dashboard-panel-query-editor"]').should(
"have.value",
""
);
// Assertion for the clear value in the x and y layout
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field1}']`
).should("not.exist");
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field2}']`
).should("not.exist");
});
it("should be able to generate chart with the custom query mode", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// // cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({ force: true });
cy.get('[data-test="dashboard-panel-query-editor"]').type(
dashboardData.QueryValue
);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.addAndSavePanel();
});
it("should display error when add new chartype with existing chart type value", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue2
);
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType2}-item"]`
).click();
cy.get('[data-test="dashboard-panel-name"]').type(
dashboardData.DashboardPanelName
);
cy.get('[data-test="dashboard-panel-save"]').click();
cy.get('[data-test="dashboard-error"] ul > li')
.contains("Only one values field is allowed for donut and pie charts")
.should("exist");
});
it("Delete dashboard", () => {
cy.get('[data-test="dashboard-table"]') // Assuming your table is represented by the <table> element
.should("be.visible"); // Ensure the table is visible on the page
// find the dashboard name and click on the delete dashboard button. We can see that confirm dialog and click on cancel button
cy.get('[data-test="dashboard-table"]') // Step 1: Locate the table element
.find("tr") // Step 2: Select all rows
.eq(6) // Step 2: Select the 6th row (zero-based)
.should("exist") // Step 3: Assert that the row exists
.within(() => {
// Perform actions or assertions on the row's contents
// For example, check if a specific cell contains expected text
cy.get('[data-test="dashboard-delete"]').click();
});
// cy.get('[data-test="dashboard-table"] td')
// .first()
// .trigger("mouseover", { force: true })
// .find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
// .click();
// cy.contains('[data-test="dashboard-table"] td', dashboardData.DashboardName) // gives you the cell
// .siblings() // gives you all the other cells in the row
// .first()
// .find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="cancel-button"]').click(); // click on the cancel button
cy.reload(); // reload the window
cy.get('[data-test="dashboard-table"] td').should(
"contain",
dashboardData.DashboardName
);
// find the dashboard name and click on the delete dashboard button. we cab see the confirm dialog and click on the confirm button
// cy.contains('[data-test="dashboard-table"] td', dashboardData.DashboardName) // gives you the cell
// .siblings() // gives you all the other cells in the row
// .find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-table"]') // Step 1: Locate the table element
.find("tr") // Step 2: Select all rows
.eq(6) // Step 2: Select the 6th row (zero-based)
.should("exist") // Step 3: Assert that the row exists
.within(() => {
// Perform actions or assertions on the row's contents
// For example, check if a specific cell contains expected text
cy.get('[data-test="dashboard-delete"]').click();
});
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="confirm-button"]').click(); // click on the confirm button
cy.reload(); // reload the window
cy.wait(5000);
// cy.get('[data-test="dashboard-table"] td').should(
// "not.contain",
// dashboardData.DashboardName
// ); // check that the dashboard is not available
});
it.skip("Delete All", () => {
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click();
cy.get('[data-test="confirm-button"]').click();
// })
});
});
// it("should add multiple charts in dashboard", () => {
// addDashboard();
// cy.get(
// `[data-test="selected-chart-${dashboardData.ChartType}-item"]`
// ).click();
// selectStream(dashboardData.Stream);
// addFieldToAxis(
// fieldType.X,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.XAxisValue1
// );
// addFieldToAxis(
// fieldType.Y,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.YAxisValue1
// );
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get('[data-test="dashboard-panel-name"]').type(
// dashboardData.DashboardPanelName
// );
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
// cy.get('[data-test="dashboard-panel-add"]').click();
// cy.url().should("include", dashboardData.AddPanel);
// cy.get(
// `[data-test="selected-chart-${dashboardData.ChartType2}-item"]`
// ).click();
// selectStream(dashboardData.Stream);
// addFieldToAxis(
// fieldType.X,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.XAxisValue2
// );
// addFieldToAxis(
// fieldType.Y,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.YAxisValue2
// );
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get('[data-test="dashboard-panel-name"]').type(
// dashboardData.DashboardPanelName
// );
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
// });
});
@@ -1,651 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../support/commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
function editDashboard(panelname) {
//click on dashboard name
cy.contains(
'[data-test="dashboard-table"] td',
dashboardData.DashboardName
).click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
// Click on edit dashboard panel
cy.wait(2000);
cy.get(
'[data-test="dashboard-edit-panel-' + panelname + '-dropdown"]'
).click();
cy.get('[data-test="dashboard-edit-panel"]').click();
cy.url().should("include", dashboardData.AddPanel);
}
beforeEach(() => {
cy.login();
// cy.origin(Cypress.env('CYPRESS_BASEURL'),{args:{dashboardData}},({dashboardData})=>
// {
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 30000 }).should("be.visible");
// })
});
it("Add dashboard", () => {
cy.addDashboard();
});
it("Add area chart panel", () => {
cy.addAreaChartPanel();
});
it("Edit area chart panel", () => {
editDashboard(dashboardData.DashboardPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue3
);
cy.editAndSavePanel();
});
it("Edit panel errors without fields", () => {
editDashboard(dashboardData.EditPanelName);
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue3 +
'-remove"]'
).click();
cy.get(
'[data-test="dashboard-y-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-error"]').should("exist");
});
it("drag and drop element", () => {
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// remove x and y axis values
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue3 +
'-remove"]'
).click();
cy.get(
'[data-test="dashboard-y-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
// search field value
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.XAxisValue1);
// Get the draggable element
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
"-" +
dashboardData.fields.XAxisValue1 +
'"] [data-test="dashboard-add-data-indicator"]'
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-x-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
cy.wait(5000);
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.fields.XAxisValue1
);
//---------------------------------------------------------
// Get the draggable element
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.YAxisValue2);
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
"-" +
dashboardData.fields.YAxisValue2 +
'"] [data-test="dashboard-add-data-indicator"]'
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-y-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
cy.wait(5000);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.fields.YAxisValue2
);
//------------------------------------------------------------
cy.editAndSavePanel();
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// // cy.get('[data-test="dashboard-panel-name"]').type(dashboardData.DashboardPanelName)
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it("Verify query generation on the when fields are added and removed from axis", () => {
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// remove x axis value and add other value and check query
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.selectStream(dashboardData.Stream,dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-'+ dashboardData.fields.YAxisValue1 +'"]'
// ).trigger("mouseover");
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType +'-' +
// dashboardData.Stream +
// '-'+ dashboardData.fields.YAxisValue1 +'"] [data-test="dashboard-add-x-data"]'
// ).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-'+ dashboardData.fields.XAxisValue1 +'"] [data-test="dashboard-add-x-data"]'
// ).click();
cy.get('[data-test="dashboard-query-data"]').click();
cy.wait(2000);
const expectedString = `SELECT histogram(_timestamp) as "x_axis_1", count(log) as "y_axis_1" FROM "default" GROUP BY x_axis_1 ORDER BY x_axis_1`;
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
// console.log(text, "text");
text = removeUTFCharacters(text);
console.log(text,"txt");
console.log(expectedString);
// console.log(dashboardData.QueryValue);
expect(text.includes(expectedString)).to.be.true;
});
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
});
it("Should update the chart when field configurations are updated including filters", () => {
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' + dashboardData.fields.XAxisValue1 + '"]'
).click();
// Click to open the inner dropdown
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-menu"]'
).within(() => {
cy.get('[data-test="dashboard-x-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Histogram").click();
// change the label value
cy.get('[data-test="dashboard-x-item-input"]')
.clear()
.type(dashboardData.XLabel);
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-x-item-input"]').should(
"have.value",
dashboardData.XLabel
);
cy.get('[data-test="dashboard-x-layout"]').click();
// add y drop down value
cy.get(
'[data-test="dashboard-y-item-' + dashboardData.fields.YAxisValue2 + '"]'
).click();
// Click to open the inner dropdown
cy.get(
'[data-test="dashboard-y-item-' +
dashboardData.fields.YAxisValue2 +
'-menu"]'
).within(() => {
cy.get('[data-test="dashboard-y-item-dropdown"]')
.children()
.first()
.should("have.text", "Count");
cy.get('[data-test="dashboard-y-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Count (Distinct)").click();
// change the label value
cy.get('[data-test="dashboard-y-item-input"]')
.clear()
.type(dashboardData.YLabel);
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-y-item-input"]').should(
"have.value",
dashboardData.YLabel
);
// change the color picker color
cy.get('[data-test="dashboard-y-item-color"]').click();
cy.wait(4000);
// Set the color value in the color picker dialog
cy.get('input[type="color"]').invoke("val", "#ff0000").trigger("input");
//Assert that input field color has the updated value
cy.get('[data-test="dashboard-y-item-color"]').should(
"have.value",
"#ff0000"
);
cy.addFieldToAxis(
fieldType.F,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.FilterValue1
);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-'+ dashboardData.fields.FilterValue1 +'"]'
// ).trigger("mouseover");
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-'+ dashboardData.fields.FilterValue1 +'"] [data-test="dashboard-add-filter-data"]'
// ).click();
cy.get(
'[data-test="dashboard-filter-item-' +
dashboardData.fields.FilterValue1 +
'"]'
).click();
cy.get(
'[data-test="dashboard-filter-item-' +
dashboardData.fields.FilterValue1 +
'-menu"] .q-tab[data-test="dashboard-filter-list-tab"]'
).click();
// get the dropdown value
cy.get(
'[data-test="dashboard-filter-list-panel"] [data-test="dashboard-filter-list-dropdown"]'
).click();
// select check box value
cy.get("div.q-item__section")
.contains(dashboardData.FilterDropdownValue)
.as("filter-checkbox");
cy.get("@filter-checkbox").click({ force: true });
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.get('[data-test="dashboard-apply"]').click();
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
cy.get("#chart1").should("exist").and("be.visible");
cy.get("#chart1").should("contain", dashboardData.XLabel);
cy.get("#chart1").should("contain", dashboardData.YLabel);
cy.get('[data-test="dashboard-query-data"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
console.log(text, "text");
text = removeUTFCharacters(text);
console.log(text);
console.log(dashboardData.FilterQueryValue);
expect(text.includes(dashboardData.FilterQueryValue)).to.be.true;
});
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.FilterQueryValue
// );
});
it("should update the value automatically when trying to save the chart after switching from the auto to custom mode", () => {
//click on dashboard name
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// check for the auto field generated
cy.get('[data-test="dashboard-auto"]');
cy.get('[data-test="dashboard-query-data"]').click({ force: true });
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
const expectedString = dashboardData.EditQuery;
console.log(expectedString, "expectedString");
expect(text.includes(expectedString)).to.be.true;
});
// cy.get('[data-test="dashboard-panel-query-editor"]').should(
// "contain",
// );
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
cy.wait(4000);
// Assertion for field is automatically on the x-axis and y-axis layout
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.customQueryValue.field1
);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.customQueryValue.field2
);
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]')
.contains(dashboardData.customQueryValue.field1) // Find the specific word within the editor
.click()
.type(
`{ctrl+d}{ctrl+d}{ctrl+d}${dashboardData.editCustomQueryValue.field1}`
); // Select the desired text
// cy.get('[data-test="dashboard-x-layout"]').should(
// "contain",
// dashboardData.addCustomQueryValue.field1
// );
const updatedQuery = `SELECT histogram(_timestamp) as "${dashboardData.editCustomQueryValue.field1}", count(log) as "${dashboardData.customQueryValue.field2}" FROM "default" GROUP BY ${dashboardData.editCustomQueryValue.field1} ORDER BY ${dashboardData.editCustomQueryValue.field1}`;
console.log(updatedQuery);
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
expect(text.includes(updatedQuery)).to.be.true;
});
cy.wait("@search", { timeout: 5000 }).then(({ response }) => {
expect(response.statusCode).to.eq(200);
expect(response.body.hits).to.be.an("array");
});
cy.get("#chart1").should("exist").and("be.visible");
cy.get("[data-test='dashboard-x-label']").should(
"contain",
dashboardData.editXLabel
);
cy.get("[data-test='dashboard-y-label']").should(
"contain",
dashboardData.editYLabel
);
});
it("should clear the field after switch from custom to auto mode", () => {
editDashboard(dashboardData.EditPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.selectStream(dashboardData.Stream,dashboardData.StreamType);
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]').type(
// dashboardData.QueryValue
// );
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.get("[data-test='dashboard-auto']").click();
cy.get('[data-test="dialog-box"]').should("be.visible");
//check for the popup cancel button
cy.get('[data-test="cancel-button"]').click();
cy.get('[data-test="dashboard-auto"]').click();
// cy.wait(4000);
// check for the popup confirm button
cy.get('[data-test="confirm-button"]').click();
cy.get('[data-test="dashboard-panel-searchbar"]').should("be.visible");
// Assertion for the clear value in the editor
cy.get('[data-test="dashboard-panel-query-editor"]').should(
"have.value",
""
);
// Assertion for the clear value in the x and y layout
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field1}']`
).should("not.exist");
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field2}']`
).should("not.exist");
});
// it("Should be able to generate chart with custom query mode after switching from the auto mode", () => {
// //click on dashboard name
// editDashboard(dashboardData.EditPanelName);
// //select bar chart
// cy.get(
// '[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
// ).click();
// // check for the auto field generated
// cy.get('[data-test="dashboard-auto"]');
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
// // check for the custom sql button
// cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]')
// .click()
// .type("{selectall}{backspace}")
// .type(dashboardData.QueryValue);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-x_axis_1"]'
// ).trigger("mouseover");
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-x_axis_1"] [data-test="dashboard-add-x-data"]'
// ).click();
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-y_axis_1"] [data-test="dashboard-add-y-data"]'
// ).click();
// cy.editAndSavePanel();
// // cy.intercept("POST", dashboardData.SearchQuery).as("search");
// // cy.get('[data-test="dashboard-apply"]').click();
// // // cy.get('[data-test="dashboard-error"]').should('exist');
// // cy.wait(2000);
// // cy.get('[data-test="dashboard-error"]').should("not.exist");
// // cy.wait("@search").then(({ response }) => {
// // expect(response.statusCode).to.eq(200);
// // expect(response.body.hits).to.be.an("array");
// // });
// // cy.get("#chart1").should("exist").and("be.visible");
// // // cy.get('[data-test="dashboard-panel-name"]').type(dashboardData.DashboardPanelName)
// // cy.get('[data-test="dashboard-panel-save"]').click();
// // cy.url().should("include", dashboardData.ViewDashboardUrl);
// });
it("Should be able to generate chart with the custom query mode", () => {
//click on dashboard name
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({force: true});
cy.get('[data-test="dashboard-panel-query-editor"]')
.click()
.type("{selectall}{backspace}")
.type(dashboardData.QueryValue);
cy.wait(4000);
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-x_axis_1"]'
).trigger("mouseover");
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-x_axis_1"] [data-test="dashboard-add-x-data"]'
).click();
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-y_axis_1"] [data-test="dashboard-add-y-data"]'
).click();
cy.editAndSavePanel();
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it("Delete panel", () => {
cy.contains(
'[data-test="dashboard-table"] td',
dashboardData.DashboardName
).click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.get(
'[data-test="dashboard-edit-panel-' +
dashboardData.EditPanelName +
'-dropdown"]'
).click();
cy.get('[data-test="dashboard-delete-panel"]').click();
cy.reload();
// cy.get('[data-test="dashboard-panel-title"]').should(
// "not.contain",
// dashboardData.EditPanelName
// );
// cy.get('[data-test="panels-grid"]')
// .contains(dashboardData.EditPanelName)
// .should("not.be.visible");
});
it.skip("Delete All", () => {
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click();
cy.get('[data-test="confirm-button"]').click();
// })
});
});
});
@@ -1,328 +0,0 @@
//<reference types="cypress" />
import * as logstests from "../allfunctions/logs";
import logsdata from "../../../../test-data/logs_data.json"
// import logsdata from "../../data/logs_data.json";
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Alerts testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.intercept("GET", "**/api/default/alerts/templates**").as("templates");
cy.visit(`web/alerts/templates??org_identifier=${Cypress.env("ORGNAME")}`);
// cy.intercept('GET', '**/api/default/_search**').as('allsearch')
});
it("should display Create template on destination page and clicking on it to navigate template page", () => {
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(100);
cy.contains("Create Template").should("be.visible").click({ force: true });
cy.contains("Add Template").should("be.visible");
});
it("should display Create template on alerts page and clicking on it to navigate template page", () => {
cy.wait(2000);
cy.get('[data-test="alert-alerts-tab"]').click({ force: true });
cy.wait(100);
cy.contains("Create Template").should("be.visible").click({ force: true });
cy.contains("Add Template").should("be.visible");
});
// This test checks if the histogram toggle button works correctly by clicking it and verifying that the chart is hidden.
it("should display error when body not added under templates", () => {
cy.wait(2000);
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(100);
cy.get('[data-test="add-template-name-input"]').type("test");
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should display error when body added but name left blank under templates", () => {
cy.wait(2000);
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(100);
cy.get(".view-line").type("test");
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should display error only blank spaces added under template name", () => {
cy.wait(2000);
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(100);
cy.get('[data-test="add-template-name-input"]').type(" ");
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.contains("Field is required").should("be.visible");
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should saved template successfully", () => {
cy.wait(2000);
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(100);
cy.get('[data-test="add-template-name-input"]').type("automationalert");
const jsonString = '{"text": "{alert_name} is active"}';
cy.get(".view-line").type(jsonString, { parseSpecialCharSequences: false });
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Template Saved Successfully")
.should("be.visible");
});
it("should display error when valid JSON not entered under template body", () => {
cy.wait(2000);
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(100);
cy.get('[data-test="add-template-name-input"]').type("test");
cy.get(".view-line").type("test");
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Please enter valid JSON")
.should("be.visible");
});
it("should click on add destination button and display error if user clicks directly on save", () => {
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="alert-destination-list-add-alert-btn"]').click({
force: true,
});
cy.get('[data-test="add-destination-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should display error if name has only spaces under destination", () => {
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="alert-destination-list-add-alert-btn"]').click({
force: true,
});
cy.get('[data-test="add-destination-name-input"]').type(" ");
cy.get('[data-test="add-destination-submit-btn"]').click({ force: true });
cy.contains("Field is required").should("be.visible");
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should display error if name has only spaces under destination", () => {
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(1000);
cy.get('[data-test="alert-destination-list-add-alert-btn"]').click({
force: true,
});
cy.wait(1000);
cy.get('[data-test="add-destination-name-input"]').type(" ");
cy.wait(1000);
cy.get('[data-test="add-destination-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Please fill required fields")
.should("be.visible");
});
it("should click cancel button under destinations", () => {
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(1000);
cy.get('[data-test="alert-destination-list-add-alert-btn"]').click({
force: true,
});
cy.get('[data-test="add-destination-name-input"]').type("cy-destination");
cy.get('[data-test="add-destination-cancel-btn"]').click({ force: true });
cy.get('[data-test="alert-destinations-tab"]').should("be.visible");
});
it("should display error when stream name is not added under alerts", () => {
cy.wait(2000);
cy.get('[data-test="alert-alerts-tab"]').click({ force: true });
cy.get('[data-test="alert-list-add-alert-btn"]').click({ force: true });
cy.get('[data-test="add-alert-name-input"]').type("cy-alert");
cy.get(
".alert-stream-type > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon"
).click({ force: true });
// Find and click on the item with text 'logs'
cy.contains(".q-item__label", "logs").click({ force: true });
cy.get('[data-test="add-alert-submit-btn"]').click({ force: true });
cy.contains("Field is required").should("be.visible");
});
it("should display error when directly Save button clicked on alerts page", () => {
cy.wait(2000);
cy.get('[data-test="alert-alerts-tab"]').click({ force: true });
cy.get('[data-test="alert-list-add-alert-btn"]').click({ force: true });
cy.get('[data-test="add-alert-submit-btn"]').click({ force: true });
cy.contains("Field is required").should("be.visible");
});
it.skip("should create template, destination, logs-alerts and then delete all successfully", () => {
// cy.wait(2000);
cy.wait("@templates");
cy.get('[data-test="alert-template-list-add-alert-btn"]').click({
force: true,
});
cy.wait(2000);
cy.get('[data-test="add-template-name-input"]').type("automationalertest");
const jsonString = '{"text": "{alert_name} is active"}';
cy.get(".view-line").type(jsonString, { parseSpecialCharSequences: false });
cy.get('[data-test="add-template-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Template Saved Successfully")
.should("be.visible");
cy.wait(2000);
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.wait(1000);
cy.get('[data-test="alert-destination-list-add-alert-btn"]').click({
force: true,
});
cy.get('[data-test="add-destination-name-input"]').type("cy-destinations");
cy.get('[data-test="add-destination-template-select"]').click({
force: true,
});
cy.contains(".q-item__label span", "automationalertest").click();
cy.get('[data-test="add-destination-url-input"]').type(
"https://slack.com/api"
);
cy.get('[data-test="add-destination-method-select"]').click({
force: true,
});
cy.get(".q-menu").should("be.visible");
cy.contains(".q-item__label span", "get").click();
cy.get(".q-toggle__inner").click({ force: true });
cy.get('[data-test="add-destination-submit-btn"]').click({ force: true });
cy.get(".q-notification__message")
.contains("Destination saved successfully")
.should("be.visible");
cy.wait(2000);
cy.get('[data-test="alert-alerts-tab"]').click({ force: true });
cy.get('[data-test="alert-list-add-alert-btn"]').click({ force: true });
cy.get('[data-test="add-alert-name-input"]').type("cy-alert");
cy.get('[data-test="add-alert-stream-type-select"] > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon').click({ force: true });
// Find and click on the item with text 'logs'
cy.contains(".q-item__label", "logs").click({ force: true });
cy.get('[data-test="add-alert-stream-select"] > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon').click({ force: true });
cy.contains(".q-item__label", "e2e_automate").click();
cy.get('[data-test="add-alert-scheduled-alert-radio"]').click({
force: true,
});
cy.wait(1000);
cy.get('[data-test="alert-conditions-select-column"] > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon').click({ force: true });
cy.contains(".q-item__label", "_timestamp").click();
cy.get('[data-test="alert-conditions-operator-select"] > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon').click({ force: true });
cy.contains(".q-item__label", "=").click();
cy.get('.justify-start > .flex > .q-field').type("200");
cy.get('[data-test="add-alert-destination-select"] > .q-field > .q-field__inner > .q-field__control > .q-field__append > .q-icon').click({ force: true });
cy.contains(".q-item__label", "cy-destination").click();
cy.get('[data-test="add-alert-submit-btn"]').click({ force: true });
cy.get('[data-test$="-delete-alert"]').first().scrollIntoView();
cy.get('[data-test$="-delete-alert"]').first().click();
cy.get('[data-test="cancel-button"] ').click({ force: true });
cy.get('[data-test$="-delete-alert"]').each(($button) => {
cy.wrap($button).click();
cy.get('[data-test="confirm-button"]').click({ force: true });
});
cy.get('[data-test="alert-destinations-tab"]').click({ force: true });
cy.get("tbody tr").each(($row) => {
// Delete each row
cy.wrap($row).find('[data-test*="-delete-destination"]').click();
cy.get('[data-test="confirm-button"]').click({ force: true });
});
cy.get('[data-test="alert-templates-tab"]').click({ force: true });
cy.get('tbody [data-test$="-delete-template"]').each(($button) => {
cy.wrap($button).click({force:true}).then(() => {
cy.get('[data-test="confirm-button"]').click({ force: true });
});
});
});
});
@@ -1,160 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../../support/commons";
import logsdata from "../../../../../test-data/logs_data.json"
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
let dashboardName;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Generate a random number
const randomNumber = getRandomInt(1000, 9999);
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().baseUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
cy.intercept('GET', '**/api/default/organizations**').as('allorgs');
cy.intercept('GET', '/api/default/settings').as('settings')
cy.intercept('GET', '/api/default/folders').as('folders')
cy.intercept('GET', '**/api/default/dashboards**').as('dashboards');
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 3000 }).should("be.visible")
});
it("Add dashboard", () => {
// Create dynamic dashboard name
cy.wait('@folders')
dashboardName = `${dashboardData.DashboardName}_${randomNumber}`;
console.log("==dashboardName==", dashboardName);
cy.wait('@dashboards')
cy.contains("New Dashboard").click()
cy.wait(1000)
cy.get('[data-test="add-dashboard-name"]').type(dashboardName);
cy.get('[data-test="dashboard-add-submit"]').click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it("Delete dashboard", () => {
dashboardName = `${dashboardData.DashboardName}_${randomNumber}`;
console.log("==dashboardName==", dashboardName);
cy.wait('@dashboards')
cy.contains("New Dashboard").click()
cy.wait(1000)
cy.get('[data-test="add-dashboard-name"]').type(dashboardName);
cy.get('[data-test="dashboard-add-submit"]').click({force:true});
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.wait(300)
cy.get('.flex.justify-between > :nth-child(1) > .q-btn > .q-btn__content > .q-icon').click({force:true})
// find the dashboard name and click on the delete dashboard button. We can see that confirm dialog and click on cancel button
// cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
cy.get('[data-test="dashboard-delete"]:first').click({force:true})
// cy.get('tbody > :nth-child(1) > :nth-child(2)')
// .siblings() // gives you all the other cells in the row
// .find(':nth-child(1) >> [data-test="dashboard-delete"]:first') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="cancel-button"]').click(); // click on the cancel button
cy.reload(); // reload the window
// TODO: Change locator ID here
// cy.get('[data-test="dashboard-table"] td').should(
// "contain",
// dashboardName
// );
// TODO: Change locator ID here
// find the dashboard name and click on the delete dashboard button. we cab see the confirm dialog and click on the confirm button
// cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
// .siblings() // gives you all the other cells in the row
// .find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-delete"]:first').click({force:true})
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="confirm-button"]').click({force:true}); // click on the confirm button
cy.wait(1000)
cy.reload(); // reload the window
// cy.get('[data-test="dashboard-table"] td').should(
// "not.contain",
// dashboardName
// ); // check that the dashboard is not available
});
it("Delete All", () => {
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.wait(2000)
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click({ force: true });
cy.get('[data-test="confirm-button"]').click();
// })
});
});
it("should display save button disabled if dashboard name is blank", () => {
cy.wait('@dashboards')
cy.contains("New Dashboard").click({force:true})
cy.wait(2000)
cy.get('[data-test="add-dashboard-name"]').type(' ');
cy.get('[data-test="dashboard-add-submit"]').should('be.disabled');
});
})
@@ -1,609 +0,0 @@
///<reference types="cypress" />
// import logsdata from "../../../data/logs_data.json";
import logsdata from "../../../../../test-data/logs_data.json"
import { fieldType } from "../../../support/commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
// cy.origin(Cypress.env('CYPRESS_BASEURL'),{args:{dashboardData}},({dashboardData})=>
// {
cy.login();
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().baseUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
cy.wait(4000);
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "/api/default/settings").as("settings");
cy.intercept("GET", "/api/default/folders").as("folders");
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
// cy.wait(2000)
// cy.get('[data-test="menu-link-/dashboards-item"]').click();
// .contains(dashboardData.ModuleDashboard)
cy.get("table.q-table", { timeout: 3000 }).should("be.visible");
// })
});
// it("Add dashboard", () => {
// cy.addDashboard();
// });
it.skip("Add area chart panel", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addAreaChartPanel();
});
it.skip("Add panel errors without fields", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addDashboardPanel();
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-error"]').should("exist");
});
it.skip("drag and drop element", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.XAxisValue1);
// Get the draggable element
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-${dashboardData.fields.XAxisValue1}"] [data-test="dashboard-add-data-indicator"]`
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-x-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
//cy.wait(5000);
cy.get('[data-test="dashboard-x-layout"]').should("contain", "_timestamp");
//---------------------------------------------------------
// Get the draggable element
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.YAxisValue2);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-${dashboardData.fields.YAxisValue2}"] [data-test="dashboard-add-data-indicator"]`
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-y-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
//cy.wait(3000);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.fields.YAxisValue2
);
cy.addAndSavePanel();
});
it.skip("Verify query generation on the when fields are added and removed from axis", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}-remove"]`
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue2
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue2}-remove"]`
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.get('[data-test="dashboard-query-data"]').click();
cy.wait(5000);
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
console.log(text, "text");
text = removeUTFCharacters(text);
console.log(text);
console.log(dashboardData.QueryValue);
expect(text.includes(dashboardData.QueryValue)).to.be.true;
});
// cy.get('[data-test="dashboard-panel-query-editor"]').should(
// "have.value",
// dashboardData.QueryValue
// )
});
it.skip("should update the chart when field configurations are updated including filters", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click();
cy.wait(2000);
cy.addDashboardPanel();
cy.get('[data-cy="date-time-button"]').click();
cy.get('[data-test="date-time-relative-6-w-btn"]').click();
cy.get('[data-test="dashboard-apply"]').click();
cy.get("div.q-item__section");
cy.wait(3000);
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}"]`
).click();
// Click to open the inner dropdown
cy.get(
`[data-test="dashboard-x-item-${dashboardData.fields.XAxisValue1}-menu"]`
).within(() => {
cy.get('[data-test="dashboard-x-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Histogram").click();
cy.wait(1000);
// change the label value
cy.get('[data-test="dashboard-x-item-input"]', {timeout:2000}).clear().type("X-value");
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-x-item-input"]').should(
"have.value",
"X-value"
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
// add y drop down value
cy.get(
`[data-test="dashboard-y-item-${dashboardData.fields.YAxisValue1}"]`
).click();
// Click to open the inner dropdown
cy.get(
`[data-test="dashboard-y-item-${dashboardData.fields.YAxisValue1}-menu"]`
).within(() => {
cy.get('[data-test="dashboard-y-item-dropdown"]')
.children()
.first()
.should("have.text", "Count");
cy.get('[data-test="dashboard-y-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Sum").click();
// change the label value
cy.get('[data-test="dashboard-y-item-input"]').clear().type("Y-value");
// Assert that the input field has the updated value
cy.get('[data-test="dashboard-y-item-input"]').should(
"have.value",
"Y-value"
);
// change the color picker color
cy.get('[data-test="dashboard-y-item-color"]').click();
cy.wait(1000);
// Set the color value in the color picker dialog
cy.get('input[type="color"]').invoke("val", "#ff0000").trigger("input");
// Close the color picker dialog (optional, if needed)
// cy.get('input[type="color"]').blur();
//Assert that input field color has the updated value
cy.get('[data-test="dashboard-y-item-color"]').should(
"have.value",
"#ff0000"
);
cy.addFieldToAxis(
fieldType.F,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.FilterValue1
);
cy.get(
`[data-test="dashboard-filter-item-${dashboardData.fields.FilterValue1}"]`
).click();
cy.get(
`[data-test="dashboard-filter-item-${dashboardData.fields.FilterValue1}-menu"] .q-tab[data-test="dashboard-filter-list-tab"]`
).click();
// get the dropdown value
cy.get(
'[data-test="dashboard-filter-list-panel"] [data-test="dashboard-filter-list-dropdown"]'
).click();
// select check box value
cy.get("div.q-item__section")
.contains(dashboardData.FilterDropdownValue)
.as("filter-checkbox");
cy.get("@filter-checkbox").click({ force: true });
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.get('[data-test="dashboard-apply"]').click();
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.wait("@search", { timeout: 3000 })
.its("response.statusCode")
.should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
cy.get("#chart1").should("exist").and("be.visible");
// cy.get('[data-test="dashboard-x-item-_timestamp"]').click()
// cy.get('[data-test="dashboard-x-item-input"]')
// .contains("X-value")
// cy.get("[data-test='dashboard-y-label']").should(
// "contain",
// dashboardData.filterLabel.YLabel
// );
// cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
// let text = editor.text();
// text = removeUTFCharacters(text);
// // console.log(text, "text");
// // let modifiedQueryString = queryString.replace(/_1/g, "");
// // console.log(modifiedQueryString,"modifiedQueryString");
// const expectedString = dashboardData.FilterQueryValue;
// // console.log(expectedString, "expectedString");
// expect(text.includes(expectedString)).to.be.true;
// });
});
it.skip("should update the value automatically when trying to save the chart after switching from the auto to custom mode", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
// check for the auto field generated
cy.get('[data-test="dashboard-auto"]');
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.get('[data-test="dashboard-panel-query-editor"]').should("exist");
cy.wait(5000);
cy.get('[data-test="dashboard-query-data"]').click({ force: true });
// assertion for value is added on the editor when = is clicked
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
const expectedString = dashboardData.QueryValue;
console.log(expectedString, "expectedString");
expect(text.includes(expectedString)).to.be.true;
});
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// Assertion for field is automatically on the x-axis and y-axis layout
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.customQueryValue.field1
);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.customQueryValue.field2
);
// cy.get('[data-test="dashboard-query-data"]').click({force:true});
cy.get('[data-test="dashboard-panel-query-editor"]')
.contains(dashboardData.customQueryValue.field1) // Find the specific word within the editor
.click({ force: true })
.wait(100)
.type(`{cmd+d}{cmd+d}{cmd+d}${dashboardData.addCustomQueryValue.field1}`); // Select the desired text
// cy.get('[data-test="dashboard-x-layout"]').should(
// "contain",
// dashboardData.addCustomQueryValue.field1
// );
const updatedQuery = `SELECT histogram(_timestamp) as "${dashboardData.addCustomQueryValue.field1}", count(code) as "${dashboardData.customQueryValue.field2}" FROM "e2e_automate" GROUP BY ${dashboardData.addCustomQueryValue.field1} ORDER BY ${dashboardData.addCustomQueryValue.field1} ASC`;
// console.log(updatedQuery);
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]').contains(updatedQuery)
// should(
// "contain",
// updatedQuery
// );
cy.wait("@search", { timeout: 5000 }).then(({ response }) => {
expect(response.statusCode).to.eq(200);
expect(response.body.hits).to.be.an("array");
});
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get("[data-test='dashboard-x-label']").should(
// "contain",
// dashboardData.XLabel
// );
// cy.get("[data-test='dashboard-y-label']").should(
// "contain",
// dashboardData.YLabel
// );
});
// it("should be able to generate chart with custom query mode after switching from the auto mode", () => {
// cy.addDashboardPanel();
// cy.get(
// `[data-test="selected-chart-${dashboardData.ChartType}-item"]`
// ).click();
// // check for the auto field generated
// cy.get('[data-test="dashboard-auto"]');
// cy.selectStream(dashboardData.Stream);
// cy.addFieldToAxis(
// fieldType.X,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.XAxisValue1
// );
// cy.addFieldToAxis(
// fieldType.Y,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.YAxisValue1
// );
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
// // check for the custom sql button
// cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]')
// .click()
// .type("{selectall}{backspace}")
// .type(dashboardData.QueryValue);
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
// ).trigger("mouseover");
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
// ).click();
// cy.get(
// `[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
// ).click();
// cy.addAndSavePanel();
// });
it.skip("should clear the field after switch from custom to auto mode", () => {
cy.addDashboard();
cy.wait(1000);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.wait(2000);
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({force:true});
cy.get('[data-test="dashboard-panel-query-editor"]',{timeout:2000}).type(
dashboardData.QueryValue
);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.get("[data-test='dashboard-auto']").click();
cy.get('[data-test="dialog-box"]').should("be.visible");
//check for the popup cancel button
cy.get('[data-test="cancel-button"]').click();
cy.get('[data-test="dashboard-auto"]').click();
// cy.wait(4000);
// check for the popup confirm button
cy.get('[data-test="confirm-button"]').click();
cy.get('[data-test="dashboard-panel-searchbar"]').should("be.visible");
cy.get('[data-test="dashboard-panel-query-editor"]').should(
"have.value",
""
);
// Assertion for the clear value in the x and y layout
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field1}']`
).should("not.exist");
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field2}']`
).should("not.exist");
});
it.skip("should be able to generate chart with the custom query mode", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// // cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({ force: true });
cy.get('[data-test="dashboard-panel-query-editor"]').type(
dashboardData.QueryValue
);
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.addAndSavePanel();
});
it.skip("should display error when add new chartype with existing chart type value", () => {
cy.addDashboardPanel();
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType}-item"]`
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
cy.addFieldToAxis(
fieldType.Y,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue2
);
cy.get(
`[data-test="selected-chart-${dashboardData.ChartType2}-item"]`
).click();
cy.get('[data-test="dashboard-panel-name"]').type(
dashboardData.DashboardPanelName
);
cy.get('[data-test="dashboard-panel-save"]').click();
cy.get('[data-test="dashboard-error"] ul > li')
.contains("Add one value field for donut and pie charts")
.should("exist");
});
it.skip("Delete All", () => {
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.wait(2000)
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click({ force: true });
cy.get('[data-test="confirm-button"]').click();
// })
});
});
});
@@ -1,257 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../../support/commons";
import {getRandomText } from "../../utils";
import logsdata from "../../../../../test-data/logs_data.json"
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Drilldown testcases", () => {
let dashboardData;
let dashboardName;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Generate a random number
const randomNumber = getRandomInt(1000, 9999);
// function editDashboard(panelname) {
// //click on dashboard name
// cy.contains(
// '[data-test="dashboard-table"] td',
// dashboardData.DashboardName
// ).click({force:true});
// cy.url().should("include", dashboardData.ViewDashboardUrl);
// // Click on edit dashboard panel
// cy.wait(5000);
// cy.get(
// '[data-test="dashboard-edit-panel-' + panelname + '-dropdown"]'
// ).click({force:true});
// cy.get('[data-test="dashboard-edit-panel"]').click();
// cy.url().should("include", dashboardData.AddPanel);
// }
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
function deleteDashboard(){
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.wait(2000)
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click({ force: true });
cy.get('[data-test="confirm-button"]').click();
// })
});
}
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().baseUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
cy.intercept('GET', '**/api/default/organizations**').as('allorgs');
cy.intercept('GET', '/api/default/settings').as('settings')
cy.intercept('GET', '/api/default/folders').as('folders')
cy.intercept('GET', '**/api/default/dashboards**').as('dashboards');
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 3000 }).should("be.visible")
});
it.skip("Delete dashboard", () => {
dashboardName = `${dashboardData.DashboardName}_${randomNumber}`;
console.log("==dashboardName==", dashboardName);
cy.wait('@dashboards')
cy.contains("New Dashboard").click()
cy.wait(1000)
cy.get('[data-test="add-dashboard-name"]').type(dashboardName);
cy.get('[data-test="dashboard-add-submit"]').click({force:true});
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.wait(300)
cy.get('.flex.justify-between > :nth-child(1) > .q-btn > .q-btn__content > .q-icon').click({force:true})
// find the dashboard name and click on the delete dashboard button. We can see that confirm dialog and click on cancel button
// cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
cy.get('[data-test="dashboard-delete"]:first').click({force:true})
// cy.get('tbody > :nth-child(1) > :nth-child(2)')
// .siblings() // gives you all the other cells in the row
// .find(':nth-child(1) >> [data-test="dashboard-delete"]:first') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="cancel-button"]').click(); // click on the cancel button
cy.reload(); // reload the window
// TODO: Change locator ID here
// cy.get('[data-test="dashboard-table"] td').should(
// "contain",
// dashboardName
// );
// TODO: Change locator ID here
// find the dashboard name and click on the delete dashboard button. we cab see the confirm dialog and click on the confirm button
// cy.contains('[data-test="dashboard-table"] td', dashboardName) // gives you the cell
// .siblings() // gives you all the other cells in the row
// .find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
// .click();
cy.get('[data-test="dashboard-delete"]:first').click({force:true})
cy.get('[data-test="dashboard-confirm-dialog"]').should("be.visible"); // check that the dialog is visible
cy.wait(2000); // wait for 2ms for the dialogues
cy.get('[data-test="confirm-button"]').click({force:true}); // click on the confirm button
cy.wait(1000)
cy.reload(); // reload the window
// cy.get('[data-test="dashboard-table"] td').should(
// "not.contain",
// dashboardName
// ); // check that the dashboard is not available
});
it("should not enable Add button on drilldown UI if name is blank", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="dashboard-edit-panel-Automated Testing Panel-dropdown"] > .q-btn__content > .q-icon').click({ force: true })
cy.get('[data-test="dashboard-edit-panel"]').click();
cy.get("[data-test='dashboard-sidebar']").click();
cy.get('[data-test="dashboard-addpanel-config-drilldown-add-btn"] > .q-btn__content > .block').click();
cy.get('[data-test="dashboard-drilldown-folder-select"]').click({force: true});
cy.get(".q-item__label").contains("default").click({force: true});
cy.get('[data-test="confirm-button"]').should('be.disabled');
cy.get('[data-test="dashboard-panel-save"]').click( {force: true});
cy.wait(2000)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true})
cy.wait(2000)
deleteDashboard()
});
it("should save the drilldown successfully", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="dashboard-edit-panel-Automated Testing Panel-dropdown"] > .q-btn__content > .q-icon').click({ force: true })
cy.get('[data-test="dashboard-edit-panel"]').click();
cy.get("[data-test='dashboard-sidebar']").click();
cy.get('[data-test="dashboard-addpanel-config-drilldown-add-btn"] > .q-btn__content > .block').click();
cy.get('[data-test="dashboard-drilldown-folder-select"]').click();
cy.get(".q-item__label").contains("default").click();
cy.get('[data-test="dashboard-config-panel-drilldown-name"]').type('drilldown');
cy.wait(3000)
cy.get('[data-test="confirm-button"]').should('be.visible').click();
cy.get('[data-test="dashboard-addpanel-config-drilldown-name-0"]').should('contain', 'drilldown');
cy.get('[data-test="dashboard-panel-save"]').click();
cy.wait(2000)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.wait(2000)
deleteDashboard()
});
it.skip("should save the drilldown successfully", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="dashboard-edit-panel-Automated Testing Panel-dropdown"] > .q-btn__content > .q-icon').click({ force: true })
cy.get('[data-test="dashboard-edit-panel"]').click();
cy.get("[data-test='dashboard-sidebar']").click();
cy.get('[data-test="dashboard-addpanel-config-drilldown-add-btn"] > .q-btn__content > .block').click();
cy.get('[data-test="dashboard-drilldown-folder-select"]').click();
cy.get(".q-item__label").contains("default").click();
cy.get('[data-test="dashboard-config-panel-drilldown-name"]').type('drilldown');
cy.get('[data-test="dashboard-drilldown-variable-name-0"]').type('test');
cy.get('[data-test="dashboard-drilldown-variable-value-0"]').type('${var-test}',{parseSpecialCharSequences: false})
cy.wait(2000)
cy.get('[data-test="confirm-button"]').should('be.visible').click();
cy.get('[data-test="dashboard-addpanel-config-drilldown-name-0"]').should('contain', 'drilldown');
cy.get('[data-test="dashboard-panel-save"]').click();
cy.wait(2000)
cy.get("xpath///*[@data-test=\"date-time-btn\"]/span[2]").click();
cy.get("[data-test='date-time-absolute-tab'] > span.q-btn__content").click();
cy.get("div:nth-of-type(27) span.q-btn__content > span").click();
cy.get('canvas[data-zr-dom-id="zr_0"]').then($canvas => {
const canvas = $canvas[0];
// Coordinates of the drilldown dot within the canvas
const dotX = 100; // Adjust this value according to the dot's X coordinate
const dotY = 100; // Adjust this value according to the dot's Y coordinate
// Create a custom event object with the coordinates
const event = new MouseEvent('click', {
bubbles: true,
cancelable: true,
clientX: dotX,
clientY: dotY
});
// Dispatch the click event on the canvas element
canvas.dispatchEvent(event);
});
// cy.get('canvas[data-zr-dom-id="zr_0"]').then($canvas => {
// const canvas = $canvas[0];
// const rect = canvas.getBoundingClientRect(); // Get the position of the canvas relative to the viewport
// const x = rect.left + canvas.width / 2; // Adjust X coordinate as needed
// const y = rect.top + canvas.height / 2; // Adjust Y coordinate as needed
// cy.wrap(canvas).trigger('mousedown', { button: 0, clientX: x, clientY: y })
// .trigger('mouseup', { button: 0, clientX: x, clientY: y });
// });
// cy.wait(2000)
// cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
// cy.wait(2000)
// deleteDashboard()
});
})
@@ -1,778 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../../support/commons";
// import logsdata from "../../../data/logs_data.json"
import logsdata from "../../../../../test-data/logs_data.json"
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Create a new dashboard", () => {
let dashboardData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
function editDashboard(panelname) {
//click on dashboard name
cy.contains(
'[data-test="dashboard-table"] td',
dashboardData.DashboardName
).click({force:true});
cy.url().should("include", dashboardData.ViewDashboardUrl);
// Click on edit dashboard panel
cy.wait(3000);
cy.get(
'[data-test="dashboard-edit-panel-' + panelname + '-dropdown"]'
).click({force:true});
cy.get('[data-test="dashboard-edit-panel"]').click();
cy.url().should("include", dashboardData.AddPanel);
}
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// cy.origin(Cypress.env('CYPRESS_BASEURL'),{args:{dashboardData}},({dashboardData})=>
// {
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 30000 }).should("be.visible");
// })
});
// it("Add dashboard", () => {
// cy.addDashboard();
// });
// it("Add area chart panel", () => {
// cy.addAreaChartPanel();
// });
it.skip("Edit area chart panel", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
editDashboard(dashboardData.DashboardPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue3
);
cy.editAndSavePanel();
cy.wait(300)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
editDashboard(dashboardData.EditPanelName);
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue3 +
'-remove"]'
).click();
cy.get(
'[data-test="dashboard-y-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-error"]').should("exist");
});
// it("Edit panel errors without fields", () => {
// editDashboard(dashboardData.EditPanelName);
// cy.get(
// '[data-test="dashboard-x-item-' +
// dashboardData.fields.XAxisValue3 +
// '-remove"]'
// ).click();
// cy.get(
// '[data-test="dashboard-y-item-' +
// dashboardData.fields.YAxisValue1 +
// '-remove"]'
// ).click();
// cy.get('[data-test="dashboard-apply"]').click();
// cy.get('[data-test="dashboard-error"]').should("exist");
// })
it.skip("drag and drop element", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.wait(200)
editDashboard(dashboardData.DashboardPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue3
);
cy.editAndSavePanel();
cy.wait(200)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
// cy.get('.flex.justify-between > :nth-child(2) > :nth-child(4)').click({force:true})
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// remove x and y axis values
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue3 +
'-remove"]'
).click();
cy.get(
'[data-test="dashboard-y-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
// search field value
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.XAxisValue1);
// Get the draggable element
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
"-" +
dashboardData.fields.XAxisValue1 +
'"] [data-test="dashboard-add-data-indicator"]'
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-x-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
cy.wait(5000);
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.fields.XAxisValue1
);
//---------------------------------------------------------
// Get the draggable element
cy.get("[data-test='index-field-search-input']")
.click()
.clear()
.type(dashboardData.fields.YAxisValue2);
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
"-" +
dashboardData.fields.YAxisValue2 +
'"] [data-test="dashboard-add-data-indicator"]'
).as("draggable");
// Get the droppable area
cy.get('[data-test="dashboard-y-layout"]').as("droppable");
cy.get("@draggable").trigger("dragstart");
cy.get("@droppable").trigger("drop");
cy.wait(5000);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.fields.YAxisValue2
);
//------------------------------------------------------------
cy.editAndSavePanel();
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// // cy.get('[data-test="dashboard-panel-name"]').type(dashboardData.DashboardPanelName)
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it.skip("should verify query generation on the when fields are added and removed from axis", () => {
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// remove x axis value and add other value and check query
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.selectStream(dashboardData.Stream,dashboardData.StreamType);
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.YAxisValue1
);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-'+ dashboardData.fields.YAxisValue1 +'"]'
// ).trigger("mouseover");
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType +'-' +
// dashboardData.Stream +
// '-'+ dashboardData.fields.YAxisValue1 +'"] [data-test="dashboard-add-x-data"]'
// ).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.YAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue1
);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-'+ dashboardData.fields.XAxisValue1 +'"] [data-test="dashboard-add-x-data"]'
// ).click();
cy.get('[data-test="dashboard-query-data"]').click();
cy.wait(2000);
const expectedString = `SELECT histogram(_timestamp) as "x_axis_1", count(log) as "y_axis_1" FROM "default" GROUP BY x_axis_1 ORDER BY x_axis_1`;
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
// console.log(text, "text");
text = removeUTFCharacters(text);
console.log(text,"txt");
console.log(expectedString);
// console.log(dashboardData.QueryValue);
expect(text.includes(expectedString)).to.be.true;
});
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
});
it.skip("Should update the chart when field configurations are updated including filters", () => {
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' + dashboardData.fields.XAxisValue1 + '"]'
).click();
// Click to open the inner dropdown
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-menu"]'
).within(() => {
cy.get('[data-test="dashboard-x-item-dropdown"]').click();
});
// get the dropdown value
cy.get("div.q-item").contains("Histogram").click();
// change the label value
// cy.get('[data-test="dashboard-x-item-input"]')
// .clear()
// .type(dashboardData.XLabel);
// TODO: change this when devs change the locators
// Assert that the input field has the updated value
// cy.get('[data-test="dashboard-x-item-input"]').should(
// "have.value",
// dashboardData.XLabel
// );
// cy.get('[data-test="dashboard-x-layout"]').click();
// // add y drop down value
// cy.get(
// '[data-test="dashboard-y-item-' + dashboardData.fields.YAxisValue2 + '"]'
// ).click();
// // Click to open the inner dropdown
// cy.get(
// '[data-test="dashboard-y-item-' +
// dashboardData.fields.YAxisValue2 +
// '-menu"]'
// ).within(() => {
// cy.get('[data-test="dashboard-y-item-dropdown"]')
// .children()
// .first()
// .should("have.text", "Count");
// cy.get('[data-test="dashboard-y-item-dropdown"]').click();
// });
// // get the dropdown value
// cy.get("div.q-item").contains("Count (Distinct)").click();
// // change the label value
// cy.get('[data-test="dashboard-y-item-input"]')
// .clear()
// .type(dashboardData.YLabel);
// // Assert that the input field has the updated value
// cy.get('[data-test="dashboard-y-item-input"]').should(
// "have.value",
// dashboardData.YLabel
// );
// // change the color picker color
// cy.get('[data-test="dashboard-y-item-color"]').click();
// cy.wait(4000);
// // Set the color value in the color picker dialog
// cy.get('input[type="color"]').invoke("val", "#ff0000").trigger("input");
// //Assert that input field color has the updated value
// cy.get('[data-test="dashboard-y-item-color"]').should(
// "have.value",
// "#ff0000"
// );
// cy.addFieldToAxis(
// fieldType.F,
// dashboardData.StreamType,
// dashboardData.Stream,
// dashboardData.fields.FilterValue1
// );
// // cy.get(
// // '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-'+ dashboardData.fields.FilterValue1 +'"]'
// // ).trigger("mouseover");
// // cy.get(
// // '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// // dashboardData.Stream +
// // '-'+ dashboardData.fields.FilterValue1 +'"] [data-test="dashboard-add-filter-data"]'
// // ).click();
// cy.get(
// '[data-test="dashboard-filter-item-' +
// dashboardData.fields.FilterValue1 +
// '"]'
// ).click();
// cy.get(
// '[data-test="dashboard-filter-item-' +
// dashboardData.fields.FilterValue1 +
// '-menu"] .q-tab[data-test="dashboard-filter-list-tab"]'
// ).click();
// // get the dropdown value
// cy.get(
// '[data-test="dashboard-filter-list-panel"] [data-test="dashboard-filter-list-dropdown"]'
// ).click();
// // select check box value
// cy.get("div.q-item__section")
// .contains(dashboardData.FilterDropdownValue)
// .as("filter-checkbox");
// cy.get("@filter-checkbox").click({ force: true });
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").its("response.statusCode").should("eq", 200);
// cy.get("@search").its("response.body.hits").should("be.an", "array");
// // cy.wait("@search").then(({ response }) => {
// // expect(response.statusCode).to.eq(200);
// // expect(response.body.hits).to.be.an("array");
// // });
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get("#chart1").should("contain", dashboardData.XLabel);
// cy.get("#chart1").should("contain", dashboardData.YLabel);
// cy.get('[data-test="dashboard-query-data"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
// let text = editor.text();
// console.log(text, "text");
// text = removeUTFCharacters(text);
// console.log(text);
// console.log(dashboardData.FilterQueryValue);
// expect(text.includes(dashboardData.FilterQueryValue)).to.be.true;
// });
// // cy.get('[data-test="dashboard-query"]').should(
// // "contain",
// // dashboardData.FilterQueryValue
// // );
});
it.skip("should update the value automatically when trying to save the chart after switching from the auto to custom mode", () => {
//click on dashboard name
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
// check for the auto field generated
cy.get('[data-test="dashboard-auto"]');
cy.get('[data-test="dashboard-query-data"]').click({ force: true });
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
const expectedString = dashboardData.EditQuery;
console.log(expectedString, "expectedString");
expect(text.includes(expectedString)).to.be.true;
});
// cy.get('[data-test="dashboard-panel-query-editor"]').should(
// "contain",
// );
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
cy.wait(4000);
// Assertion for field is automatically on the x-axis and y-axis layout
cy.get('[data-test="dashboard-x-layout"]').should(
"contain",
dashboardData.customQueryValue.field1
);
cy.get('[data-test="dashboard-y-layout"]').should(
"contain",
dashboardData.customQueryValue.field2
);
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]')
.contains(dashboardData.customQueryValue.field1) // Find the specific word within the editor
.click()
.type(
`{cmd+d}{cmd+d}{cmd+d}${dashboardData.editCustomQueryValue.field1}`
); // Select the desired text
// cy.get('[data-test="dashboard-x-layout"]').should(
// "contain",
// dashboardData.addCustomQueryValue.field1
// );
const updatedQuery = 'SELECT stream as "x_axis_12", count(code) as "y_axis_1" FROM "e2e_automate" GROUP BY x_axis_12'
console.log(updatedQuery);
cy.intercept("POST", dashboardData.SearchQuery).as("search");
cy.wait(2000);
cy.get('[data-test="dashboard-error"]').should("not.exist");
cy.get('[data-test="dashboard-apply"]').click();
cy.get('[data-test="dashboard-panel-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
console.log(text, "text");
// let modifiedQueryString = queryString.replace(/_1/g, "");
// console.log(modifiedQueryString,"modifiedQueryString");
expect(text.includes(updatedQuery)).to.be.true;
});
cy.wait("@search", { timeout: 5000 }).then(({ response }) => {
expect(response.statusCode).to.eq(200);
expect(response.body.hits).to.be.an("array");
});
cy.get("#chart1").should("exist").and("be.visible");
// TODO: change this when devs change the locators
// cy.get("[data-test='dashboard-x-label']").should(
// "contain",
// dashboardData.editXLabel
// );
// cy.get("[data-test='dashboard-y-label']").should(
// "contain",
// dashboardData.editYLabel
// );
});
it.skip("should clear the field after switch from custom to auto mode", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
editDashboard(dashboardData.DashboardPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue3
);
cy.editAndSavePanel();
cy.wait(200)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
editDashboard(dashboardData.EditPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.selectStream(dashboardData.Stream,dashboardData.StreamType);
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]').type(
// dashboardData.QueryValue
// );
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-x_axis_1"] [data-test="dashboard-add-x-data"]`
).click();
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"]`
).trigger("mouseover");
cy.get(
`[data-test="field-list-item-logs-${dashboardData.Stream}-y_axis_1"] [data-test="dashboard-add-y-data"]`
).click();
cy.get("[data-test='dashboard-auto']").click();
cy.get('[data-test="dialog-box"]').should("be.visible");
//check for the popup cancel button
cy.get('[data-test="cancel-button"]').click();
cy.get('[data-test="dashboard-auto"]').click();
// cy.wait(4000);
// check for the popup confirm button
cy.get('[data-test="confirm-button"]').click();
cy.get('[data-test="dashboard-panel-searchbar"]').should("be.visible");
// Assertion for the clear value in the editor
cy.get('[data-test="dashboard-panel-query-editor"]').should(
"have.value",
""
);
// Assertion for the clear value in the x and y layout
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field1}']`
).should("not.exist");
cy.get(
`[data-test='dashboard-x-item-${dashboardData.customQueryValue.field2}']`
).should("not.exist");
});
// it("Should be able to generate chart with custom query mode after switching from the auto mode", () => {
// //click on dashboard name
// editDashboard(dashboardData.EditPanelName);
// //select bar chart
// cy.get(
// '[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
// ).click();
// // check for the auto field generated
// cy.get('[data-test="dashboard-auto"]');
// cy.get('[data-test="dashboard-query"]').should(
// "contain",
// dashboardData.QueryValue
// );
// // check for the custom sql button
// cy.get('[data-test="dashboard-customSql"]').click();
// //check for the popup cancel button
// cy.get('[data-test="cancel-button"]').click();
// cy.get('[data-test="dashboard-customSql"]').click();
// cy.wait(4000);
// //check for the popup confirm button
// cy.get('[data-test="confirm-button"]').click();
// cy.get('[data-test="dashboard-panel-searchbar"]').click();
// cy.get('[data-test="dashboard-panel-query-editor"]')
// .click()
// .type("{selectall}{backspace}")
// .type(dashboardData.QueryValue);
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' + dashboardData.Stream + '-x_axis_1"]'
// ).trigger("mouseover");
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-x_axis_1"] [data-test="dashboard-add-x-data"]'
// ).click();
// cy.get(
// '[data-test="field-list-item-'+ dashboardData.StreamType + '-' +
// dashboardData.Stream +
// '-y_axis_1"] [data-test="dashboard-add-y-data"]'
// ).click();
// cy.editAndSavePanel();
// // cy.intercept("POST", dashboardData.SearchQuery).as("search");
// // cy.get('[data-test="dashboard-apply"]').click();
// // // cy.get('[data-test="dashboard-error"]').should('exist');
// // cy.wait(2000);
// // cy.get('[data-test="dashboard-error"]').should("not.exist");
// // cy.wait("@search").then(({ response }) => {
// // expect(response.statusCode).to.eq(200);
// // expect(response.body.hits).to.be.an("array");
// // });
// // cy.get("#chart1").should("exist").and("be.visible");
// // // cy.get('[data-test="dashboard-panel-name"]').type(dashboardData.DashboardPanelName)
// // cy.get('[data-test="dashboard-panel-save"]').click();
// // cy.url().should("include", dashboardData.ViewDashboardUrl);
// });
it.skip("Should be able to generate chart with the custom query mode", () => {
cy.addDashboard();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.addAreaChartPanel();
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
editDashboard(dashboardData.DashboardPanelName);
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.get(
'[data-test="dashboard-x-item-' +
dashboardData.fields.XAxisValue1 +
'-remove"]'
).click();
cy.addFieldToAxis(
fieldType.X,
dashboardData.StreamType,
dashboardData.Stream,
dashboardData.fields.XAxisValue3
);
cy.editAndSavePanel();
cy.wait(400)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
//click on dashboard name
editDashboard(dashboardData.EditPanelName);
//select bar chart
cy.get(
'[data-test="selected-chart-' + dashboardData.EditChartType + '-item"]'
).click();
cy.selectStream(dashboardData.Stream, dashboardData.StreamType);
// check for the custom sql button
cy.get('[data-test="dashboard-customSql"]').click();
// cy.get('[data-test="dashboard-query-data"]').click({force: true});
cy.get('[data-test="dashboard-panel-query-editor"]')
.click()
.type("{selectall}{backspace}")
.type(dashboardData.QueryValue);
cy.wait(4000);
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-x_axis_1"]'
).trigger("mouseover");
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-x_axis_1"] [data-test="dashboard-add-x-data"]'
).click();
cy.get(
'[data-test="field-list-item-' +
dashboardData.StreamType +
"-" +
dashboardData.Stream +
'-y_axis_1"] [data-test="dashboard-add-y-data"]'
).click();
cy.editAndSavePanel();
// cy.intercept("POST", dashboardData.SearchQuery).as("search");
// cy.get('[data-test="dashboard-apply"]').click();
// cy.wait(2000);
// cy.get('[data-test="dashboard-error"]').should("not.exist");
// cy.wait("@search").then(({ response }) => {
// expect(response.statusCode).to.eq(200);
// expect(response.body.hits).to.be.an("array");
// });
// cy.get("#chart1").should("exist").and("be.visible");
// cy.get('[data-test="dashboard-panel-save"]').click();
// cy.url().should("include", dashboardData.ViewDashboardUrl);
});
it.skip("Delete panel", () => {
cy.contains(
'[data-test="dashboard-table"] td',
dashboardData.DashboardName
).click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.get(
'[data-test="dashboard-edit-panel-' +
dashboardData.EditPanelName +
'-dropdown"]'
).click();
cy.get('[data-test="dashboard-delete-panel"]').click();
cy.reload();
// cy.get('[data-test="dashboard-panel-title"]').should(
// "not.contain",
// dashboardData.EditPanelName
// );
// cy.get('[data-test="panels-grid"]')
// .contains(dashboardData.EditPanelName)
// .should("not.be.visible");
});
it.skip("Delete All", () => {
cy.get('[data-test="dashboard-table"]')
.find("td")
.filter((index, element) =>
Cypress.$(element).text().includes(dashboardData.DashboardName)
)
.each((item) => {
console.log("==", item);
// cy.wrap(item).contains(dashboardData.DashboardName).then(($el)=>{
cy.wrap(item)
.siblings()
.find('[data-test="dashboard-delete"]') // finds the delete button and clicks on it
.click();
cy.get('[data-test="confirm-button"]').click();
// })
});
});
});
@@ -1,213 +0,0 @@
///<reference types="cypress" />
import { fieldType } from "../../../support/commons";
import logsdata from "../../../../../test-data/logs_data.json"
// import logsdata from "../../../data/logs_data.json";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Folders testcases", () => {
let dashboardData;
let dashboardName;
const randomFolderName = `folder_${Math.floor(Math.random() * 100000)}`;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// Generate a random number
const randomNumber = getRandomInt(1000, 9999);
before(function () {
cy.fixture("dashboard").then(function (data) {
dashboardData = data;
});
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().baseUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "/api/default/settings").as("settings");
cy.intercept("GET", "**/api/default/dashboards**").as("dashboards");
cy.wait(200)
cy.get('[data-test="menu-link-/dashboards-item"]').trigger("mouseover");
cy.get('[data-test="menu-link-/dashboards-item"]')
.contains(dashboardData.ModuleDashboard)
.click();
cy.get("table.q-table", { timeout: 3000 }).should("be.visible");
cy.intercept("GET", "**/api/default/folders**").as("folders");
});
it("should create and delete a new folder", () => {
// Create dynamic dashboard name
cy.wait(1000);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-name"]')
.click({ force: true })
.type(randomFolderName);
cy.get('[data-test="dashboard-folder-add-save"]').click({ force: true });
cy.wait("@folders");
cy.get('[data-test="dashboard-delete-folder-icon"]').each(($deleteIcon) => {
// Get the parent div and click the delete icon
cy.wrap($deleteIcon).parents('.q-tab').find('[data-test="dashboard-delete-folder-icon"]').click({ force: true });
cy.get('[data-test="confirm-button"]').click({ force: true });
});
cy.wait(100);
cy.get(".q-notification__message")
.contains("Folder deleted successfully")
.should("be.visible");
});
it("should create a dashboard within a folder and then delete dashboard and folder", () => {
// Create dynamic dashboard name
cy.wait(1000);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-name"]')
.click({ force: true })
.type(randomFolderName);
cy.get('[data-test="dashboard-folder-add-save"]').click({ force: true });
cy.get('[data-test="dashboard-add"]').click({ force: true });
cy.contains(randomFolderName).click({ force: true });
dashboardName = `${dashboardData.DashboardName}_${randomNumber}`;
cy.wait("@dashboards");
cy.wait(1000);
cy.get('[data-test="dashboard-add"]').click({ force: true });
cy.wait(2000);
cy.get('[data-test="add-dashboard-name"]').type(dashboardName);
cy.get('[data-test="dashboard-add-submit"]').click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true });
cy.contains(randomFolderName).click({ force: true });
cy.wait(200);
cy.get('[data-test="dashboard-delete"]:first').click({ force: true });
cy.get('[data-test="confirm-button"]').click({ force: true });
cy.wait(200);
cy.get('[data-test="dashboard-delete-folder-icon"]').each(($deleteIcon) => {
// Get the parent div and click the delete icon
cy.wrap($deleteIcon).parents('.q-tab').find('[data-test="dashboard-delete-folder-icon"]').click({ force: true });
cy.get('[data-test="confirm-button"]').click({ force: true });
});
cy.wait(100);
cy.get(".q-notification__message")
.contains("Folder deleted successfully")
.should("be.visible");
});
it("should display error if user creates folder with only spaces under folder name", () => {
// Create dynamic dashboard name
cy.wait(1000);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-name"]')
.click({ force: true })
.type(" ");
cy.get('[data-test="dashboard-folder-add-save"]').click({ force: true });
cy.contains("Name is required").should("be.visible");
});
it("should click on cancel on folder creation UI", () => {
// Create dynamic dashboard name
cy.wait(1000);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-cancel"]').click({ force: true });
cy.get('[data-test="dashboard-table"] > .q-table__top').should('be.visible')
});
it('should create folders and move a dashboard, then delete dashboard and folders', () => {
// Function to generate a random folder name
const randomFolderName = 'Folder' + Math.floor(Math.random() * 1000);
// Create a new folder with a random name
cy.wait(100);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-name"]')
.click({ force: true })
.type(randomFolderName);
cy.get('[data-test="dashboard-folder-add-save"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-new-folder-btn"]').click({ force: true });
cy.wait(100);
cy.get('[data-test="dashboard-folder-add-name"]')
.click({ force: true })
.type(randomFolderName + "move folder");
cy.get('[data-test="dashboard-folder-add-save"]').click({ force: true });
// Go to the newly created folder
cy.contains(randomFolderName).click({ force: true });
// Create a dashboard in the new folder
cy.wait(1000);
cy.get('[data-test="dashboard-add"]').click({ force: true });
cy.wait(1000);
cy.get('[data-test="add-dashboard-name"]').type('Dashboard in ' + randomFolderName);
cy.get('[data-test="dashboard-add-submit"]').click();
cy.url().should("include", dashboardData.ViewDashboardUrl);
cy.get('.flex.justify-between > :nth-child(1) > .q-btn > .q-btn__content > .q-icon').click();
cy.wait(200)
// Move the dashboard from the new folder to Folder 2
cy.contains('Dashboard in ' + randomFolderName)
.parent('tr')
.within(() => {
// Click on the Move to another Folder button
cy.wait(1000);
cy.get('[data-test="dashboard-move-to-another-folder"]').click({ force: true });
});
cy.get('.items-baseline > .q-field > .q-field__inner > .q-field__control > .q-field__append').click()
cy.get('.q-virtual-scroll__content').within(() => {
// Find the specific option and click on it
cy.contains(randomFolderName + "move folder").click({ force: true });
});
cy.get('[data-test="dashboard-folder-move"]').click({ force: true });
cy.contains(randomFolderName + "move folder").click({ force: true });
cy.wait(200);
cy.get('[data-test="dashboard-delete"]:first').click({ force: true });
cy.get('[data-test="confirm-button"]').click({ force: true });
cy.wait(200);
cy.get('[data-test="dashboard-delete-folder-icon"]').each(($deleteIcon) => {
// Get the parent div and click the delete icon
cy.wrap($deleteIcon).parents('.q-tab').find('[data-test="dashboard-delete-folder-icon"]').click({ force: true });
cy.get('[data-test="confirm-button"]').click({ force: true });
});
cy.wait(100);
cy.get(".q-notification__message")
.contains("Folder deleted successfully")
.should("be.visible");
});
});
@@ -1,258 +0,0 @@
///<reference types="cypress" />
import * as logstests from "../allfunctions/logs";
import "cypress-file-upload";
import logsdata from "../../../../test-data/logs_data.json"
// import logsdata from "../../data/logs_data.json";
import { getRandomText } from "../utils";
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
const { v4: uuidv4 } = require("uuid");
// Generate UUID
const uuid = uuidv4();
// Remove non-alphabetic characters from UUID
const alphaUuid = uuid.replace(/[^a-zA-Z]/g, "");
// Construct function name
const functionName = `automate${alphaUuid}`;
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Functions testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().baseUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.visit(
`web/pipeline/functions?org_identifier=${Cypress.env("ORGNAME")}`
);
cy.intercept("GET", "**/api/default/streams**").as("streams");
// cy.intercept('GET', '**/api/default/_search**').as('allsearch')
});
// This is a test case to navigate to the logs page
it("should display error when creating function without mandatory fields", () => {
// cy.get('[data-test="menu-link-pipeline-item"]').click({ force: true });
cy.contains("Create new function").click({ force: true });
cy.contains("Save").should("be.visible").click({ force: true });
cy.contains("Field is required").should("be.visible");
});
it("should display error on entering invalid name under function and save", () => {
// cy.get('[data-test="menu-link-pipeline-item"]').click({ force: true });
cy.contains("Create new function").click({ force: true });
cy.get(".q-pb-sm > .q-field > .q-field__inner > .q-field__control").type(
getRandomText
);
cy.contains("Save").should("be.visible").click({ force: true });
cy.contains("Invalid method name.").should("be.visible");
});
it("should display error on entering invalid function and save", () => {
// cy.get('[data-test="menu-link-pipeline-item"]').click({ force: true });
cy.contains("Create new function").click({ force: true });
cy.get(".q-pb-sm > .q-field > .q-field__inner > .q-field__control").type(
functionName
);
cy.get(".view-lines").type(".test=1");
cy.contains("Save").should("be.visible").click({ force: true });
cy.get(".q-notification__message")
.contains("Function saved successfully")
.should("be.visible");
cy.get('[data-test="functions-list-search-input"]').type(functionName);
cy.get("tr")
.contains(functionName)
.parent("tr")
.within(() => {
// Click the delete button
cy.get('button[title="Delete Function"]').click();
});
cy.get('[data-test="confirm-button"] > .q-btn__content').click();
});
it("should display error on adding function with same name", () => {
// cy.get('[data-test="menu-link-pipeline-item"]').click({ force: true });
cy.contains("Create new function").click({ force: true });
cy.get(".q-pb-sm > .q-field > .q-field__inner > .q-field__control").type(
functionName
);
cy.get(".view-lines").type(".test=1");
cy.contains("Save").should("be.visible").click({ force: true });
cy.get(".q-notification__message")
.contains("Function saved successfully")
.should("be.visible");
cy.contains("Create new function").click({ force: true });
cy.get(".q-pb-sm > .q-field > .q-field__inner > .q-field__control").type(
functionName
);
cy.get(".view-lines").type(".test=1");
cy.contains("Save").should("be.visible").click({ force: true });
cy.get(".q-notification__message")
.contains("Function creation failed")
.should("be.visible");
cy.contains("Cancel").click({ force: true });
cy.get('[data-test="functions-list-search-input"]').type(functionName);
cy.get("tr")
.contains(functionName)
.parent("tr")
.within(() => {
// Click the delete button
cy.get('button[title="Delete Function"]').click();
});
cy.get('[data-test="confirm-button"] > .q-btn__content').click();
});
it.skip("should add a function and associate a stream with the same", () => {
cy.contains("Create new function").click({ force: true });
cy.get(".q-pb-sm > .q-field > .q-field__inner > .q-field__control").type(
functionName
);
cy.get(".view-lines").type(".test=1");
cy.contains("Save").should("be.visible").click({ force: true });
cy.get(".q-notification__message")
.contains("Function saved successfully")
.should("be.visible");
cy.get('[data-test="function-stream-tab"]').click({ force: true });
cy.wait(2000);
cy.get('[data-test="stream-association-search-input"]').type(
"e2e_automate"
);
cy.get(
'[data-test="log-stream-table"] >>> :nth-child(2) > :nth-child(1) > :nth-child(2)'
).click();
// cy.get('[style="cursor: pointer;"] > :nth-child(3)').click({ force: true });
cy.contains("Associate Function").click({ force: true });
cy.get(
'[style="height: min-content; border: 1px solid black;"] > [colspan="100%"] > [style=""] > .q-table__container > .q-table__middle > .q-table > tbody > .q-tr > :nth-child(2) > .q-field > .q-field__inner > .q-field__control > .q-field__control-container'
).type(functionName);
cy.wait(2000);
cy.get(".q-item__label > span").click({ force: true });
cy.wait(1000);
cy.get("tr.q-tr")
.contains(functionName)
.parent("tr")
.within(() => {
// Click the delete button
cy.get(
'button[data-test="stream-association-delete-function-btn"]'
).click();
});
cy.get(
'[href="/web/functions/functions?org_identifier=default"] > .q-tab__content'
).click({ force: true });
cy.get('[data-test="functions-list-search-input"]').type(functionName);
cy.get("tr")
.contains(functionName)
.parent("tr")
.within(() => {
// Click the delete button
cy.get('button[title="Delete Function"]').click();
});
cy.get('[data-test="confirm-button"] > .q-btn__content').click();
});
it("should upload a enrichment table under functions", () => {
cy.wait(2000);
// cy.contains('Create new function').click({ force: true })
cy.get(
'[data-test="function-enrichment-table-tab"] > .q-tab__content > .q-tab__label'
).click({ force: true });
cy.contains("Add Enrichment Table").click({ force: true });
const { v4: uuidv4 } = require("uuid");
cy.fixture("enrichment_info.csv").then((fileContent) => {
const fileName = `enrichment_info_${uuidv4()}.csv`;
cy.get('input[type="file"]').attachFile({
fileContent: fileContent.toString(),
fileName: fileName,
mimeType: "text/csv",
});
cy.wait(5000);
cy.get(".q-input > .q-field__inner > .q-field__control").type(fileName);
cy.contains("Save").click({ force: true });
cy.wait(3000);
cy.reload();
// cy.get('[title="Delete Function"]').click({ force: true });
// cy.get('[data-test="confirm-button"]').click({ force: true });
cy.get("tbody tr").each(($row) => {
const functionName = $row.find("td.text-left:eq(1)").text();
// Check if the function name contains "enrichment_info"
if (functionName.includes("enrichment_info")) {
// Click the "Delete Function" button
cy.wrap($row)
.find('[title="Delete Function"]') // finds the delete function button and clicks on it
.click();
// You may need to handle any confirmation dialog that appears
cy.get('[data-test="confirm-button"]').click();
}
});
});
});
});
@@ -1,311 +0,0 @@
///<reference types="cypress" />
import * as logstests from "../allfunctions/logs";
import logsdata from "../../../../test-data/logs_data.json"
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Logs testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
cy.get("@search")
.its("response.body.hits")
.should("be.an", "array")
.then((hits) => {
console.log(hits, "hits");
if (hits.length > 0) {
expect(Object.keys(hits[0]).length).to.be.at.most(5);
// Add more assertions if needed
}
});
}
function quickModeOff() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
cy.get("@search")
.its("response.body.hits")
.should("be.an", "array")
.then((hits) => {
console.log(hits, "hits");
if (hits.length > 0) {
expect(Object.keys(hits[0]).length).greaterThan(5)
// Add more assertions if needed
}
});
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.visit(`${logData.logsUrl}?org_identifier=${Cypress.env("ORGNAME")}`);
cy.intercept("POST", "**/api/default/_search**").as("allsearch");
cy.wait("@allsearch");
cy.selectStreamAndStreamTypeForLogs(logData.Stream);
cy.intercept("GET", "**/api/default/streams**").as("streams");
});
it("should display results for fast mode off for match all case", () => {
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all('provide_credentials')")
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.get('[data-test="logs-search-bar-quick-mode-toggle-btn"]').click()
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
quickModeOff()
});
it("should display results for fast mode off and match all", () => {
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all('provide_credentials')")
cy.get('[data-test="logs-search-bar-quick-mode-toggle-btn"]').click()
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
quickModeOff()
});
it("should display results for fast mode on and match all", () => {
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all('provide_credentials')")
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
applyQueryButton()
});
it("should display results for fast mode on and match all raw ignore case", () => {
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all_raw_ignore_case('provide_credentials')")
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
applyQueryButton()
});
it("should display results for fast mode on and run query", () => {
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
applyQueryButton()
});
it("should display results for fast mode on with sql mode on and run query", () => {
cy.get('[aria-label="SQL Mode"]').click({force:true})
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content')
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// Type the value of a variable into an input field
cy.wait(3000);
applyQueryButton()
});
it("should display correct results when fast mode on", () => {
// Wait for 2 seconds
cy.wait(2000);
// Type the value of a variable into an input field
cy.intercept("GET", logData.ValueQuery).as("value");
cy.get('[data-cy="date-time-button"]').click({ force: true });
cy.get(
'[data-test="date-time-relative-15-m-btn"] > .q-btn__content > .block'
).click({
force: true,
});
logstests.addFeildandSubValue();
logstests.addsubFieldValue();
//click on the field
// get the data from the value variable
cy.wait("@value", { timeout: 5000 })
.its("response.statusCode")
.should("eq", 200);
logstests.addsubFieldValue();
cy.get("@value").its("response.body.hits").should("be.an", "array");
logstests.clickFieldSubvalue();
cy.wait(2000);
logstests.valueAddedOnPlusClick();
cy.intercept("GET", logData.ValueQuery).as("value");
logstests.clickOnFirstField();
cy.wait("@value", { timeout: 4000 })
.its("response.statusCode")
.should("eq", 200);
cy.get("@value").its("response.body.hits").should("be.an", "array");
logstests.addSecondFieldOnEditor();
logstests.clickOnEqualToButton();
logstests.bothFieldAddedOnEqualToClick();
cy.wait(2000);
cy.get('[data-test="logs-search-result-logs-table"]')
.find("tbody")
.find("tr")
.eq(1)
.click({ force: true });
cy.wait(300);
cy.get(
'[data-test="log-detail-json-content"] >>> [data-test="log-details-include-exclude-field-btn"] :first'
).click({ force: true });
cy.get('[data-test="log-details-include-field-btn"]').click({
force: true,
});
cy.get('[data-test="logs-search-bar-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
const cleanedText = removeUTFCharacters(text);
// Confirm that the text contains 'code' not equal to '200'
expect(cleanedText).to.include(
"code='200' and code='200' and _timestamp="
);
});
applyQueryButton();
cy.get('[data-test="logs-search-bar-query-editor"]').type(
"{selectall}{del}"
);
applyQueryButton();
cy.get('[data-test="logs-search-result-logs-table"]')
.find("tbody")
.find("tr")
.eq(2)
.click({ force: true });
cy.wait(2000);
cy.get(
'[data-test="log-detail-json-content"] >>> [data-test="log-details-include-exclude-field-btn"] :first'
).click({ force: true });
cy.get('[data-test="log-details-exclude-field-btn"]', {
timeout: 2000,
}).click({ force: true });
// cy.wait(2000);
cy.get('[data-test="logs-search-bar-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
const cleanedText = removeUTFCharacters(text);
// Confirm that the text contains 'code' not equal to '200'
expect(cleanedText).to.include("_timestamp!=");
applyQueryButton();
cy.wait(200);
// cy.get('[data-test="[data-test="logs-search-bar-query-editor"]"]').type("{selectall}{del}");
// applyQueryButton();
cy.get('[data-test="logs-search-result-logs-table"]')
.find("tbody")
.find("tr")
.eq(2)
.click({ force: true });
cy.wait(2000);
cy.get(
'[data-test="log-detail-json-content"] >>> [data-test="log-details-include-exclude-field-btn"] :first'
).click({ force: true });
cy.contains("Add field to table").click({ force: true });
applyQueryButton();
});
});
});
@@ -1,571 +0,0 @@
///<reference types="cypress" />
import * as logstests from "../allfunctions/logs";
import logsdata from "../../../../test-data/logs_data.json"
// import logsdata from "../../data/logs_data.json";
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Logs testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.visit(`${logData.logsUrl}?org_identifier=${Cypress.env("ORGNAME")}`);
cy.intercept("POST", "**/api/default/_search**").as("allsearch");
cy.selectStreamAndStreamTypeForLogs(logData.Stream);
applyQueryButton()
cy.wait("@allsearch");
cy.intercept("GET", "**/api/default/streams**").as("streams");
});
it.skip("should display results for limit query", () => {
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all('provide_credentials') limit 5");
cy.wait(2000);
cy.get('[aria-label="SQL Mode"]').click({ force: true });
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content');
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
cy.wait(2000);
cy.get(".search-list > :nth-child(1) > .text-left").contains(
"Showing 1 to 5 out of 5"
);
cy.get('[aria-label="SQL Mode"]').click({ force: true });
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all('provide_credentials')");
cy.get('[aria-label="SQL Mode"]').click({ force: true });
cy.wait(2000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
cy.get('[data-test="logs-search-result-records-per-page"]').click();
cy.get(".q-virtual-scroll__content:last").click();
// Select "25" from the dropdown using contains
cy.wait(2000);
cy.contains(".q-item__label", "25").should("be.visible").click();
cy.get(".search-list > :nth-child(1) > .text-left")
.contains("Showing 1 to 5 out of 5")
.should("not.exist");
});
it("should redirect to logs after clicking on stream explorer via stream page", () => {
applyQueryButton()
cy.wait(2000);
cy.get('[data-cy="index-field-search-input"]').type("code");
cy.get('[data-test="log-search-expand-code-field-btn"]').click();
cy.wait(2000);
cy.get('[data-test="logs-search-subfield-add-code-200"]').click({
force: true,
});
cy.get('[data-cy="date-time-button"] > .q-btn__content').click();
cy.get('[data-test="date-time-relative-15-m-btn"]').click();
cy.get('[data-cy="search-bar-refresh-button"]').click();
cy.get('[data-test="logs-search-saved-views-btn"]').click();
cy.wait(2000);
cy.get('[data-test="add-alert-name-input"]').type("streamlogsnavigate");
cy.get('[data-test="saved-view-dialog-save-btn"]').click();
cy.get('[data-test="menu-link-/streams-item"]').click({ force: true });
cy.get('[title="Explore"]:first').click({ force: true });
cy.url().should("include", "logs");
cy.wait(2000);
cy.wait("@allsearch");
cy.get(
'[data-test="logs-search-saved-views-btn"] > .q-btn-dropdown__arrow-container > .q-btn__content > .q-icon'
).click({ force: true });
cy.wait(2000);
cy.contains("streamlogsnavigate").click();
cy.wait(200);
cy.get('[data-test="logs-search-bar-query-editor"]').then((editor) => {
let text = editor.text();
text = removeUTFCharacters(text);
const cleanedText = removeUTFCharacters(text);
expect(cleanedText).to.include("code='200'");
});
cy.get(
'[data-test="logs-search-saved-views-btn"] > .q-btn-dropdown__arrow-container > .q-btn__content > .q-icon'
).click();
cy.get(
'[data-test="logs-search-bar-delete-streamlogsnavigate-saved-view-btn"]'
).each(($button, index) => {
if (index === 2) {
// Click on the delete button for the first item
cy.wrap($button).click();
cy.get('[data-test="confirm-button"]').click({ force: true });
}
});
});
it("should reset the editor on clicking reset filter button", () => {
// Wait for 2 seconds
cy.wait(2000);
// Type the value of a variable into an input field
cy.intercept("GET", logData.ValueQuery).as("value");
cy.get('[data-cy="date-time-button"]').click({ force: true });
cy.get(
'[data-test="date-time-relative-15-m-btn"] > .q-btn__content > .block'
).click({
force: true,
});
cy.get('[data-test="logs-search-bar-query-editor"] > .monaco-editor')
.click() // Click on the editor to focus
.type("match_all_raw_ignore_case('provide_credentials')");
cy.wait(2000);
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content');
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
cy.contains("Reset Filters").click({ force: true });
cy.get('[data-test="logs-search-bar-query-editor"]').should(
"have.value",
""
);
});
// Remove Skip after bug fix
it.skip("should enter query, reset and then again click the field from LHS", () => {
// cy.intercept("GET", logData.ValueQuery).as("value");
cy.get('[aria-label="SQL Mode"]').click({ force: true });
// cy.get('[data-cy="index-field-search-input"]').type("kubernetes_host")
// cy.wait(3000)
// cy.get(
// '[data-test="log-search-expand-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-btn"]'
// ).click({ force: true });
// cy.contains("Reset Filters").click({ force: true });
// cy.get(
// '[data-test="log-search-expand-kubernetes_annotations_kubectl_kubernetes_io_default_container-field-btn"]'
// ).click({ force: true });
// cy.get(".q-notification__message").should("not.exist");
});
it("should add invalid query and display error", () => {
// Type the value of a variable into an input field
cy.intercept("GET", logData.ValueQuery).as("value");
applyQueryButton();
cy.get('[data-cy="date-time-button"]').click({ force: true });
cy.get(
'[data-test="date-time-relative-15-m-btn"] > .q-btn__content > .block'
).click({
force: true,
});
cy.get('[data-test="logs-search-bar-query-editor"]', {
timeout: 2000,
}).type("kubernetes");
cy.wait(2000);
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click({
force: true,
});
cy.wait("@allsearch");
cy.get('[data-test="logs-search-error-message"]', { timeout: 2000 }).should(
"exist"
);
});
it("should not display error if match all case added in log query search", () => {
// Type the value of a variable into an input field
cy.intercept("GET", logData.ValueQuery).as("value");
applyQueryButton();
cy.get('[data-cy="date-time-button"]').click({ force: true });
cy.get(
'[data-test="date-time-relative-15-m-btn"] > .q-btn__content > .block'
).click({
force: true,
});
cy.get('[data-test="logs-search-bar-query-editor"]', {
timeout: 2000,
}).type("match_all('code')");
cy.wait(200);
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click({
force: true,
});
cy.wait("@allsearch");
cy.get('[data-test="log-table-column-1-@timestamp"]', {
timeout: 2000,
}).should("exist");
});
it("should change stream settings and click on search stream", () => {
// Type the value of a variable into an input field
cy.get('[data-test="menu-link-/streams-item"]').click({ force: true });
cy.get('[data-test="streams-search-stream-input"]').type("e2e_automate");
cy.get('[title="Stream Detail"]:first').click({ force: true });
cy.get(':nth-child(2) > [data-test="schema-stream-index-select"]').click();
cy.get(".q-virtual-scroll__content").within(() => {
cy.contains("Full text search").click();
});
cy.get('[data-test="schema-update-settings-button"]').click({
force: true,
});
cy.get(".col-auto > .q-btn > .q-btn__content").click({ force: true });
cy.get('[title="Explore"]:first').click({ force: true });
cy.get('[data-test="log-table-column-0-@timestamp"]').should("exist");
});
it("should display error if blank spaces added under stream name and clicked create stream ", () => {
cy.get('[data-test="menu-link-/streams-item"]').click({ force: true });
cy.get('[data-test="log-stream-add-stream-btn"]').click({ force: true });
cy.get('[data-test="add-stream-name-input"]').type(" ");
cy.get('[data-test="save-stream-btn"]').click({ force: true });
cy.contains("Field is required").should("exist");
});
it("should display error if create stream is clicked without adding name", () => {
cy.get('[data-test="menu-link-/streams-item"]').click({ force: true });
cy.get('[data-test="log-stream-add-stream-btn"]').click({ force: true });
cy.get('[data-test="save-stream-btn"]').click({ force: true });
cy.contains("Field is required").should("exist");
});
it.skip("should match total - SQL mode ignore case for normal and index search", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// First query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "SELECT * FROM \"e2e_automate\" where match_all_raw_ignore_case('logger')",
start_time: 1709726643160000,
end_time: 1710072243160000,
from: 0,
size: 250,
quick_mode: true,
sql_mode: "full",
track_total_hits: true,
},
},
}).then((response1) => {
const totalLogs1 = response1.body.total;
// Second query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "SELECT * FROM \"e2e_automate\" where match_all('logger')",
start_time: 1709726508369000,
end_time: 1710072108369000,
from: 0,
size: 250,
quick_mode: true,
sql_mode: "full",
track_total_hits: true,
},
},
}).then((response2) => {
const totalLogs2 = response2.body.total;
// Assertion
expect(totalLogs1).to.equal(totalLogs2);
});
});
});
it.skip("should match total - SQL mode match_all for normal and index search", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// First query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "SELECT * FROM \"e2e_automate\" where match_all('logger')",
start_time: 1709705928581000,
end_time: 1710051528581000,
from: 0,
size: 250,
quick_mode: true,
sql_mode: "full",
track_total_hits: true,
},
},
}).then((response1) => {
const totalLogs1 = response1.body.total;
// Second query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "SELECT * FROM \"e2e_automate\" where match_all_raw('logger')",
start_time: 1709706092870000,
end_time: 1710051692870000,
from: 0,
size: 250,
quick_mode: true,
sql_mode: "full",
track_total_hits: true,
},
},
}).then((response2) => {
const totalLogs2 = response2.body.total;
// Assertion
expect(totalLogs1).to.equal(totalLogs2);
});
});
});
it("should match total - histogram mode match all for normal and index search", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// First query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "select * from \"e2e_automate\" WHERE match_all('logger')",
start_time: 1709725454701000,
end_time: 1710071054701000,
from: 0,
size: 0,
quick_mode: true,
track_total_hits: true,
},
aggs: {
histogram:
"select histogram(_timestamp, '30 minute') AS zo_sql_key, count(*) AS zo_sql_num from query GROUP BY zo_sql_key ORDER BY zo_sql_key",
},
},
}).then((response1) => {
const totalLogs1 = response1.body.total;
// Second query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "select * from \"e2e_automate\" WHERE match_all_raw('logger')",
start_time: 1709725511382000,
end_time: 1710071111382000,
from: 0,
size: 0,
quick_mode: true,
track_total_hits: true,
},
aggs: {
histogram:
"select histogram(_timestamp, '30 minute') AS zo_sql_key, count(*) AS zo_sql_num from query GROUP BY zo_sql_key ORDER BY zo_sql_key",
},
},
}).then((response2) => {
const totalLogs2 = response2.body.total;
// Assertion
expect(totalLogs1).to.equal(totalLogs2);
});
});
});
it("should match total - histogram mode ignore case for normal and index search test", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// First query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "select * from \"e2e_automate\" WHERE match_all('logger')",
start_time: 1709725454701000,
end_time: 1710071054701000,
from: 0,
size: 0,
quick_mode: true,
track_total_hits: true,
},
aggs: {
histogram:
"select histogram(_timestamp, '30 minute') AS zo_sql_key, count(*) AS zo_sql_num from query GROUP BY zo_sql_key ORDER BY zo_sql_key",
},
},
}).then((response1) => {
const totalLogs1 = response1.body.total;
// Second query
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/_search?type=logs`,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
body: {
query: {
sql: "select * from \"e2e_automate\" WHERE match_all_raw_ignore_case('logger')",
start_time: 1709725511382000,
end_time: 1710071111382000,
from: 0,
size: 0,
quick_mode: true,
track_total_hits: true,
},
aggs: {
histogram:
"select histogram(_timestamp, '30 minute') AS zo_sql_key, count(*) AS zo_sql_num from query GROUP BY zo_sql_key ORDER BY zo_sql_key",
},
},
}).then((response2) => {
const totalLogs2 = response2.body.total;
// Assertion
expect(totalLogs1).to.equal(totalLogs2);
});
});
});
it("should add timestamp to editor save this view and switch", () => {
cy.wait(1000)
cy.get('[data-test="log-table-column-1-@timestamp"] > .flex > .ellipsis').click();
cy.get(':nth-child(1) > [data-test="log-details-include-exclude-field-btn"] > .q-btn__content > .q-icon').click();
cy.get('[data-test="log-details-include-field-btn"]').click();
cy.get('[data-test="close-dialog"] > .q-btn__content').click();
cy.get('[data-test="logs-search-saved-views-btn"] > .q-btn-dropdown--current > .q-btn__content > :nth-child(1)').click();
cy.get('[data-test="add-alert-name-input"]').type("e2etimestamp");
cy.get('[data-test="saved-view-dialog-save-btn"] > .q-btn__content').click()
cy.get('[data-test="logs-search-saved-views-btn"] > .q-btn-dropdown__arrow-container > .q-btn__content > .q-icon').click()
cy.get('.q-item__label').contains('timestamp').click();
cy.get(".q-notification__message").should(
"contain",
"e2etimestamp view applied successfully"
);
cy.wait(3000)
cy.get(
'[data-test="logs-search-saved-views-btn"] > .q-btn-dropdown__arrow-container > .q-btn__content > .q-icon'
).click({force:true});
cy.get(".saved-view-item")
.first()
.within(() => {
cy.get(
'[data-test="logs-search-bar-delete-e2etimestamp-saved-view-btn"]'
).click({ force: true });
});
cy.get('[data-test="confirm-button"] > .q-btn__content').click({
force: true,
});
});
});
@@ -1,190 +0,0 @@
//<reference types="cypress" />
import * as logstests from "../allfunctions/logs";
import logsdata from "../../../../test-data/logs_data.json";
// import logsdata from "../../data/logs_data.json";
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
function generateRandomName() {
const characters = "abcdefghijklmnopqrstuvwxyz0123456789";
let randomName = "e2e_automate-";
for (let i = 0; i < 5; i++) {
randomName += characters.charAt(
Math.floor(Math.random() * characters.length)
);
}
randomName += "-1";
return randomName;
}
describe("Logs Quickmode testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.visit(`${logData.logsUrl}?org_identifier=${Cypress.env("ORGNAME")}`);
cy.intercept("POST", "**/api/default/_search**").as("allsearch");
cy.selectStreamAndStreamTypeForLogs(logData.Stream);
applyQueryButton();
cy.wait(2000);
cy.get('[data-test="logs-search-bar-quick-mode-toggle-btn"]').then(($el) => {
if ($el.find('.q-toggle__inner--falsy').length > 0) {
cy.wrap($el).click({ force: true });
}
});
// cy.get('[data-test="logs-search-bar-quick-mode-toggle-btn"]').click({force:true})
cy.wait("@allsearch");
cy.intercept("GET", "**/api/default/streams**").as("streams");
});
it("should click on interesting fields icon and display query in editor", () => {
cy.get('[data-cy="index-field-search-input"]').type("_timestamp");
cy.wait(2000);
cy.get(".field-container")
.find(
'[data-test="log-search-index-list-interesting-_timestamp-field-btn"]:last'
)
.click({ force: true });
cy.get('[aria-label="SQL Mode"] > .q-toggle__inner').click();
cy.get('[data-test="logs-search-bar-query-editor"]').contains("_timestamp");
});
it("should display quick mode toggle button", () => {
cy.get('[data-test="logs-search-bar-quick-mode-toggle-btn"]').should(
"be.visible"
);
});
it("should click on interesting fields icon in histogram mode and run query", () => {
cy.get('[data-cy="index-field-search-input"]').type("_timestamp");
cy.wait(2000);
cy.get(".field-container")
.find(
'[data-test="log-search-index-list-interesting-_timestamp-field-btn"]:last'
)
.click({ force: true });
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click();
cy.get('[data-test="log-table-column-0-source"]').contains("_timestamp");
});
it("should display error on entering random text in histogram mode when quick mode is on", () => {
cy.get('[data-test="logs-search-bar-query-editor"]').type("oooo");
cy.wait(2000);
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click();
cy.get('[data-test="logs-search-error-message"]').contains(
"Error: Search field not found."
);
});
it("should display selected interestesing field and order by - as default in editor", () => {
cy.get(".field-container")
.find(
'[data-test="log-search-index-list-interesting-_timestamp-field-btn"]:last'
)
.click({ force: true });
cy.get('[aria-label="SQL Mode"] > .q-toggle__inner').click();
cy.get('[data-test="logs-search-bar-query-editor"]').contains(
'_timestamp FROM "e2e_automate" ORDER BY _timestamp DESC'
);
});
it("should adding/removing interesting field removes it from editor and results too", () => {
cy.get('[data-cy="index-field-search-input"]').type("_timestamp");
cy.wait(2000);
cy.get(".field-container")
.find(
'[data-test="log-search-index-list-interesting-_timestamp-field-btn"]:last'
)
.click({ force: true });
cy.get('[data-cy="index-field-search-input"]').clear();
cy.get('[data-cy="index-field-search-input"]').type("kubernetes_pod_id");
cy.wait(2000);
cy.get(
'[data-test="log-search-index-list-interesting-kubernetes_pod_id-field-btn"]:last'
).click({ force: true });
cy.get('[aria-label="SQL Mode"] > .q-toggle__inner').click();
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click();
cy.get('[data-test="log-table-column-0-source"]').contains(
"kubernetes_pod_id"
);
cy.get(
'[data-test="log-search-index-list-interesting-kubernetes_pod_id-field-btn"]:last'
).click({ force: true });
cy.wait(2000);
cy.get('[data-test="logs-search-bar-query-editor"]').should(
"not.contain",
"kubernetes_pod_id"
);
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').click();
cy.get('[data-test="log-table-column-0-source"]').should(
"not.contain",
"kubernetes_pod_id"
);
});
it("should display order by in sql mode by default even after page reload", () => {
cy.get('[data-cy="index-field-search-input"]').type("_timestamp");
cy.wait(2000);
cy.get(".field-container")
.find(
'[data-test="log-search-index-list-interesting-_timestamp-field-btn"]:last'
)
.click({ force: true });
cy.get('[aria-label="SQL Mode"] > .q-toggle__inner').click();
cy.reload();
cy.wait(4000)
cy.get('[data-test="logs-search-bar-query-editor"]').contains('SELECT _timestamp FROM "e2e_automate" ORDER BY _timestamp DESC')
});
});
File diff suppressed because it is too large Load Diff
@@ -1,126 +0,0 @@
///<reference types="cypress" />
import * as menutests from "../allfunctions/menufunctions";
import logsdata from "../../../../test-data/logs_data.json"
// import logsdata from "../../data/logs_data.json";
// import { login } from "../../support/commons"
// import { selectStreamAndStreamType } from "../../support/log-commons";
Cypress.on("uncaught:exception", (err, runnable) => {
return false;
});
describe("Logs testcases", () => {
let logData;
function removeUTFCharacters(text) {
// console.log(text, "tex");
// Remove UTF characters using regular expression
return text.replace(/[^\x00-\x7F]/g, " ");
}
function applyQueryButton() {
// click on the run query button
// Type the value of a variable into an input field
cy.intercept("POST", logData.applyQuery).as("search");
cy.wait(3000);
cy.get("[data-test='logs-search-bar-refresh-btn']", {
timeout: 2000,
}).click({ force: true });
// get the data from the search variable
cy.wait("@search").its("response.statusCode").should("eq", 200);
cy.get("@search").its("response.body.hits").should("be.an", "array");
}
before(function () {
cy.fixture("log").then(function (data) {
logData = data;
});
console.log("--logData--", logData);
});
beforeEach(() => {
cy.intercept("*", (req) => {
delete req.headers["if-none-match"];
});
cy.login();
// ("ingests logs via API", () => {
const orgId = Cypress.env("ORGNAME");
const streamName = "e2e_automate";
const basicAuthCredentials = btoa(
`${Cypress.env("EMAIL")}:${Cypress.env("PASSWORD")}`
);
// Making a POST request using cy.request()
cy.request({
method: "POST",
url: `${Cypress.config().ingestionUrl}/api/${orgId}/${streamName}/_json`,
body: logsdata,
headers: {
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
},
}).then((response) => {
// Logging response content to the Cypress console
cy.log(response.body);
// Assertion: Ensure the response status is 200 OK
expect(response.status).to.eq(
200,
`Expected status code 200, but got ${response.status}`
);
});
// });
cy.intercept("GET", "**/api/default/organizations**").as("allorgs");
cy.intercept("GET", "**/api/default/functions**").as("functions");
cy.visit(`${logData.logsUrl}?org_identifier=${Cypress.env("ORGNAME")}`);
cy.intercept("POST", "**/api/default/_search**").as("allsearch");
cy.wait("@allsearch");
cy.selectStreamAndStreamTypeForLogs(logData.Stream);
applyQueryButton()
cy.intercept("GET", "**/api/default/streams**").as("streams")
cy.intercept('GET', '/api/default/e2e_automate/_values?').as('getValues')
});
// This test checks if menu items load and pag url is updated as per menu
it.skip("Should click on all options under Menu", () => {
cy.get('.q-list').should('be.visible')
// cy.get('.q-drawer__content > .q-list').should('be.visible')
cy.get('[data-test="menu-link-/logs-item"]').click({force:true})
cy.url().should("include", "logs")
cy.get('[data-test="logs-search-bar-show-histogram-toggle-btn"]').should('be.visible')
cy.get('[data-test="menu-link-/metrics-item"]').click({ force: true })
cy.intercept("POST", logData.applyQuery).as("search");
cy.url().should("include", "metrics")
cy.contains('Add to dashboard').should('be.visible')
cy.get('[data-test="menu-link-/traces-item"]').click({ force: true })
cy.url().should("include", "traces")
cy.get('[data-cy="search-bar-refresh-button"] > .q-btn__content').should('be.visible')
cy.contains('Dashboard').click({ force: true })
cy.url().should("include", "dashboard")
cy.get('[data-test="dashboard-add"]').should('be.be.visible')
cy.wait(2000)
cy.get('[data-test="menu-link-/functions-item"]').click({ force: true })
cy.url().should("include", "functions")
cy.contains('Create new function').should('be.visible')
cy.wait(2000)
cy.get('[data-test="menu-link-/dashboards-item"]').click({ force: true })
cy.url().should("include", "dashboards")
cy.get('[data-test="dashboard-add"]').should('be.visible')
cy.wait(2000)
cy.get('[data-test="menu-link-/streams-item"]').click()
cy.url().should("include", "streams")
cy.get('[data-test="log-stream-refresh-stats-btn"]').should('be.visible')
cy.get('[data-test="menu-link-/alerts-item"]').click({ force: true })
cy.url().should("include", "alerts")
cy.get('[data-test="alert-list-add-alert-btn"]').should('be.visible')
cy.get('[data-test="menu-link-/ingestion-item"]').click({ force: true })
cy.url().should("include", "ingestion")
cy.contains('Reset Token').should('be.visible')
cy.get('[data-test="menu-link-/iam-item"]').click({ force: true })
cy.url().should("include", "users")
cy.get('[data-test="iam-users-tab"]').should('be.visible')
});
});
+75
View File
@@ -0,0 +1,75 @@
class UnflattenedPage {
constructor(page) {
this.page = page;
}
get streamsMenu() {
return this.page.locator('[data-test="menu-link-\\/streams-item"]');
}
get searchStreamInput() {
return this.page.getByPlaceholder('Search Stream');
}
get streamDetailButton() {
return this.page.getByRole('button', { name: 'Stream Detail' }).first();
}
get storeOriginalDataToggle() {
return this.page.locator('[data-test="log-stream-store-original-data-toggle-btn"] div').nth(2);
}
get schemaUpdateButton() {
return this.page.locator('[data-test="schema-update-settings-button"]');
}
get closeButton() {
return this.page.locator('button').filter({ hasText: 'close' });
}
get exploreButton() {
return this.page.getByRole('button', { name: 'Explore' }).first();
}
get dateTimeButton() {
return this.page.locator('[data-test="date-time-btn"]');
}
get relativeTab() {
return this.page.locator('[data-test="date-time-relative-tab"]');
}
get logTableRowExpandMenu() {
return this.page.locator('[data-test="log-table-column-1-_timestamp"] [data-test="table-row-expand-menu"]');
}
get logSourceColumn() {
return this.page.locator('[data-test="log-table-column-0-source"]');
}
get o2IdText() {
return this.page.locator('[data-test="log-detail-json-content"] [data-test="log-expand-detail-key-_o2_id-text"]');
}
get unflattenedTab() {
return this.page.locator('[data-test="log-detail-json-content"] [data-test="tab-unflattened"]');
}
get closeDialog() {
return this.page.locator('[data-test="close-dialog"]');
}
get indexFieldSearchInput() {
return this.page.locator('[data-cy="index-field-search-input"]');
}
get sqlModeToggle() {
return this.page.locator('[aria-label="SQL Mode"] > .q-toggle__inner');
}
get logsSearchBarQueryEditor() {
return this.page.locator('[data-test="logs-search-bar-query-editor"]');
}
}
export default UnflattenedPage;
@@ -2,58 +2,85 @@ import { test, expect } from "@playwright/test";
import logData from "../../ui-testing/cypress/fixtures/log.json";
import { log } from "console";
import logsdata from "../../test-data/logs_data.json";
import UnflattenedPage from "../pages/unflattened";
test.describe.configure({ mode: 'parallel' });
test.describe.configure({ mode: "parallel" });
const streamName = `stream${Date.now()}`;
async function login(page) {
await page.goto(process.env["ZO_BASE_URL"]);
// await page.getByText('Login as internal user').click();
// await page.getByText("Login as internal user").click();
await page.waitForTimeout(1000);
await page
.locator('[data-cy="login-user-id"]')
.fill(process.env["ZO_ROOT_USER_EMAIL"]);
//Enter Password
await page.locator('label').filter({ hasText: 'Password *' }).click();
await page.locator("label").filter({ hasText: "Password *" }).click();
await page
.locator('[data-cy="login-password"]')
.fill(process.env["ZO_ROOT_USER_PASSWORD"]);
await page.locator('[data-cy="login-sign-in"]').click();
}
async function toggleQuickModeIfOff(page) {
await page.waitForSelector(
'[data-test="logs-search-bar-quick-mode-toggle-btn"]'
);
const toggleButton = await page.$(
'[data-test="logs-search-bar-quick-mode-toggle-btn"] > .q-toggle__inner'
);
const isSwitchedOff = await toggleButton.evaluate((node) =>
node.classList.contains("q-toggle__inner--falsy")
);
if (isSwitchedOff) {
await toggleButton.click();
}
}
async function ingestion(page) {
const orgId = process.env["ORGNAME"];
const streamName = "e2e_automate";
const basicAuthCredentials = Buffer.from(
`${process.env["ZO_ROOT_USER_EMAIL"]}:${process.env["ZO_ROOT_USER_PASSWORD"]}`
).toString('base64');
).toString("base64");
const headers = {
"Authorization": `Basic ${basicAuthCredentials}`,
Authorization: `Basic ${basicAuthCredentials}`,
"Content-Type": "application/json",
};
const response = await page.evaluate(async ({ url, headers, orgId, streamName, logsdata }) => {
const fetchResponse = await fetch(`${url}/api/${orgId}/${streamName}/_json`, {
method: 'POST',
const response = await page.evaluate(
async ({ url, headers, orgId, streamName, logsdata }) => {
const fetchResponse = await fetch(
`${url}/api/${orgId}/${streamName}/_json`,
{
method: "POST",
headers: headers,
body: JSON.stringify(logsdata),
}
);
return await fetchResponse.json();
},
{
url: process.env.INGESTION_URL,
headers: headers,
body: JSON.stringify(logsdata)
});
return await fetchResponse.json();
}, {
url: process.env.INGESTION_URL,
headers: headers,
orgId: orgId,
streamName: streamName,
logsdata: logsdata
});
orgId: orgId,
streamName: streamName,
logsdata: logsdata,
}
);
console.log(response);
}
const selectStreamAndStreamTypeForLogs = async (page, stream) => {
await page.waitForTimeout(
4000); await page.locator(
'[data-test="log-search-index-list-select-stream"]').click({ force: true }); await page.locator(
"div.q-item").getByText(`${stream}`).first().click({ force: true });
await page.waitForTimeout(4000);
await page
.locator('[data-test="log-search-index-list-select-stream"]')
.click({ force: true });
await page
.locator("div.q-item")
.getByText(`${stream}`)
.first()
.click({ force: true });
};
test.describe("Unflattened testcases", () => {
@@ -77,9 +104,9 @@ test.describe("Unflattened testcases", () => {
test.beforeEach(async ({ page }) => {
await login(page);
await page.waitForTimeout(1000)
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000)
await page.waitForTimeout(2000);
await page.goto(
`${logData.logsUrl}?org_identifier=${process.env["ORGNAME"]}`
@@ -89,47 +116,215 @@ test.describe("Unflattened testcases", () => {
await applyQueryButton(page);
});
test('stream to toggle store orginal data toggle and display o2 id', async ({ page }) => {
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill('e2e_automate');
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="log-stream-store-original-data-toggle-btn"] div').nth(2).click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
await page.locator('button').filter({ hasText: 'close' }).click();
await page.getByRole('button', { name: 'Explore' }).first().click();
await page.waitForTimeout(1000);
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-tab"]').click();
await page.waitForTimeout(2000);
await page.locator('[data-test="log-table-column-1-_timestamp"] [data-test="table-row-expand-menu"]').click();
await page.locator('[data-test="log-table-column-0-source"]').click()
await page.waitForTimeout(1000);
await page.locator('[data-test="log-detail-json-content"] [data-test="log-expand-detail-key-_o2_id-text"]').click();
await page.locator('[data-test="log-detail-json-content"] [data-test="tab-unflattened"]').click();
await page.waitForTimeout(1000);
await page.locator('[data-test="close-dialog"]').click();
await page.locator('[data-test="menu-link-\\/streams-item"]').click();
await page.getByPlaceholder('Search Stream').click();
await page.getByPlaceholder('Search Stream').fill('e2e_automate');
await page.getByRole('button', { name: 'Stream Detail' }).first().click();
await page.locator('[data-test="log-stream-store-original-data-toggle-btn"] div').nth(2).click();
await page.locator('[data-test="schema-update-settings-button"]').click();
await page.locator('button').filter({ hasText: 'close' }).click();
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
await page.getByRole('button', { name: 'Explore' }).first().click();
await page.waitForTimeout(3000);
await page.locator('[data-test="date-time-btn"]').click();
await page.locator('[data-test="date-time-relative-tab"]').click();
await page.waitForTimeout(2000);
await page.locator('[data-test="log-table-column-1-_timestamp"] [data-test="table-row-expand-menu"]').click();
await page.waitForTimeout(2000);
await page.getByText('arrow_drop_down_timestamp:').click();
test("stream to toggle store original data toggle and display o2 id", async ({ page }) => {
const unflattenedPage = new UnflattenedPage(page);
// Navigate to Streams Menu
await unflattenedPage.streamsMenu.waitFor(); // Wait for the streams menu to be visible
await unflattenedPage.streamsMenu.click();
// Search for Stream and access details
await unflattenedPage.searchStreamInput.waitFor(); // Wait for the search input to be ready
await unflattenedPage.searchStreamInput.click();
await unflattenedPage.searchStreamInput.fill("e2e_automate");
await unflattenedPage.streamDetailButton.waitFor(); // Ensure the stream detail button is visible
await unflattenedPage.streamDetailButton.click();
// Toggle 'Store Original Data' and update schema
await unflattenedPage.storeOriginalDataToggle.waitFor(); // Wait for the toggle to be visible
await unflattenedPage.storeOriginalDataToggle.click();
await unflattenedPage.schemaUpdateButton.waitFor(); // Wait for the schema update button to be clickable
await unflattenedPage.schemaUpdateButton.click();
await page.waitForTimeout(1000); // Ensure the schema update is processed
await ingestion(page); // Custom ingestion function
await page.waitForTimeout(2000); // Allow time for ingestion
// Close the dialog and explore the stream
await unflattenedPage.closeButton.waitFor(); // Wait for the close button to be visible
await unflattenedPage.closeButton.click();
await unflattenedPage.exploreButton.waitFor(); // Wait for the explore button to be clickable
await unflattenedPage.exploreButton.click();
await page.waitForTimeout(1000); // Small delay to ensure page readiness
// Select date and time
await unflattenedPage.dateTimeButton.waitFor(); // Wait for the date-time button
await unflattenedPage.dateTimeButton.click();
await unflattenedPage.relativeTab.waitFor(); // Wait for the relative tab to be visible
await unflattenedPage.relativeTab.click();
await page.waitForTimeout(2000); // Wait for the relative tab to load
// Expand log table row and verify details
await unflattenedPage.logTableRowExpandMenu.waitFor(); // Wait for the expand menu to appear
await unflattenedPage.logTableRowExpandMenu.click();
await unflattenedPage.logSourceColumn.waitFor(); // Ensure the source column is ready
await unflattenedPage.logSourceColumn.click();
await page.waitForTimeout(1000); // Small delay to ensure UI updates
await unflattenedPage.o2IdText.waitFor(); // Wait for the o2 ID text to be visible
await unflattenedPage.o2IdText.click();
await unflattenedPage.unflattenedTab.waitFor(); // Wait for the unflattened tab to be visible
await unflattenedPage.unflattenedTab.click();
await page.waitForTimeout(1000); // Small delay before closing
// Close the dialog
await unflattenedPage.closeDialog.waitFor(); // Wait for the close button in the dialog
await unflattenedPage.closeDialog.click();
});
})
test("stream to display o2 id when quick mode is on and select * query is added", async ({ page }) => {
const unflattenedPage = new UnflattenedPage(page); // Instantiate the Page Object
// Navigate to Streams Menu
await unflattenedPage.streamsMenu.waitFor();
await unflattenedPage.streamsMenu.click();
// Search for Stream and access details
await unflattenedPage.searchStreamInput.waitFor();
await unflattenedPage.searchStreamInput.click();
await unflattenedPage.searchStreamInput.fill("e2e_automate");
await unflattenedPage.streamDetailButton.waitFor();
await unflattenedPage.streamDetailButton.click();
// Toggle 'Store Original Data' and update schema
await unflattenedPage.storeOriginalDataToggle.waitFor();
await unflattenedPage.storeOriginalDataToggle.click();
await unflattenedPage.schemaUpdateButton.waitFor();
await unflattenedPage.schemaUpdateButton.click();
await page.waitForTimeout(1000); // Timeout to ensure process completes
await ingestion(page);
await page.waitForTimeout(2000);
// Close the dialog and explore the stream
await unflattenedPage.closeButton.waitFor();
await unflattenedPage.closeButton.click();
await unflattenedPage.exploreButton.waitFor();
await unflattenedPage.exploreButton.click();
await page.waitForTimeout(2000);
// Toggle Quick Mode if it's off
await toggleQuickModeIfOff(page);
await page.waitForTimeout(1000);
// Select date and time
await unflattenedPage.dateTimeButton.waitFor();
await unflattenedPage.dateTimeButton.click();
await unflattenedPage.relativeTab.waitFor();
await unflattenedPage.relativeTab.click();
await page.waitForTimeout(2000);
// Search for 'kubernetes_pod_id' field
await unflattenedPage.indexFieldSearchInput.waitFor();
await unflattenedPage.indexFieldSearchInput.fill("kubernetes_pod_id");
await page.waitForTimeout(2000);
await page
.locator('[data-test="log-search-index-list-interesting-kubernetes_pod_id-field-btn"]')
.first()
.waitFor(); // Wait for the specific button to be visible
await page
.locator('[data-test="log-search-index-list-interesting-kubernetes_pod_id-field-btn"]')
.first()
.click();
// Switch to SQL mode and validate query editor content
await unflattenedPage.sqlModeToggle.waitFor();
await unflattenedPage.sqlModeToggle.click();
await page.waitForTimeout(2000);
await expect(
unflattenedPage.logsSearchBarQueryEditor
.getByText(/kubernetes_pod_id/)
.first()
).toBeVisible();
// Update the query editor with 'SELECT * FROM "e2e_automate"'
await unflattenedPage.logsSearchBarQueryEditor.waitFor();
await unflattenedPage.logsSearchBarQueryEditor.click();
await page.keyboard.press("Control+A");
await page.keyboard.press("Delete");
await page.keyboard.type('SELECT * FROM "e2e_automate"');
await page.waitForTimeout(2000);
// Interact with log table rows and verify details
await unflattenedPage.logTableRowExpandMenu.waitFor();
await unflattenedPage.logTableRowExpandMenu.click();
await unflattenedPage.logSourceColumn.waitFor();
await unflattenedPage.logSourceColumn.click();
await page.waitForTimeout(1000);
await unflattenedPage.o2IdText.waitFor();
await unflattenedPage.o2IdText.click();
await page.waitForTimeout(1000);
await unflattenedPage.unflattenedTab.waitFor();
await unflattenedPage.unflattenedTab.click();
await page.waitForTimeout(1000);
// Close the dialog
await unflattenedPage.closeDialog.waitFor();
await unflattenedPage.closeDialog.click();
// Repeat the process: Navigate back to Streams Menu, search, toggle, etc.
await unflattenedPage.streamsMenu.waitFor();
await unflattenedPage.streamsMenu.click();
await unflattenedPage.searchStreamInput.waitFor();
await unflattenedPage.searchStreamInput.click();
await unflattenedPage.searchStreamInput.fill("e2e_automate");
await unflattenedPage.streamDetailButton.waitFor();
await unflattenedPage.streamDetailButton.click();
await unflattenedPage.storeOriginalDataToggle.waitFor();
await unflattenedPage.storeOriginalDataToggle.click();
await unflattenedPage.schemaUpdateButton.waitFor();
await unflattenedPage.schemaUpdateButton.click();
await unflattenedPage.closeButton.waitFor();
await unflattenedPage.closeButton.click();
await page.waitForTimeout(1000);
await ingestion(page);
await page.waitForTimeout(2000);
await unflattenedPage.exploreButton.waitFor();
await unflattenedPage.exploreButton.click();
await page.waitForTimeout(3000);
await unflattenedPage.dateTimeButton.waitFor();
await unflattenedPage.dateTimeButton.click();
await unflattenedPage.relativeTab.waitFor();
await unflattenedPage.relativeTab.click();
await page.waitForTimeout(2000);
// Final log row interaction
await unflattenedPage.logTableRowExpandMenu.waitFor();
await unflattenedPage.logTableRowExpandMenu.click();
await page.waitForTimeout(2000);
await page.getByText("arrow_drop_down_timestamp:").waitFor();
await page.getByText("arrow_drop_down_timestamp:").click();
});
})