diff --git a/apps/coordinator/e2e/pages/SendTab.ts b/apps/coordinator/e2e/pages/SendTab.ts index 5cb37c9c3..93197524e 100644 --- a/apps/coordinator/e2e/pages/SendTab.ts +++ b/apps/coordinator/e2e/pages/SendTab.ts @@ -92,6 +92,23 @@ export class SendTab { await btn.click(); } + async importPsbtFile(psbtPath: string) { + await this.page.getByText("Import PSBT").scrollIntoViewIfNeeded(); + await this.page.getByRole("combobox", { name: /import method/i }).click(); + await this.page.getByRole("option", { name: /file upload/i }).click(); + await this.page.locator('input[type="file"]').setInputFiles(psbtPath); + await this.page.getByRole("button", { name: /import psbt file/i }).click(); + } + + async expectImportErrorBlocksSigning() { + await expect(this.page.getByRole("alert")).toBeVisible({ + timeout: 10000, + }); + await expect( + this.page.getByRole("button", { name: /sign transaction/i }), + ).not.toBeVisible(); + } + async downloadUnsignedPsbt(savePath: string): Promise { const btn = this.page.locator( 'button[type=button]:has-text("Download Unsigned PSBT")', diff --git a/apps/coordinator/e2e/tests/mutate/transaction-flow.spec.ts b/apps/coordinator/e2e/tests/mutate/transaction-flow.spec.ts index c9b56dfd5..1e74fe3f2 100644 --- a/apps/coordinator/e2e/tests/mutate/transaction-flow.spec.ts +++ b/apps/coordinator/e2e/tests/mutate/transaction-flow.spec.ts @@ -44,6 +44,16 @@ test.describe.serial("Transaction Creation and Signing", () => { await walletNav.switchToTab("Send"); }); + test("invalid PSBT upload: shows error and blocks signing", async ({ + sendTab, + }) => { + const invalidPsbtPath = path.join(uploadDir, "invalid.psbt"); + fs.writeFileSync(invalidPsbtPath, "this-is-not-a-valid-psbt"); + + await sendTab.importPsbtFile(invalidPsbtPath); + await sendTab.expectImportErrorBlocksSigning(); + }); + test("auto coin selection: create, sign, broadcast", async ({ sendTab, signTab,