mirror of
https://github.com/getredash/redash.git
synced 2025-12-21 18:35:48 -05:00
* Upgraded Cypress to v5.3 and fixed e2e tests * Updated cypress image * Fixed failing tests * Updated NODE_VERSION in netlify * Update client/cypress/integration/visualizations/choropleth_spec.js Co-authored-by: Gabriel Dutra <nesk.frz@gmail.com> * fixed test in choropleth Co-authored-by: Gabriel Dutra <nesk.frz@gmail.com>
135 lines
4.7 KiB
JavaScript
135 lines
4.7 KiB
JavaScript
/* global cy, Cypress */
|
|
|
|
const { map } = Cypress._;
|
|
|
|
const SQL = `
|
|
SELECT 'Lorem ipsum dolor' AS a, 'ipsum' AS b, 2 AS c UNION ALL
|
|
SELECT 'Lorem sit amet' AS a, 'amet' AS b, 2 AS c UNION ALL
|
|
SELECT 'dolor adipiscing elit' AS a, 'elit' AS b, 4 AS c UNION ALL
|
|
SELECT 'sed do sed' AS a, 'sed' AS b, 5 AS c UNION ALL
|
|
SELECT 'sed eiusmod tempor' AS a, 'tempor' AS b, 7 AS c
|
|
`;
|
|
|
|
// Hack to fix Cypress -> Percy communication
|
|
// Word Cloud uses `font-family` defined in CSS with a lot of fallbacks, so
|
|
// it's almost impossible to know which font will be used on particular machine/browser.
|
|
// In Cypress browser it could be one font, in Percy - another.
|
|
// The issue is in how Percy takes screenshots: it takes a DOM/CSS/assets snapshot in Cypress,
|
|
// copies it to own servers and restores in own browsers. Word Cloud computes its layout
|
|
// using Cypress font, sets absolute positions for elements (in pixels), and when it is restored
|
|
// on Percy machines (with another font) - visualization gets messed up.
|
|
// Solution: explicitly provide some font that will be 100% the same on all CI machines. In this
|
|
// case, it's "Roboto" just because it's in the list of fallback fonts and we already have this
|
|
// webfont in assets folder (so browser can load it).
|
|
function injectFont(document) {
|
|
const style = document.createElement("style");
|
|
style.setAttribute("id", "percy-fix");
|
|
style.setAttribute("type", "text/css");
|
|
|
|
const fonts = [
|
|
["Roboto", "Roboto-Light-webfont", 300],
|
|
["Roboto", "Roboto-Regular-webfont", 400],
|
|
["Roboto", "Roboto-Medium-webfont", 500],
|
|
["Roboto", "Roboto-Bold-webfont", 700],
|
|
];
|
|
|
|
const basePath = "/static/fonts/roboto/";
|
|
|
|
// `insertRule` does not load font for some reason. Using text content works ¯\_(ツ)_/¯
|
|
style.appendChild(
|
|
document.createTextNode(
|
|
map(
|
|
fonts,
|
|
([fontFamily, fileName, fontWeight]) => `
|
|
@font-face {
|
|
font-family: "${fontFamily}";
|
|
font-weight: ${fontWeight};
|
|
src: url("${basePath}${fileName}.eot");
|
|
src: url("${basePath}${fileName}.eot?#iefix") format("embedded-opentype"),
|
|
url("${basePath}${fileName}.woff") format("woff"),
|
|
url("${basePath}${fileName}.ttf") format("truetype"),
|
|
url("${basePath}${fileName}.svg") format("svg");
|
|
}
|
|
`
|
|
).join("\n\n")
|
|
)
|
|
);
|
|
document.getElementsByTagName("head")[0].appendChild(style);
|
|
}
|
|
|
|
describe("Word Cloud", () => {
|
|
const viewportWidth = Cypress.config("viewportWidth");
|
|
|
|
beforeEach(() => {
|
|
cy.login();
|
|
cy.createQuery({ query: SQL }).then(({ id }) => {
|
|
cy.visit(`queries/${id}/source`);
|
|
cy.getByTestId("ExecuteButton").click();
|
|
});
|
|
cy.document().then(injectFont);
|
|
cy.getByTestId("NewVisualization").click();
|
|
cy.getByTestId("VisualizationType").selectAntdOption("VisualizationType.WORD_CLOUD");
|
|
});
|
|
|
|
it("creates visualization with automatic word frequencies", () => {
|
|
cy.clickThrough(`
|
|
WordCloud.WordsColumn
|
|
WordCloud.WordsColumn.a
|
|
`);
|
|
|
|
// Wait for proper initialization of visualization
|
|
cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
|
|
|
|
cy.getByTestId("VisualizationPreview")
|
|
.find("svg text")
|
|
.should("have.length", 11);
|
|
|
|
cy.percySnapshot("Visualizations - Word Cloud (Automatic word frequencies)", { widths: [viewportWidth] });
|
|
});
|
|
|
|
it("creates visualization with word frequencies from another column", () => {
|
|
cy.clickThrough(`
|
|
WordCloud.WordsColumn
|
|
WordCloud.WordsColumn.b
|
|
|
|
WordCloud.FrequenciesColumn
|
|
WordCloud.FrequenciesColumn.c
|
|
`);
|
|
|
|
// Wait for proper initialization of visualization
|
|
cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
|
|
|
|
cy.getByTestId("VisualizationPreview")
|
|
.find("svg text")
|
|
.should("have.length", 5);
|
|
|
|
cy.percySnapshot("Visualizations - Word Cloud (Frequencies from another column)", { widths: [viewportWidth] });
|
|
});
|
|
|
|
it("creates visualization with word length and frequencies limits", () => {
|
|
cy.clickThrough(`
|
|
WordCloud.WordsColumn
|
|
WordCloud.WordsColumn.b
|
|
|
|
WordCloud.FrequenciesColumn
|
|
WordCloud.FrequenciesColumn.c
|
|
`);
|
|
|
|
cy.fillInputs({
|
|
"WordCloud.WordLengthLimit.Min": "4",
|
|
"WordCloud.WordLengthLimit.Max": "5",
|
|
"WordCloud.WordCountLimit.Min": "1",
|
|
"WordCloud.WordCountLimit.Max": "3",
|
|
});
|
|
|
|
// Wait for proper initialization of visualization
|
|
cy.wait(500); // eslint-disable-line cypress/no-unnecessary-waiting
|
|
|
|
cy.getByTestId("VisualizationPreview")
|
|
.find("svg text")
|
|
.should("have.length", 2);
|
|
|
|
cy.percySnapshot("Visualizations - Word Cloud (With filters)", { widths: [viewportWidth] });
|
|
});
|
|
});
|