Skip to content

Commit d33ef7a

Browse files
authored
fix(cypress): Improve smoke test flakiness (datahub-project#12645)
1 parent ef631c5 commit d33ef7a

File tree

13 files changed

+76
-72
lines changed

13 files changed

+76
-72
lines changed

datahub-web-react/src/app/entityV2/shared/tabs/Dataset/Validations/assertion/builder/details/PrimaryButton.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { HTMLAttributes } from 'react';
22

33
import styled from 'styled-components';
44
import { Tooltip } from '@components';
@@ -35,11 +35,10 @@ type Props = {
3535
title: string;
3636
disabled?: boolean;
3737
tooltip?: React.ReactNode;
38-
style?: any;
3938
onClick: () => void;
40-
};
39+
} & HTMLAttributes<HTMLDivElement>;
4140

42-
export const PrimaryButton = ({ icon, title, tooltip, disabled = false, style, onClick }: Props) => {
41+
export const PrimaryButton = ({ icon, title, tooltip, disabled = false, onClick, ...props }: Props) => {
4342
return (
4443
<Tooltip title={tooltip} placement="left" showArrow={false}>
4544
<Button
@@ -48,7 +47,7 @@ export const PrimaryButton = ({ icon, title, tooltip, disabled = false, style, o
4847
e.stopPropagation();
4948
onClick();
5049
}}
51-
style={style}
50+
{...props}
5251
>
5352
{(icon && <Icon>{icon}</Icon>) || null}
5453
{title}

datahub-web-react/src/app/homeV2/layout/navBarRedesign/NavBarMenuItem.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,13 @@ export default function NavBarMenuItem({ item, isCollapsed, isSelected, iconSize
119119

120120
const component = (
121121
<Tooltip title={isCollapsed ? item.title : null} placement="right" showArrow={false}>
122-
<StyledMenuItem isCollapsed={isCollapsed} onClick={onClick} aria-label={item.title} {...props}>
122+
<StyledMenuItem
123+
isCollapsed={isCollapsed}
124+
onClick={onClick}
125+
aria-label={item.title}
126+
{...props}
127+
data-testid={item.dataTestId}
128+
>
123129
{item.icon || item.selectedIcon ? (
124130
<Icon $size={iconSize} $isSelected={isSelected}>
125131
{isSelected ? item.selectedIcon || item.icon : item.icon}

datahub-web-react/src/app/homeV2/layout/navBarRedesign/NavSidebar.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ export const NavSidebar = () => {
250250
key: 'signOut',
251251
onClick: logout,
252252
href: '/logOut',
253+
dataTestId: 'nav-sidebar-sign-out',
253254
},
254255
],
255256
};

datahub-web-react/src/app/homeV2/layout/navBarRedesign/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export interface NavBarMenuBaseElement {
2222
onClick?: () => void;
2323
disabled?: boolean;
2424
href?: string;
25+
dataTestId?: string;
2526
}
2627

2728
export type Badge = {

datahub-web-react/src/app/ingest/source/IngestionSourceList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ export const IngestionSourceList = () => {
191191
};
192192

193193
const onCreateOrUpdateIngestionSourceSuccess = () => {
194-
setTimeout(() => refetch(), 2000);
194+
setTimeout(() => refetch(), 3000);
195195
setIsBuildingSource(false);
196196
setFocusSourceUrn(undefined);
197197
};

datahub-web-react/src/app/permissions/policy/usePolicy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export function usePolicy(
136136
removeFromListPoliciesCache(client, policy?.urn, DEFAULT_PAGE_SIZE);
137137
setTimeout(() => {
138138
policiesRefetch();
139-
}, 3000);
139+
}, 4000);
140140
onCancelViewPolicy();
141141
});
142142
},
@@ -168,7 +168,7 @@ export function usePolicy(
168168
message.success(`Successfully ${newState === PolicyState.Active ? 'activated' : 'deactivated'} policy.`);
169169
setTimeout(() => {
170170
policiesRefetch();
171-
}, 3000);
171+
}, 4000);
172172
});
173173

174174
setShowViewPolicyModal(false);

smoke-test/tests/cypress/cypress/e2e/domains/nested_domains.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ describe("Verify nested domains test functionalities", () => {
9090
cy.setIsThemeV2Enabled(false);
9191
cy.loginWithCredentials();
9292
cy.goToDomainList();
93+
cy.ignoreResizeObserverLoop();
9394
});
9495

9596
it("Verify Create a new domain", () => {

smoke-test/tests/cypress/cypress/e2e/ml/model.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
describe("models", () => {
22
it("can visit models and groups", () => {
3-
cy.visit("/");
4-
cy.login();
5-
cy.visit(
3+
cy.visitWithLogin(
64
"/mlModels/urn:li:mlModel:(urn:li:dataPlatform:sagemaker,cypress-model,PROD)/Summary?is_lineage_mode=false",
75
);
86

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

2624
it("can visit models and groups", () => {
27-
cy.visit("/");
28-
cy.login();
29-
cy.visit(
25+
cy.visitWithLogin(
3026
"/mlModelGroup/urn:li:mlModelGroup:(urn:li:dataPlatform:sagemaker,cypress-model-package-group,PROD)",
3127
);
3228
// the model group has its model

smoke-test/tests/cypress/cypress/e2e/settings/manage_policies.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ function deletePolicy(policyEdited, deletePolicy) {
7878

7979
describe("create and manage platform and metadata policies", () => {
8080
beforeEach(() => {
81-
cy.loginWithCredentials();
82-
cy.visit("/settings/permissions/policies");
81+
cy.visitWithLogin("/settings/permissions/policies");
8382
});
8483

8584
it("create platform policy", () => {

smoke-test/tests/cypress/cypress/e2e/settingsV2/v2_managing_groups.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@ const group_name = `Test group ${test_id}`;
77
describe("create and manage group", () => {
88
beforeEach(() => {
99
cy.setIsThemeV2Enabled(true);
10-
cy.loginWithCredentials();
1110
cy.skipIntroducePage();
1211
cy.on("uncaught:exception", (err, runnable) => false);
1312
});
13+
1414
it("add test user", () => {
15-
cy.visit("/settings/identities/users");
15+
cy.visitWithLogin("/settings/identities/users");
1616
cy.waitTextVisible("Settings");
17-
cy.wait(1000);
17+
cy.wait(3000);
1818
cy.clickOptionWithText("Invite Users");
1919
cy.waitTextVisible(/signup\?invite_token=\w{32}/).then(($elem) => {
2020
const inviteLink = $elem.text();
2121
cy.visit("/settings/identities/users");
22-
cy.clickOptionWithTestId("log-out-menu-item");
22+
cy.logoutV2();
2323
cy.visit(inviteLink);
24+
cy.skipIntroducePage();
2425
cy.enterTextInTestId("email", email);
2526
cy.enterTextInTestId("name", username);
2627
cy.enterTextInTestId("password", password);
@@ -30,14 +31,12 @@ describe("create and manage group", () => {
3031
cy.get("[type=submit]").click();
3132
cy.contains("Accepted invite!").should("not.exist");
3233
cy.wait(5000);
33-
// cy.hideOnboardingTour();
34-
cy.skipIntroducePage();
3534
cy.waitTextVisible(username);
3635
});
3736
});
3837

3938
it("create a group", () => {
40-
cy.visit("/settings/identities/groups");
39+
cy.visitWithLogin("/settings/identities/groups");
4140
cy.waitTextVisible("Settings");
4241
cy.wait(1000);
4342
cy.clickOptionWithText("Create group");
@@ -53,7 +52,7 @@ describe("create and manage group", () => {
5352
});
5453

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

8079
it("update group info", () => {
81-
cy.visit("/settings/identities/groups");
80+
cy.visitWithLogin("/settings/identities/groups");
8281
cy.waitTextVisible("Settings");
8382
cy.wait(1000);
8483
cy.clickOptionWithText(group_name);
@@ -97,7 +96,7 @@ describe("create and manage group", () => {
9796
});
9897

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

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

132131
it("test User verify group participation", () => {
133-
cy.visit("/settings/identities/groups");
132+
cy.visitWithLogin("/settings/identities/groups");
134133
cy.waitTextVisible("Settings");
135134
cy.wait(1000);
136135
cy.hideOnboardingTour();
@@ -140,7 +139,7 @@ describe("create and manage group", () => {
140139
});
141140

142141
it("remove group", () => {
143-
cy.visit("/settings/identities/groups");
142+
cy.visitWithLogin("/settings/identities/groups");
144143
cy.waitTextVisible("Settings");
145144
cy.wait(1000);
146145
cy.get(

smoke-test/tests/cypress/cypress/e2e/siblings/siblings.js

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
const BIGQUERY_URN =
2+
"urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)";
3+
const DBT_URN =
4+
"urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)";
5+
16
describe("siblings", () => {
27
it("will merge metadata to non-primary sibling", () => {
3-
cy.login();
4-
cy.visit(
5-
"/dataset/urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
6-
);
8+
cy.visitWithLogin(`/dataset/${BIGQUERY_URN}/?is_lineage_mode=false`);
79

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

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

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

3635
it("can view individual nodes", () => {
37-
cy.login();
38-
3936
const resizeObserverLoopErrRe = /^[^(ResizeObserver loop limit exceeded)]/;
4037
cy.on("uncaught:exception", (err) => {
4138
/* returning false here prevents Cypress from failing the test */
@@ -44,15 +41,11 @@ describe("siblings", () => {
4441
}
4542
});
4643

47-
cy.visit(
48-
"/dataset/urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
49-
);
50-
44+
cy.visitWithLogin(`/dataset/${DBT_URN}/?is_lineage_mode=false`);
45+
cy.get(".ant-table-row").should("be.visible");
5146
// navigate to the bq entity
52-
cy.clickOptionWithTestId(
53-
"compact-entity-link-urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)",
54-
);
55-
47+
cy.get(`[data-testid="compact-entity-link-${BIGQUERY_URN}"`).click();
48+
cy.get(".ant-table-row").should("be.visible");
5649
// check merged platforms is not shown
5750
cy.get('[data-testid="entity-header-test-id"]')
5851
.contains("dbt & BigQuery")
@@ -70,16 +63,11 @@ describe("siblings", () => {
7063
});
7164

7265
it("can mutate at individual node or combined node level", () => {
73-
cy.login();
74-
cy.visit(
75-
"/dataset/urn:li:dataset:(urn:li:dataPlatform:dbt,cypress_project.jaffle_shop.customers,PROD)/?is_lineage_mode=false",
76-
);
77-
66+
cy.visitWithLogin(`/dataset/${DBT_URN}/?is_lineage_mode=false`);
67+
cy.get(".ant-table-row").should("be.visible");
7868
// navigate to the bq entity
79-
cy.clickOptionWithTestId(
80-
"compact-entity-link-urn:li:dataset:(urn:li:dataPlatform:bigquery,cypress_project.jaffle_shop.customers,PROD)",
81-
);
82-
69+
cy.get(`[data-testid="compact-entity-link-${BIGQUERY_URN}"`).click();
70+
cy.get(".ant-table-row").should("be.visible");
8371
cy.clickOptionWithText("Add Term");
8472

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

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

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

smoke-test/tests/cypress/cypress/support/commands.js

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// -- This is a parent command --
1313

1414
import dayjs from "dayjs";
15-
import { aliasQuery, hasOperationName } from "../e2e/utils";
15+
import { hasOperationName } from "../e2e/utils";
1616

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

53+
Cypress.Commands.add("visitWithLogin", (url) => {
54+
cy.visit(url);
55+
cy.get("input[data-testid=username]").type(Cypress.env("ADMIN_USERNAME"));
56+
cy.get("input[data-testid=password]").type(Cypress.env("ADMIN_PASSWORD"));
57+
localStorage.setItem(SKIP_ONBOARDING_TOUR_KEY, "true");
58+
cy.contains("Sign In").click();
59+
});
60+
5361
Cypress.Commands.add("deleteUrn", (urn) => {
5462
cy.request({
5563
method: "POST",
@@ -71,6 +79,12 @@ Cypress.Commands.add("logout", () => {
7179
cy.waitTextVisible("Password");
7280
});
7381

82+
Cypress.Commands.add("logoutV2", () => {
83+
cy.get(selectorWithtestId("nav-sidebar-sign-out")).click({ force: true });
84+
cy.waitTextVisible("Username");
85+
cy.waitTextVisible("Password");
86+
});
87+
7488
Cypress.Commands.add("goToGlossaryList", () => {
7589
cy.visit("/glossary");
7690
cy.waitTextVisible("Glossary");
@@ -118,9 +132,13 @@ Cypress.Commands.add("goToIngestionPage", () => {
118132
cy.waitTextVisible("Sources");
119133
});
120134

121-
Cypress.Commands.add("goToDataset", (urn, dataset_name) => {
122-
cy.visit(`/dataset/${urn}/`);
123-
cy.wait(5000);
135+
Cypress.Commands.add("goToDataset", (urn, dataset_name, login) => {
136+
if (login) {
137+
cy.visitWithLogin(`/dataset/${urn}/`);
138+
} else {
139+
cy.visit(`/dataset/${urn}/`);
140+
}
141+
cy.wait(3000);
124142
cy.waitTextVisible(dataset_name);
125143
});
126144

@@ -413,18 +431,9 @@ Cypress.Commands.add(
413431

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

420-
Cypress.Commands.add("highlighElement", (selector) => {
421-
cy.wait(3000);
422-
cy.get(selector).then(($button) => {
423-
$button.css("border", "1px solid magenta");
424-
});
425-
cy.wait(3000);
426-
});
427-
428437
Cypress.Commands.add("mouseover", (selector) =>
429438
cy.get(selector).trigger("mouseover", { force: true }),
430439
);
@@ -513,6 +522,7 @@ Cypress.Commands.add("setIsThemeV2Enabled", (isEnabled) => {
513522
req.on("response", (res) => {
514523
res.body.data.appConfig.featureFlags.themeV2Enabled = isEnabled;
515524
res.body.data.appConfig.featureFlags.themeV2Default = isEnabled;
525+
res.body.data.appConfig.featureFlags.showNavBarRedesign = isEnabled;
516526
});
517527
}
518528
});

0 commit comments

Comments
 (0)