Skip to content

Commit 01615ca

Browse files
committed
test: ✅ adding e2e test - Verify that user can Reset app
1 parent fb33316 commit 01615ca

File tree

8 files changed

+90
-3
lines changed

8 files changed

+90
-3
lines changed

apps/ledger-live-desktop/src/renderer/components/Onboarding/Screens/Welcome/index.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,13 @@ export function Welcome() {
162162
<LeftContainer>
163163
<Presentation>
164164
<Logos.LedgerLiveRegular color={colors.neutral.c100} />
165-
<Text variant="h1" pt={10} pb={7} onClick={() => handleOpenFeatureFlagsDrawer("1")}>
165+
<Text
166+
data-testid="onbording-welcome-title"
167+
variant="h1"
168+
pt={10}
169+
pb={7}
170+
onClick={() => handleOpenFeatureFlagsDrawer("1")}
171+
>
166172
{t("onboarding.screens.welcome.title")}
167173
</Text>
168174
<Description variant="body" onClick={() => handleOpenFeatureFlagsDrawer("2")}>

apps/ledger-live-desktop/src/renderer/screens/settings/sections/Help/ResetButton.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default function ResetButton() {
3030
}, [pending, handleConfirm, handleError, hardReset]);
3131
return (
3232
<>
33-
<Button small danger onClick={open} event="HardResetIntent">
33+
<Button data-testid="reset-button" small danger onClick={open} event="HardResetIntent">
3434
{t("common.reset")}
3535
</Button>
3636

@@ -48,7 +48,7 @@ export default function ResetButton() {
4848
desc={
4949
<Box>
5050
{t("settings.hardResetModal.desc")}
51-
<Alert type="warning" mt={4}>
51+
<Alert data-testid="warning-message" type="warning" mt={4}>
5252
{t("settings.hardResetModal.warning")}
5353
</Alert>
5454
</Box>

apps/ledger-live-desktop/tests/page/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import { LockscreenPage } from "tests/page/lockscreen.page";
2323
import { NFTDrawer } from "./drawer/nft.drawer";
2424
import { NftGallery } from "./nftGallery.page";
2525
import { AssetPage } from "./asset.page";
26+
import { SettingsModal } from "tests/page/modal/settings.modal";
27+
import { OnboardingPage } from "tests/page/onboarding.page";
2628

2729
export class Application extends PageHolder {
2830
public account = new AccountPage(this.page);
@@ -49,4 +51,6 @@ export class Application extends PageHolder {
4951
public nftDrawer = new NFTDrawer(this.page);
5052
public nftGallery = new NftGallery(this.page);
5153
public assetPage = new AssetPage(this.page);
54+
public settingsModal = new SettingsModal(this.page);
55+
public onboarding = new OnboardingPage(this.page);
5256
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { expect } from "@playwright/test";
2+
import { Modal } from "../../component/modal.component";
3+
import { step } from "tests/misc/reporters/step";
4+
5+
export class SettingsModal extends Modal {
6+
readonly warningMessage = this.page.getByTestId("warning-message");
7+
8+
@step("Check Reset Modal")
9+
async checkResetModal() {
10+
await expect(this.title).toHaveText("Reset Ledger Live");
11+
await expect(this.warningMessage).toHaveText(
12+
"Resetting Ledger Live will erase your swap transaction history for all your accounts.",
13+
);
14+
}
15+
16+
@step("Click on Confirm Button")
17+
async clickOnConfirmButton() {
18+
await this.confirmButton.click();
19+
}
20+
}

apps/ledger-live-desktop/tests/page/onboarding.page.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ export class OnboardingPage extends AppPage {
2626
private quizAnswerTopButton = this.page.getByTestId("v3-quiz-answer-0");
2727
private quizAnswerBottomButton = this.page.getByTestId("v3-quiz-answer-1");
2828
readonly roleAnimation = this.page.locator("[role=animation]");
29+
private onbordingWelcomeTitle = this.page.getByTestId("onbording-welcome-title");
2930

3031
async waitForLaunch() {
3132
await this.getStartedButton.waitFor({ state: "visible" });
33+
await this.onbordingWelcomeTitle.waitFor({ state: "visible" });
3234
}
3335

3436
async waitForPedagogyModal() {

apps/ledger-live-desktop/tests/page/settings.page.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export class SettingsPage extends AppPage {
1414
private developerTab = this.page.getByTestId("settings-developer-tab");
1515
private experimentalDevModeToggle = this.page.getByTestId("MANAGER_DEV_MODE-button");
1616
private ledgerSupport = this.page.getByTestId("ledgerSupport-link");
17+
private resetAppButton = this.page.getByTestId("reset-button");
1718

1819
readonly counterValueSelector = this.page.locator(
1920
"[data-testid='setting-countervalue-dropDown'] .select__value-container",
@@ -39,14 +40,17 @@ export class SettingsPage extends AppPage {
3940
await this.accountsTab.click();
4041
}
4142

43+
@step("Go to Settings About tab")
4244
async goToAboutTab() {
4345
await this.aboutTab.click();
4446
}
4547

48+
@step("Go to Settings Help tab")
4649
async goToHelpTab() {
4750
await this.helpTab.click();
4851
}
4952

53+
@step("Go to Settings Experimental tab")
5054
async goToExperimentalTab() {
5155
await this.experimentalTab.click();
5256
}
@@ -124,4 +128,9 @@ export class SettingsPage extends AppPage {
124128
}
125129
expect(url).toBe("https://support.ledger.com/?redirect=false");
126130
}
131+
132+
@step("Reset App")
133+
async resetApp() {
134+
await this.resetAppButton.click();
135+
}
127136
}

apps/ledger-live-desktop/tests/specs/speculos/settings.spec.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { addTmsLink } from "tests/utils/allureUtils";
33
import { getDescription } from "../../utils/customJsonReporter";
44
import { Account } from "@ledgerhq/live-common/e2e/enum/Account";
55
import { CLI } from "tests/utils/cliUtils";
6+
import { FileUtils } from "tests/utils/fileUtils";
67

78
test.describe("Settings", () => {
89
test.use({
@@ -147,3 +148,32 @@ test.describe("Ledger Support (web link)", () => {
147148
},
148149
);
149150
});
151+
152+
test.describe("Reset app", () => {
153+
test.use({
154+
userdata: "1AccountBTC1AccountETH",
155+
});
156+
157+
test(
158+
"Verify that user can Reset app",
159+
{
160+
annotation: {
161+
type: "TMS",
162+
description: "B2CQA-821",
163+
},
164+
},
165+
async ({ app, userdataFile }) => {
166+
await addTmsLink(getDescription(test.info().annotations, "TMS").split(", "));
167+
168+
await app.layout.goToSettings();
169+
const appJsonBefore = await FileUtils.getAppJsonSize(userdataFile);
170+
await app.settings.goToHelpTab();
171+
await app.settings.resetApp();
172+
await app.settingsModal.checkResetModal();
173+
await app.settingsModal.clickOnConfirmButton();
174+
await app.onboarding.waitForLaunch();
175+
const appJsonAfter = await FileUtils.getAppJsonSize(userdataFile);
176+
await FileUtils.compareAppJsonSize(appJsonBefore, appJsonAfter);
177+
},
178+
);
179+
});

apps/ledger-live-desktop/tests/utils/fileUtils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import { appendFile } from "fs/promises";
2+
import { expect } from "@playwright/test";
3+
import { step } from "tests/misc/reporters/step";
4+
import fs from "fs/promises";
25

36
export async function safeAppendFile(filePath: string, data: string) {
47
try {
@@ -7,3 +10,16 @@ export async function safeAppendFile(filePath: string, data: string) {
710
if (e) console.error("couldn't append file", e);
811
}
912
}
13+
14+
export class FileUtils {
15+
@step("get app.json size")
16+
static async getAppJsonSize(userdataFile: string) {
17+
const fileStats = await fs.stat(userdataFile);
18+
return fileStats.size;
19+
}
20+
21+
@step("Compare 2 app.json files")
22+
static async compareAppJsonSize(appJson1: number, appJson2: number) {
23+
expect(appJson1).not.toEqual(appJson2);
24+
}
25+
}

0 commit comments

Comments
 (0)