mirror of
https://github.com/zhigang1992/wallet.git
synced 2026-04-30 21:52:28 +08:00
test(bip322): integration test message signing
This commit is contained in:
@@ -224,7 +224,7 @@
|
|||||||
"@babel/core": "7.20.12",
|
"@babel/core": "7.20.12",
|
||||||
"@babel/preset-react": "7.18.6",
|
"@babel/preset-react": "7.18.6",
|
||||||
"@babel/preset-typescript": "7.18.6",
|
"@babel/preset-typescript": "7.18.6",
|
||||||
"@btckit/types": "0.0.16",
|
"@btckit/types": "0.0.18",
|
||||||
"@emotion/babel-plugin": "11.10.5",
|
"@emotion/babel-plugin": "11.10.5",
|
||||||
"@emotion/babel-preset-css-prop": "11.10.0",
|
"@emotion/babel-preset-css-prop": "11.10.0",
|
||||||
"@emotion/cache": "11.10.5",
|
"@emotion/cache": "11.10.5",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
|
|
||||||
import { RpcErrorCode } from '@btckit/types';
|
import { PaymentTypes, RpcErrorCode } from '@btckit/types';
|
||||||
import * as bitcoin from 'bitcoinjs-lib';
|
import * as bitcoin from 'bitcoinjs-lib';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -34,7 +34,10 @@ function useRpcSignBitcoinMessage() {
|
|||||||
...defaultParams,
|
...defaultParams,
|
||||||
requestId: initialSearchParams.get('requestId') ?? '',
|
requestId: initialSearchParams.get('requestId') ?? '',
|
||||||
message: initialSearchParams.get('message') ?? '',
|
message: initialSearchParams.get('message') ?? '',
|
||||||
paymentType: (initialSearchParams.get('paymentType') ?? 'p2wpkh') as 'p2tr' | 'p2wpkh',
|
paymentType: (initialSearchParams.get('paymentType') ?? 'p2wpkh') as Extract<
|
||||||
|
'p2tr' | 'p2wpkh',
|
||||||
|
PaymentTypes
|
||||||
|
>,
|
||||||
}),
|
}),
|
||||||
[defaultParams]
|
[defaultParams]
|
||||||
);
|
);
|
||||||
@@ -96,7 +99,7 @@ function useSignBip322MessageFactory({ address, signPsbt }: SignBip322MessageFac
|
|||||||
tabId,
|
tabId,
|
||||||
makeRpcSuccessResponse('signMessage', {
|
makeRpcSuccessResponse('signMessage', {
|
||||||
id: requestId,
|
id: requestId,
|
||||||
result: { signature, address, message } as any,
|
result: { signature, address, message },
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -160,19 +160,3 @@ export const timeDifference = (startDate: Date, endDate: Date) => {
|
|||||||
const seconds = (endDate.getTime() - startDate.getTime()) / 1000;
|
const seconds = (endDate.getTime() - startDate.getTime()) / 1000;
|
||||||
return seconds;
|
return seconds;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Need to fix this. It is producing an error: `Unable to fetch info from node.`
|
|
||||||
// I don't even understand why this is being used in a test to check a balance?
|
|
||||||
//
|
|
||||||
// export const addAPINetwork = async (wallet: WalletPage) => {
|
|
||||||
// await wallet.clickSettingsButton();
|
|
||||||
// await wallet.page.click(createTestSelector(SettingsSelectors.ChangeNetworkAction));
|
|
||||||
// await wallet.page.click(createTestSelector(SettingsSelectors.BtnAddNetwork));
|
|
||||||
// const networkPage: NetworkPage = new NetworkPage(wallet.page);
|
|
||||||
// await networkPage.inputNetworkNameField('api');
|
|
||||||
// await networkPage.inputNetworkAddressField(
|
|
||||||
// process.env.APIEnvVariable || 'https://stacks-node-api-inactive.stacks.co/'
|
|
||||||
// );
|
|
||||||
// await networkPage.inputNetworkKeyField('api');
|
|
||||||
// await networkPage.clickAddNetwork();
|
|
||||||
// };
|
|
||||||
|
|||||||
68
tests/specs/message-signing/bip322-message-signing.spec.ts
Normal file
68
tests/specs/message-signing/bip322-message-signing.spec.ts
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import { BrowserContext, Page } from '@playwright/test';
|
||||||
|
|
||||||
|
import { test } from '../../fixtures/fixtures';
|
||||||
|
|
||||||
|
test.describe('Message signing', () =>
|
||||||
|
test.describe('BIP-322 message signing', () => {
|
||||||
|
test.beforeEach(async ({ extensionId, globalPage, onboardingPage, page }) => {
|
||||||
|
await globalPage.setupAndUseApiCalls(extensionId);
|
||||||
|
await onboardingPage.signInExistingUser();
|
||||||
|
await page.goto('https://wallet.hiro.so');
|
||||||
|
});
|
||||||
|
|
||||||
|
function clickActionButton(context: BrowserContext) {
|
||||||
|
return async (buttonToPress: 'Cancel' | 'Sign') => {
|
||||||
|
const popup = await context.waitForEvent('page');
|
||||||
|
const btn = popup.locator(`text="${buttonToPress}"`);
|
||||||
|
await btn.click();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function initiateMessageSigning(page: Page) {
|
||||||
|
return async (message: string) =>
|
||||||
|
page.evaluate(
|
||||||
|
async message =>
|
||||||
|
(window as any).HiroWalletProvider.request('signMessage', {
|
||||||
|
message,
|
||||||
|
}).catch((e: unknown) => e),
|
||||||
|
message
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
test('Signature approved', async ({ page, context }) => {
|
||||||
|
const [result] = await Promise.all([
|
||||||
|
initiateMessageSigning(page)('test'),
|
||||||
|
clickActionButton(context)('Sign'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// ID is random, so we anticipate it
|
||||||
|
delete result.id;
|
||||||
|
|
||||||
|
test.expect(result).toEqual({
|
||||||
|
jsonrpc: '2.0',
|
||||||
|
result: {
|
||||||
|
signature:
|
||||||
|
'AkcwRAIgdvIlzioQtCWH+p3yLgHcBOIcHCzK2FysW1sZ6IuS2foCIGZUMUUg8emDxtsE5XZh4CDsVM64jL8SssFMpq0kIaqJASEDYBnHwvCycDDBY1EklpMD4+R6Z+KBIwYMwApNNhWs220=',
|
||||||
|
address: 'bc1qhdykvr9eafepm9cf6aryk0stmmwpv4wws9raj5',
|
||||||
|
message: 'test',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Signature rejected', async ({ page, context }) => {
|
||||||
|
const [result] = await Promise.all([
|
||||||
|
initiateMessageSigning(page)('test'),
|
||||||
|
clickActionButton(context)('Cancel'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
delete result.id;
|
||||||
|
|
||||||
|
test.expect(result).toEqual({
|
||||||
|
jsonrpc: '2.0',
|
||||||
|
error: {
|
||||||
|
code: 4001,
|
||||||
|
message: 'User rejected message signing request',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}));
|
||||||
@@ -713,10 +713,10 @@
|
|||||||
sha.js "^2.4.11"
|
sha.js "^2.4.11"
|
||||||
smart-buffer "^4.1.0"
|
smart-buffer "^4.1.0"
|
||||||
|
|
||||||
"@btckit/types@0.0.16":
|
"@btckit/types@0.0.18":
|
||||||
version "0.0.16"
|
version "0.0.18"
|
||||||
resolved "https://registry.yarnpkg.com/@btckit/types/-/types-0.0.16.tgz#f63a62e052d3d852083c3b7b38f7d8939af78ec0"
|
resolved "https://registry.yarnpkg.com/@btckit/types/-/types-0.0.18.tgz#48bd0b564a9c14bf0c670b0834131e5054c20d69"
|
||||||
integrity sha512-giSLXXe7hYubCkzqVgBIbBDH4StiSGTPUs+Nd4WIKVumf0hz8xrrubv7HUSgkpG2gsMXPzTIRDF6rorhKRt4xA==
|
integrity sha512-2b/Ny4rZ+TbGW59xiV/PvXRP1cnF40874t12OzeVKa/BghxBFazEayDHce9YtPTkxQ4ilQkmeNrS67FWK4OsGA==
|
||||||
|
|
||||||
"@coinbase/cbpay-js@1.0.2":
|
"@coinbase/cbpay-js@1.0.2":
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user