Skip to content

Commit

Permalink
fix(cypress): Improve smoke test flakiness (#12645)
Browse files Browse the repository at this point in the history
  • Loading branch information
asikowitz authored Feb 19, 2025
1 parent ef631c5 commit d33ef7a
Show file tree
Hide file tree
Showing 13 changed files with 76 additions and 72 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { HTMLAttributes } from 'react';

import styled from 'styled-components';
import { Tooltip } from '@components';
Expand Down Expand Up @@ -35,11 +35,10 @@ type Props = {
title: string;
disabled?: boolean;
tooltip?: React.ReactNode;
style?: any;
onClick: () => void;
};
} & HTMLAttributes<HTMLDivElement>;

export const PrimaryButton = ({ icon, title, tooltip, disabled = false, style, onClick }: Props) => {
export const PrimaryButton = ({ icon, title, tooltip, disabled = false, onClick, ...props }: Props) => {
return (
<Tooltip title={tooltip} placement="left" showArrow={false}>
<Button
Expand All @@ -48,7 +47,7 @@ export const PrimaryButton = ({ icon, title, tooltip, disabled = false, style, o
e.stopPropagation();
onClick();
}}
style={style}
{...props}
>
{(icon && <Icon>{icon}</Icon>) || null}
{title}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,13 @@ export default function NavBarMenuItem({ item, isCollapsed, isSelected, iconSize

const component = (
<Tooltip title={isCollapsed ? item.title : null} placement="right" showArrow={false}>
<StyledMenuItem isCollapsed={isCollapsed} onClick={onClick} aria-label={item.title} {...props}>
<StyledMenuItem
isCollapsed={isCollapsed}
onClick={onClick}
aria-label={item.title}
{...props}
data-testid={item.dataTestId}
>
{item.icon || item.selectedIcon ? (
<Icon $size={iconSize} $isSelected={isSelected}>
{isSelected ? item.selectedIcon || item.icon : item.icon}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ export const NavSidebar = () => {
key: 'signOut',
onClick: logout,
href: '/logOut',
dataTestId: 'nav-sidebar-sign-out',
},
],
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export interface NavBarMenuBaseElement {
onClick?: () => void;
disabled?: boolean;
href?: string;
dataTestId?: string;
}

export type Badge = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ export const IngestionSourceList = () => {
};

const onCreateOrUpdateIngestionSourceSuccess = () => {
setTimeout(() => refetch(), 2000);
setTimeout(() => refetch(), 3000);
setIsBuildingSource(false);
setFocusSourceUrn(undefined);
};
Expand Down
4 changes: 2 additions & 2 deletions datahub-web-react/src/app/permissions/policy/usePolicy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ export function usePolicy(
removeFromListPoliciesCache(client, policy?.urn, DEFAULT_PAGE_SIZE);
setTimeout(() => {
policiesRefetch();
}, 3000);
}, 4000);
onCancelViewPolicy();
});
},
Expand Down Expand Up @@ -168,7 +168,7 @@ export function usePolicy(
message.success(`Successfully ${newState === PolicyState.Active ? 'activated' : 'deactivated'} policy.`);
setTimeout(() => {
policiesRefetch();
}, 3000);
}, 4000);
});

setShowViewPolicyModal(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ describe("Verify nested domains test functionalities", () => {
cy.setIsThemeV2Enabled(false);
cy.loginWithCredentials();
cy.goToDomainList();
cy.ignoreResizeObserverLoop();
});

it("Verify Create a new domain", () => {
Expand Down
8 changes: 2 additions & 6 deletions smoke-test/tests/cypress/cypress/e2e/ml/model.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
describe("models", () => {
it("can visit models and groups", () => {
cy.visit("/");
cy.login();
cy.visit(
cy.visitWithLogin(
"/mlModels/urn:li:mlModel:(urn:li:dataPlatform:sagemaker,cypress-model,PROD)/Summary?is_lineage_mode=false",
);

Expand All @@ -24,9 +22,7 @@ describe("models", () => {
});

it("can visit models and groups", () => {
cy.visit("/");
cy.login();
cy.visit(
cy.visitWithLogin(
"/mlModelGroup/urn:li:mlModelGroup:(urn:li:dataPlatform:sagemaker,cypress-model-package-group,PROD)",
);
// the model group has its model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ function deletePolicy(policyEdited, deletePolicy) {

describe("create and manage platform and metadata policies", () => {
beforeEach(() => {
cy.loginWithCredentials();
cy.visit("/settings/permissions/policies");
cy.visitWithLogin("/settings/permissions/policies");
});

it("create platform policy", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,21 @@ const group_name = `Test group ${test_id}`;
describe("create and manage group", () => {
beforeEach(() => {
cy.setIsThemeV2Enabled(true);
cy.loginWithCredentials();
cy.skipIntroducePage();
cy.on("uncaught:exception", (err, runnable) => false);
});

it("add test user", () => {
cy.visit("/settings/identities/users");
cy.visitWithLogin("/settings/identities/users");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.wait(3000);
cy.clickOptionWithText("Invite Users");
cy.waitTextVisible(/signup\?invite_token=\w{32}/).then(($elem) => {
const inviteLink = $elem.text();
cy.visit("/settings/identities/users");
cy.clickOptionWithTestId("log-out-menu-item");
cy.logoutV2();
cy.visit(inviteLink);
cy.skipIntroducePage();
cy.enterTextInTestId("email", email);
cy.enterTextInTestId("name", username);
cy.enterTextInTestId("password", password);
Expand All @@ -30,14 +31,12 @@ describe("create and manage group", () => {
cy.get("[type=submit]").click();
cy.contains("Accepted invite!").should("not.exist");
cy.wait(5000);
// cy.hideOnboardingTour();
cy.skipIntroducePage();
cy.waitTextVisible(username);
});
});

it("create a group", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.clickOptionWithText("Create group");
Expand All @@ -53,7 +52,7 @@ describe("create and manage group", () => {
});

it("add test user to a group", () => {
cy.visit("/settings/identities/users");
cy.visitWithLogin("/settings/identities/users");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.get(".ant-tabs-tab-btn").contains("Groups").click();
Expand All @@ -78,7 +77,7 @@ describe("create and manage group", () => {
});

it("update group info", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.clickOptionWithText(group_name);
Expand All @@ -97,7 +96,7 @@ describe("create and manage group", () => {
});

it("user verify to edit the discription", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.contains(`Test group EDITED ${test_id}`).should("be.visible").click();
Expand All @@ -111,7 +110,7 @@ describe("create and manage group", () => {
});

it("user verify to add the owner", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.contains(`Test group EDITED ${test_id}`).should("be.visible").click();
Expand All @@ -130,7 +129,7 @@ describe("create and manage group", () => {
});

it("test User verify group participation", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.hideOnboardingTour();
Expand All @@ -140,7 +139,7 @@ describe("create and manage group", () => {
});

it("remove group", () => {
cy.visit("/settings/identities/groups");
cy.visitWithLogin("/settings/identities/groups");
cy.waitTextVisible("Settings");
cy.wait(1000);
cy.get(
Expand Down
45 changes: 16 additions & 29 deletions smoke-test/tests/cypress/cypress/e2e/siblings/siblings.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const BIGQUERY_URN =
"urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)";
const DBT_URN =
"urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)";

describe("siblings", () => {
it("will merge metadata to non-primary sibling", () => {
cy.login();
cy.visit(
"/dataset/urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
);
cy.visitWithLogin(`/dataset/${BIGQUERY_URN}/?is_lineage_mode=false`);

// check merged platforms
cy.contains("dbt & BigQuery");
Expand All @@ -17,10 +19,7 @@ describe("siblings", () => {
});

it("will merge metadata to primary sibling", () => {
cy.login();
cy.visit(
"/dataset/urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
);
cy.visitWithLogin(`/dataset/${DBT_URN}/?is_lineage_mode=false`);

// check merged platforms
cy.contains("dbt & BigQuery");
Expand All @@ -34,8 +33,6 @@ describe("siblings", () => {
});

it("can view individual nodes", () => {
cy.login();

const resizeObserverLoopErrRe = /^[^(ResizeObserver loop limit exceeded)]/;
cy.on("uncaught:exception", (err) => {
/* returning false here prevents Cypress from failing the test */
Expand All @@ -44,15 +41,11 @@ describe("siblings", () => {
}
});

cy.visit(
"/dataset/urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
);

cy.visitWithLogin(`/dataset/${DBT_URN}/?is_lineage_mode=false`);
cy.get(".ant-table-row").should("be.visible");
// navigate to the bq entity
cy.clickOptionWithTestId(
"compact-entity-link-urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)",
);

cy.get(`[data-testid="compact-entity-link-${BIGQUERY_URN}"`).click();
cy.get(".ant-table-row").should("be.visible");
// check merged platforms is not shown
cy.get('[data-testid="entity-header-test-id"]')
.contains("dbt & BigQuery")
Expand All @@ -70,16 +63,11 @@ describe("siblings", () => {
});

it("can mutate at individual node or combined node level", () => {
cy.login();
cy.visit(
"/dataset/urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
);

cy.visitWithLogin(`/dataset/${DBT_URN}/?is_lineage_mode=false`);
cy.get(".ant-table-row").should("be.visible");
// navigate to the bq entity
cy.clickOptionWithTestId(
"compact-entity-link-urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)",
);

cy.get(`[data-testid="compact-entity-link-${BIGQUERY_URN}"`).click();
cy.get(".ant-table-row").should("be.visible");
cy.clickOptionWithText("Add Term");

cy.selectOptionInTagTermModal("CypressTerm");
Expand All @@ -97,8 +85,7 @@ describe("siblings", () => {
});

it("will combine results in search", () => {
cy.login();
cy.visit("/search?page=1&query=%22raw_orders%22");
cy.visitWithLogin("/search?page=1&query=%22raw_orders%22");

cy.contains("Showing 1 - 2 of ");

Expand Down
36 changes: 23 additions & 13 deletions smoke-test/tests/cypress/cypress/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// -- This is a parent command --

import dayjs from "dayjs";
import { aliasQuery, hasOperationName } from "../e2e/utils";
import { hasOperationName } from "../e2e/utils";

function selectorWithtestId(id) {
return `[data-testid="${id}"]`;
Expand Down Expand Up @@ -50,6 +50,14 @@ Cypress.Commands.add("loginWithCredentials", (username, password) => {
localStorage.setItem(SKIP_ONBOARDING_TOUR_KEY, "true");
});

Cypress.Commands.add("visitWithLogin", (url) => {
cy.visit(url);
cy.get("input[data-testid=username]").type(Cypress.env("ADMIN_USERNAME"));
cy.get("input[data-testid=password]").type(Cypress.env("ADMIN_PASSWORD"));
localStorage.setItem(SKIP_ONBOARDING_TOUR_KEY, "true");
cy.contains("Sign In").click();
});

Cypress.Commands.add("deleteUrn", (urn) => {
cy.request({
method: "POST",
Expand All @@ -71,6 +79,12 @@ Cypress.Commands.add("logout", () => {
cy.waitTextVisible("Password");
});

Cypress.Commands.add("logoutV2", () => {
cy.get(selectorWithtestId("nav-sidebar-sign-out")).click({ force: true });
cy.waitTextVisible("Username");
cy.waitTextVisible("Password");
});

Cypress.Commands.add("goToGlossaryList", () => {
cy.visit("/glossary");
cy.waitTextVisible("Glossary");
Expand Down Expand Up @@ -118,9 +132,13 @@ Cypress.Commands.add("goToIngestionPage", () => {
cy.waitTextVisible("Sources");
});

Cypress.Commands.add("goToDataset", (urn, dataset_name) => {
cy.visit(`/dataset/${urn}/`);
cy.wait(5000);
Cypress.Commands.add("goToDataset", (urn, dataset_name, login) => {
if (login) {
cy.visitWithLogin(`/dataset/${urn}/`);
} else {
cy.visit(`/dataset/${urn}/`);
}
cy.wait(3000);
cy.waitTextVisible(dataset_name);
});

Expand Down Expand Up @@ -413,18 +431,9 @@ Cypress.Commands.add(

Cypress.Commands.add("openEntityTab", (tab) => {
const selector = `div[id$="${tab}"]:nth-child(1)`;
cy.highlighElement(selector);
cy.get(selector).click();
});

Cypress.Commands.add("highlighElement", (selector) => {
cy.wait(3000);
cy.get(selector).then(($button) => {
$button.css("border", "1px solid magenta");
});
cy.wait(3000);
});

Cypress.Commands.add("mouseover", (selector) =>
cy.get(selector).trigger("mouseover", { force: true }),
);
Expand Down Expand Up @@ -513,6 +522,7 @@ Cypress.Commands.add("setIsThemeV2Enabled", (isEnabled) => {
req.on("response", (res) => {
res.body.data.appConfig.featureFlags.themeV2Enabled = isEnabled;
res.body.data.appConfig.featureFlags.themeV2Default = isEnabled;
res.body.data.appConfig.featureFlags.showNavBarRedesign = isEnabled;
});
}
});
Expand Down
Loading

0 comments on commit d33ef7a

Please sign in to comment.