@ledgerhq/coin-canton 0.8.0-nightly.6 → 0.8.0-nightly.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +11 -0
- package/package.json +6 -6
- package/lib/api/getBalance.integ.test.d.ts +0 -2
- package/lib/api/getBalance.integ.test.d.ts.map +0 -1
- package/lib/api/getBalance.integ.test.js +0 -28
- package/lib/api/getBalance.integ.test.js.map +0 -1
- package/lib/api/index.test.d.ts +0 -2
- package/lib/api/index.test.d.ts.map +0 -1
- package/lib/api/index.test.js +0 -16
- package/lib/api/index.test.js.map +0 -1
- package/lib/api/lastBlock.integ.test.d.ts +0 -2
- package/lib/api/lastBlock.integ.test.d.ts.map +0 -1
- package/lib/api/lastBlock.integ.test.js +0 -22
- package/lib/api/lastBlock.integ.test.js.map +0 -1
- package/lib/api/listOperations.integ.test.d.ts +0 -2
- package/lib/api/listOperations.integ.test.d.ts.map +0 -1
- package/lib/api/listOperations.integ.test.js +0 -24
- package/lib/api/listOperations.integ.test.js.map +0 -1
- package/lib/bridge/broadcast.test.d.ts +0 -2
- package/lib/bridge/broadcast.test.d.ts.map +0 -1
- package/lib/bridge/broadcast.test.js +0 -44
- package/lib/bridge/broadcast.test.js.map +0 -1
- package/lib/bridge/createTransaction.test.d.ts +0 -2
- package/lib/bridge/createTransaction.test.d.ts.map +0 -1
- package/lib/bridge/createTransaction.test.js +0 -12
- package/lib/bridge/createTransaction.test.js.map +0 -1
- package/lib/bridge/deviceTransactionConfig.test.d.ts +0 -2
- package/lib/bridge/deviceTransactionConfig.test.d.ts.map +0 -1
- package/lib/bridge/deviceTransactionConfig.test.js +0 -22
- package/lib/bridge/deviceTransactionConfig.test.js.map +0 -1
- package/lib/bridge/getTransactionStatus.test.d.ts +0 -2
- package/lib/bridge/getTransactionStatus.test.d.ts.map +0 -1
- package/lib/bridge/getTransactionStatus.test.js +0 -365
- package/lib/bridge/getTransactionStatus.test.js.map +0 -1
- package/lib/bridge/index.test.d.ts +0 -2
- package/lib/bridge/index.test.d.ts.map +0 -1
- package/lib/bridge/index.test.js +0 -31
- package/lib/bridge/index.test.js.map +0 -1
- package/lib/bridge/onboard.integ.test.d.ts +0 -2
- package/lib/bridge/onboard.integ.test.d.ts.map +0 -1
- package/lib/bridge/onboard.integ.test.js +0 -182
- package/lib/bridge/onboard.integ.test.js.map +0 -1
- package/lib/bridge/onboard.test.d.ts +0 -2
- package/lib/bridge/onboard.test.d.ts.map +0 -1
- package/lib/bridge/onboard.test.js +0 -84
- package/lib/bridge/onboard.test.js.map +0 -1
- package/lib/bridge/prepareTransaction.test.d.ts +0 -2
- package/lib/bridge/prepareTransaction.test.d.ts.map +0 -1
- package/lib/bridge/prepareTransaction.test.js +0 -42
- package/lib/bridge/prepareTransaction.test.js.map +0 -1
- package/lib/bridge/sync.integ.test.d.ts +0 -2
- package/lib/bridge/sync.integ.test.d.ts.map +0 -1
- package/lib/bridge/sync.integ.test.js +0 -198
- package/lib/bridge/sync.integ.test.js.map +0 -1
- package/lib/bridge/sync.test.d.ts +0 -2
- package/lib/bridge/sync.test.d.ts.map +0 -1
- package/lib/bridge/sync.test.js +0 -201
- package/lib/bridge/sync.test.js.map +0 -1
- package/lib/common-logic/account/getBalance.unit.test.d.ts +0 -2
- package/lib/common-logic/account/getBalance.unit.test.d.ts.map +0 -1
- package/lib/common-logic/account/getBalance.unit.test.js +0 -91
- package/lib/common-logic/account/getBalance.unit.test.js.map +0 -1
- package/lib/common-logic/history/lastBlock.test.d.ts +0 -2
- package/lib/common-logic/history/lastBlock.test.d.ts.map +0 -1
- package/lib/common-logic/history/lastBlock.test.js +0 -46
- package/lib/common-logic/history/lastBlock.test.js.map +0 -1
- package/lib/common-logic/transaction/broadcast.test.d.ts +0 -2
- package/lib/common-logic/transaction/broadcast.test.d.ts.map +0 -1
- package/lib/common-logic/transaction/broadcast.test.js +0 -71
- package/lib/common-logic/transaction/broadcast.test.js.map +0 -1
- package/lib/common-logic/transaction/combine.test.d.ts +0 -2
- package/lib/common-logic/transaction/combine.test.d.ts.map +0 -1
- package/lib/common-logic/transaction/combine.test.js +0 -18
- package/lib/common-logic/transaction/combine.test.js.map +0 -1
- package/lib/common-logic/transaction/estimateFees.test.d.ts +0 -2
- package/lib/common-logic/transaction/estimateFees.test.d.ts.map +0 -1
- package/lib/common-logic/transaction/estimateFees.test.js +0 -72
- package/lib/common-logic/transaction/estimateFees.test.js.map +0 -1
- package/lib/common-logic/utils.test.d.ts +0 -2
- package/lib/common-logic/utils.test.d.ts.map +0 -1
- package/lib/common-logic/utils.test.js +0 -104
- package/lib/common-logic/utils.test.js.map +0 -1
- package/lib/network/gateway.integ.test.d.ts +0 -2
- package/lib/network/gateway.integ.test.d.ts.map +0 -1
- package/lib/network/gateway.integ.test.js +0 -190
- package/lib/network/gateway.integ.test.js.map +0 -1
- package/lib/network/gateway.test.d.ts +0 -2
- package/lib/network/gateway.test.d.ts.map +0 -1
- package/lib/network/gateway.test.js +0 -59
- package/lib/network/gateway.test.js.map +0 -1
- package/lib/network/node.integ.test.d.ts +0 -2
- package/lib/network/node.integ.test.d.ts.map +0 -1
- package/lib/network/node.integ.test.js +0 -44
- package/lib/network/node.integ.test.js.map +0 -1
- package/lib/network/node.unit.test.d.ts +0 -2
- package/lib/network/node.unit.test.d.ts.map +0 -1
- package/lib/network/node.unit.test.js +0 -32
- package/lib/network/node.unit.test.js.map +0 -1
- package/lib-es/api/getBalance.integ.test.d.ts +0 -2
- package/lib-es/api/getBalance.integ.test.d.ts.map +0 -1
- package/lib-es/api/getBalance.integ.test.js +0 -26
- package/lib-es/api/getBalance.integ.test.js.map +0 -1
- package/lib-es/api/index.test.d.ts +0 -2
- package/lib-es/api/index.test.d.ts.map +0 -1
- package/lib-es/api/index.test.js +0 -14
- package/lib-es/api/index.test.js.map +0 -1
- package/lib-es/api/lastBlock.integ.test.d.ts +0 -2
- package/lib-es/api/lastBlock.integ.test.d.ts.map +0 -1
- package/lib-es/api/lastBlock.integ.test.js +0 -20
- package/lib-es/api/lastBlock.integ.test.js.map +0 -1
- package/lib-es/api/listOperations.integ.test.d.ts +0 -2
- package/lib-es/api/listOperations.integ.test.d.ts.map +0 -1
- package/lib-es/api/listOperations.integ.test.js +0 -22
- package/lib-es/api/listOperations.integ.test.js.map +0 -1
- package/lib-es/bridge/broadcast.test.d.ts +0 -2
- package/lib-es/bridge/broadcast.test.d.ts.map +0 -1
- package/lib-es/bridge/broadcast.test.js +0 -42
- package/lib-es/bridge/broadcast.test.js.map +0 -1
- package/lib-es/bridge/createTransaction.test.d.ts +0 -2
- package/lib-es/bridge/createTransaction.test.d.ts.map +0 -1
- package/lib-es/bridge/createTransaction.test.js +0 -10
- package/lib-es/bridge/createTransaction.test.js.map +0 -1
- package/lib-es/bridge/deviceTransactionConfig.test.d.ts +0 -2
- package/lib-es/bridge/deviceTransactionConfig.test.d.ts.map +0 -1
- package/lib-es/bridge/deviceTransactionConfig.test.js +0 -17
- package/lib-es/bridge/deviceTransactionConfig.test.js.map +0 -1
- package/lib-es/bridge/getTransactionStatus.test.d.ts +0 -2
- package/lib-es/bridge/getTransactionStatus.test.d.ts.map +0 -1
- package/lib-es/bridge/getTransactionStatus.test.js +0 -360
- package/lib-es/bridge/getTransactionStatus.test.js.map +0 -1
- package/lib-es/bridge/index.test.d.ts +0 -2
- package/lib-es/bridge/index.test.d.ts.map +0 -1
- package/lib-es/bridge/index.test.js +0 -29
- package/lib-es/bridge/index.test.js.map +0 -1
- package/lib-es/bridge/onboard.integ.test.d.ts +0 -2
- package/lib-es/bridge/onboard.integ.test.d.ts.map +0 -1
- package/lib-es/bridge/onboard.integ.test.js +0 -177
- package/lib-es/bridge/onboard.integ.test.js.map +0 -1
- package/lib-es/bridge/onboard.test.d.ts +0 -2
- package/lib-es/bridge/onboard.test.d.ts.map +0 -1
- package/lib-es/bridge/onboard.test.js +0 -49
- package/lib-es/bridge/onboard.test.js.map +0 -1
- package/lib-es/bridge/prepareTransaction.test.d.ts +0 -2
- package/lib-es/bridge/prepareTransaction.test.d.ts.map +0 -1
- package/lib-es/bridge/prepareTransaction.test.js +0 -37
- package/lib-es/bridge/prepareTransaction.test.js.map +0 -1
- package/lib-es/bridge/sync.integ.test.d.ts +0 -2
- package/lib-es/bridge/sync.integ.test.d.ts.map +0 -1
- package/lib-es/bridge/sync.integ.test.js +0 -160
- package/lib-es/bridge/sync.integ.test.js.map +0 -1
- package/lib-es/bridge/sync.test.d.ts +0 -2
- package/lib-es/bridge/sync.test.d.ts.map +0 -1
- package/lib-es/bridge/sync.test.js +0 -163
- package/lib-es/bridge/sync.test.js.map +0 -1
- package/lib-es/common-logic/account/getBalance.unit.test.d.ts +0 -2
- package/lib-es/common-logic/account/getBalance.unit.test.d.ts.map +0 -1
- package/lib-es/common-logic/account/getBalance.unit.test.js +0 -56
- package/lib-es/common-logic/account/getBalance.unit.test.js.map +0 -1
- package/lib-es/common-logic/history/lastBlock.test.d.ts +0 -2
- package/lib-es/common-logic/history/lastBlock.test.d.ts.map +0 -1
- package/lib-es/common-logic/history/lastBlock.test.js +0 -41
- package/lib-es/common-logic/history/lastBlock.test.js.map +0 -1
- package/lib-es/common-logic/transaction/broadcast.test.d.ts +0 -2
- package/lib-es/common-logic/transaction/broadcast.test.d.ts.map +0 -1
- package/lib-es/common-logic/transaction/broadcast.test.js +0 -36
- package/lib-es/common-logic/transaction/broadcast.test.js.map +0 -1
- package/lib-es/common-logic/transaction/combine.test.d.ts +0 -2
- package/lib-es/common-logic/transaction/combine.test.d.ts.map +0 -1
- package/lib-es/common-logic/transaction/combine.test.js +0 -16
- package/lib-es/common-logic/transaction/combine.test.js.map +0 -1
- package/lib-es/common-logic/transaction/estimateFees.test.d.ts +0 -2
- package/lib-es/common-logic/transaction/estimateFees.test.d.ts.map +0 -1
- package/lib-es/common-logic/transaction/estimateFees.test.js +0 -37
- package/lib-es/common-logic/transaction/estimateFees.test.js.map +0 -1
- package/lib-es/common-logic/utils.test.d.ts +0 -2
- package/lib-es/common-logic/utils.test.d.ts.map +0 -1
- package/lib-es/common-logic/utils.test.js +0 -99
- package/lib-es/common-logic/utils.test.js.map +0 -1
- package/lib-es/network/gateway.integ.test.d.ts +0 -2
- package/lib-es/network/gateway.integ.test.d.ts.map +0 -1
- package/lib-es/network/gateway.integ.test.js +0 -185
- package/lib-es/network/gateway.integ.test.js.map +0 -1
- package/lib-es/network/gateway.test.d.ts +0 -2
- package/lib-es/network/gateway.test.d.ts.map +0 -1
- package/lib-es/network/gateway.test.js +0 -54
- package/lib-es/network/gateway.test.js.map +0 -1
- package/lib-es/network/node.integ.test.d.ts +0 -2
- package/lib-es/network/node.integ.test.d.ts.map +0 -1
- package/lib-es/network/node.integ.test.js +0 -39
- package/lib-es/network/node.integ.test.js.map +0 -1
- package/lib-es/network/node.unit.test.d.ts +0 -2
- package/lib-es/network/node.unit.test.d.ts.map +0 -1
- package/lib-es/network/node.unit.test.js +0 -27
- package/lib-es/network/node.unit.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.test.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import BigNumber from "bignumber.js";
|
|
2
|
-
import { AmountRequired, FeeNotLoaded, FeeRequired, FeeTooHigh, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalanceBecauseDestinationNotCreated, NotEnoughSpendableBalance, RecipientRequired, } from "@ledgerhq/errors";
|
|
3
|
-
import { getTransactionStatus } from "./getTransactionStatus";
|
|
4
|
-
import coinConfig from "../config";
|
|
5
|
-
// Mock the coin config
|
|
6
|
-
jest.mock("../config", () => ({
|
|
7
|
-
getCoinConfig: jest.fn(),
|
|
8
|
-
}));
|
|
9
|
-
const mockCoinConfig = jest.mocked(coinConfig);
|
|
10
|
-
describe("getTransactionStatus", () => {
|
|
11
|
-
const mockCurrency = {
|
|
12
|
-
id: "canton_network",
|
|
13
|
-
name: "Canton Network",
|
|
14
|
-
family: "canton",
|
|
15
|
-
units: [
|
|
16
|
-
{
|
|
17
|
-
name: "Canton",
|
|
18
|
-
code: "CANTON",
|
|
19
|
-
magnitude: 8,
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
ticker: "CANTON",
|
|
23
|
-
scheme: "canton",
|
|
24
|
-
color: "#000000",
|
|
25
|
-
type: "CryptoCurrency",
|
|
26
|
-
managerAppName: "Canton",
|
|
27
|
-
coinType: 0,
|
|
28
|
-
disableCountervalue: false,
|
|
29
|
-
delisted: false,
|
|
30
|
-
keywords: ["canton"],
|
|
31
|
-
explorerViews: [],
|
|
32
|
-
terminated: {
|
|
33
|
-
link: "",
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
const mockAccount = {
|
|
37
|
-
id: "test-account-id",
|
|
38
|
-
seedIdentifier: "test-seed-identifier",
|
|
39
|
-
currency: mockCurrency,
|
|
40
|
-
balance: new BigNumber(1000), // 1000 units
|
|
41
|
-
spendableBalance: new BigNumber(1000),
|
|
42
|
-
freshAddress: "test::123",
|
|
43
|
-
freshAddressPath: "44'/60'/0'/0/0",
|
|
44
|
-
index: 0,
|
|
45
|
-
derivationMode: "canton",
|
|
46
|
-
used: true,
|
|
47
|
-
operations: [],
|
|
48
|
-
pendingOperations: [],
|
|
49
|
-
lastSyncDate: new Date(),
|
|
50
|
-
creationDate: new Date(),
|
|
51
|
-
operationsCount: 0,
|
|
52
|
-
blockHeight: 100,
|
|
53
|
-
balanceHistoryCache: {
|
|
54
|
-
HOUR: { latestDate: null, balances: [] },
|
|
55
|
-
DAY: { latestDate: null, balances: [] },
|
|
56
|
-
WEEK: { latestDate: null, balances: [] },
|
|
57
|
-
},
|
|
58
|
-
swapHistory: [],
|
|
59
|
-
nfts: [],
|
|
60
|
-
subAccounts: [],
|
|
61
|
-
type: "Account",
|
|
62
|
-
};
|
|
63
|
-
beforeEach(() => {
|
|
64
|
-
jest.clearAllMocks();
|
|
65
|
-
mockCoinConfig.getCoinConfig.mockReturnValue({
|
|
66
|
-
minReserve: 100, // 100 units minimum reserve
|
|
67
|
-
networkType: "mainnet",
|
|
68
|
-
status: { type: "active" },
|
|
69
|
-
nativeInstrumentId: "Amulet",
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe("fee validation", () => {
|
|
73
|
-
it("should return FeeNotLoaded error when fee is not provided", async () => {
|
|
74
|
-
const transaction = {
|
|
75
|
-
family: "canton",
|
|
76
|
-
amount: new BigNumber(100),
|
|
77
|
-
recipient: "valid::123",
|
|
78
|
-
fee: null,
|
|
79
|
-
tokenId: "",
|
|
80
|
-
};
|
|
81
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
82
|
-
expect(result.errors.fee).toBeInstanceOf(FeeNotLoaded);
|
|
83
|
-
expect(result.warnings).toEqual({});
|
|
84
|
-
});
|
|
85
|
-
it("should return FeeRequired error when fee is zero", async () => {
|
|
86
|
-
const transaction = {
|
|
87
|
-
family: "canton",
|
|
88
|
-
amount: new BigNumber(100),
|
|
89
|
-
recipient: "valid::123",
|
|
90
|
-
fee: new BigNumber(0),
|
|
91
|
-
tokenId: "",
|
|
92
|
-
};
|
|
93
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
94
|
-
expect(result.errors.fee).toBeInstanceOf(FeeRequired);
|
|
95
|
-
expect(result.warnings).toEqual({});
|
|
96
|
-
});
|
|
97
|
-
it("should add FeeTooHigh warning when fee is more than 10 times the amount", async () => {
|
|
98
|
-
const transaction = {
|
|
99
|
-
family: "canton",
|
|
100
|
-
amount: new BigNumber(100), // Use larger amount to avoid balance issues
|
|
101
|
-
recipient: "valid::123",
|
|
102
|
-
fee: new BigNumber(1500), // 15x the amount
|
|
103
|
-
tokenId: "",
|
|
104
|
-
};
|
|
105
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
106
|
-
expect(result.warnings.feeTooHigh).toBeInstanceOf(FeeTooHigh);
|
|
107
|
-
// Don't check for empty errors since there might be balance issues
|
|
108
|
-
});
|
|
109
|
-
it("should not add FeeTooHigh warning when fee is reasonable", async () => {
|
|
110
|
-
const transaction = {
|
|
111
|
-
family: "canton",
|
|
112
|
-
amount: new BigNumber(100),
|
|
113
|
-
recipient: "valid::123",
|
|
114
|
-
fee: new BigNumber(10), // 0.1x the amount
|
|
115
|
-
tokenId: "",
|
|
116
|
-
};
|
|
117
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
118
|
-
expect(result.warnings).toEqual({});
|
|
119
|
-
expect(result.errors).toEqual({});
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
describe("balance validation", () => {
|
|
123
|
-
it("should return NotEnoughSpendableBalance error when total spent exceeds balance minus reserve", async () => {
|
|
124
|
-
const transaction = {
|
|
125
|
-
family: "canton",
|
|
126
|
-
amount: new BigNumber(950), // 950 + 10 fee = 960, but balance is 1000 and reserve is 100
|
|
127
|
-
recipient: "valid::123",
|
|
128
|
-
fee: new BigNumber(10),
|
|
129
|
-
tokenId: "",
|
|
130
|
-
};
|
|
131
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
132
|
-
expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
|
|
133
|
-
});
|
|
134
|
-
it("should return NotEnoughBalanceBecauseDestinationNotCreated error when amount is below reserve", async () => {
|
|
135
|
-
const transaction = {
|
|
136
|
-
family: "canton",
|
|
137
|
-
amount: new BigNumber(50), // Below reserve amount of 100
|
|
138
|
-
recipient: "valid::123",
|
|
139
|
-
fee: new BigNumber(10),
|
|
140
|
-
tokenId: "",
|
|
141
|
-
};
|
|
142
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
143
|
-
expect(result.errors.amount).toBeInstanceOf(NotEnoughBalanceBecauseDestinationNotCreated);
|
|
144
|
-
});
|
|
145
|
-
it("should pass balance validation when transaction is within limits", async () => {
|
|
146
|
-
const transaction = {
|
|
147
|
-
family: "canton",
|
|
148
|
-
amount: new BigNumber(800), // 800 + 10 fee = 810, balance is 1000, reserve is 100, so 900 available
|
|
149
|
-
recipient: "valid::123",
|
|
150
|
-
fee: new BigNumber(10),
|
|
151
|
-
tokenId: "",
|
|
152
|
-
};
|
|
153
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
154
|
-
expect(result.errors.amount).toBeUndefined();
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe("recipient validation", () => {
|
|
158
|
-
it("should return RecipientRequired error when recipient is missing", async () => {
|
|
159
|
-
const transaction = {
|
|
160
|
-
family: "canton",
|
|
161
|
-
amount: new BigNumber(100),
|
|
162
|
-
recipient: "",
|
|
163
|
-
fee: new BigNumber(10),
|
|
164
|
-
tokenId: "",
|
|
165
|
-
};
|
|
166
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
167
|
-
expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
|
|
168
|
-
});
|
|
169
|
-
it("should return InvalidAddressBecauseDestinationIsAlsoSource error when sending to self", async () => {
|
|
170
|
-
const transaction = {
|
|
171
|
-
family: "canton",
|
|
172
|
-
amount: new BigNumber(100),
|
|
173
|
-
recipient: "test::123", // Same as account.freshAddress
|
|
174
|
-
fee: new BigNumber(10),
|
|
175
|
-
tokenId: "",
|
|
176
|
-
};
|
|
177
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
178
|
-
expect(result.errors.recipient).toBeInstanceOf(InvalidAddressBecauseDestinationIsAlsoSource);
|
|
179
|
-
});
|
|
180
|
-
it("should return InvalidAddress error when recipient is invalid", async () => {
|
|
181
|
-
const transaction = {
|
|
182
|
-
family: "canton",
|
|
183
|
-
amount: new BigNumber(100),
|
|
184
|
-
recipient: "invalid-address",
|
|
185
|
-
fee: new BigNumber(10),
|
|
186
|
-
tokenId: "",
|
|
187
|
-
};
|
|
188
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
189
|
-
expect(result.errors.recipient).toBeInstanceOf(InvalidAddress);
|
|
190
|
-
});
|
|
191
|
-
it("should pass recipient validation when recipient is valid", async () => {
|
|
192
|
-
const transaction = {
|
|
193
|
-
family: "canton",
|
|
194
|
-
amount: new BigNumber(100),
|
|
195
|
-
recipient: "valid::456",
|
|
196
|
-
fee: new BigNumber(10),
|
|
197
|
-
tokenId: "",
|
|
198
|
-
};
|
|
199
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
200
|
-
expect(result.errors.recipient).toBeUndefined();
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
describe("amount validation", () => {
|
|
204
|
-
it("should return AmountRequired error when amount is zero", async () => {
|
|
205
|
-
// Create a scenario where there are no other amount errors
|
|
206
|
-
// Use a high balance and amount above reserve to avoid other amount errors
|
|
207
|
-
const accountWithHighBalance = {
|
|
208
|
-
...mockAccount,
|
|
209
|
-
balance: new BigNumber(10000), // High balance to avoid balance errors
|
|
210
|
-
};
|
|
211
|
-
// Set a high reserve to avoid the NotEnoughBalanceBecauseDestinationNotCreated error
|
|
212
|
-
mockCoinConfig.getCoinConfig.mockReturnValue({
|
|
213
|
-
minReserve: 0, // Set reserve to 0 to avoid reserve-related errors
|
|
214
|
-
networkType: "mainnet",
|
|
215
|
-
status: { type: "active" },
|
|
216
|
-
nativeInstrumentId: "Amulet",
|
|
217
|
-
});
|
|
218
|
-
const transaction = {
|
|
219
|
-
family: "canton",
|
|
220
|
-
amount: new BigNumber(0),
|
|
221
|
-
recipient: "valid::123",
|
|
222
|
-
fee: new BigNumber(10),
|
|
223
|
-
tokenId: "",
|
|
224
|
-
};
|
|
225
|
-
const result = await getTransactionStatus(accountWithHighBalance, transaction);
|
|
226
|
-
expect(result.errors.amount).toBeInstanceOf(AmountRequired);
|
|
227
|
-
});
|
|
228
|
-
it("should not return AmountRequired error when amount is positive", async () => {
|
|
229
|
-
const transaction = {
|
|
230
|
-
family: "canton",
|
|
231
|
-
amount: new BigNumber(100),
|
|
232
|
-
recipient: "valid::123",
|
|
233
|
-
fee: new BigNumber(10),
|
|
234
|
-
tokenId: "",
|
|
235
|
-
};
|
|
236
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
237
|
-
expect(result.errors.amount).toBeUndefined();
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
describe("return values", () => {
|
|
241
|
-
it("should return correct estimatedFees, amount, and totalSpent", async () => {
|
|
242
|
-
const transaction = {
|
|
243
|
-
family: "canton",
|
|
244
|
-
amount: new BigNumber(100),
|
|
245
|
-
recipient: "valid::123",
|
|
246
|
-
fee: new BigNumber(10),
|
|
247
|
-
tokenId: "",
|
|
248
|
-
};
|
|
249
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
250
|
-
expect(result.estimatedFees).toEqual(new BigNumber(10));
|
|
251
|
-
expect(result.amount).toEqual(new BigNumber(100));
|
|
252
|
-
expect(result.totalSpent).toEqual(new BigNumber(110));
|
|
253
|
-
});
|
|
254
|
-
it("should return empty errors and warnings when transaction is valid", async () => {
|
|
255
|
-
const transaction = {
|
|
256
|
-
family: "canton",
|
|
257
|
-
amount: new BigNumber(100),
|
|
258
|
-
recipient: "valid::123",
|
|
259
|
-
fee: new BigNumber(10),
|
|
260
|
-
tokenId: "",
|
|
261
|
-
};
|
|
262
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
263
|
-
expect(result.errors).toEqual({});
|
|
264
|
-
expect(result.warnings).toEqual({});
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
describe("edge cases", () => {
|
|
268
|
-
it("should handle account with zero balance", async () => {
|
|
269
|
-
const accountWithZeroBalance = {
|
|
270
|
-
...mockAccount,
|
|
271
|
-
balance: new BigNumber(0),
|
|
272
|
-
};
|
|
273
|
-
const transaction = {
|
|
274
|
-
family: "canton",
|
|
275
|
-
amount: new BigNumber(50),
|
|
276
|
-
recipient: "valid::123",
|
|
277
|
-
fee: new BigNumber(10),
|
|
278
|
-
tokenId: "",
|
|
279
|
-
};
|
|
280
|
-
const result = await getTransactionStatus(accountWithZeroBalance, transaction);
|
|
281
|
-
expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
|
|
282
|
-
});
|
|
283
|
-
it("should handle account with balance exactly equal to reserve", async () => {
|
|
284
|
-
const accountWithReserveBalance = {
|
|
285
|
-
...mockAccount,
|
|
286
|
-
balance: new BigNumber(100), // Exactly equal to reserve
|
|
287
|
-
};
|
|
288
|
-
const transaction = {
|
|
289
|
-
family: "canton",
|
|
290
|
-
amount: new BigNumber(50),
|
|
291
|
-
recipient: "valid::123",
|
|
292
|
-
fee: new BigNumber(10),
|
|
293
|
-
tokenId: "",
|
|
294
|
-
};
|
|
295
|
-
const result = await getTransactionStatus(accountWithReserveBalance, transaction);
|
|
296
|
-
expect(result.errors.amount).toBeInstanceOf(NotEnoughSpendableBalance);
|
|
297
|
-
});
|
|
298
|
-
it("should handle zero reserve amount", async () => {
|
|
299
|
-
mockCoinConfig.getCoinConfig.mockReturnValue({
|
|
300
|
-
minReserve: 0,
|
|
301
|
-
networkType: "mainnet",
|
|
302
|
-
status: { type: "active" },
|
|
303
|
-
nativeInstrumentId: "Amulet",
|
|
304
|
-
});
|
|
305
|
-
const transaction = {
|
|
306
|
-
family: "canton",
|
|
307
|
-
amount: new BigNumber(50),
|
|
308
|
-
recipient: "valid::123",
|
|
309
|
-
fee: new BigNumber(10),
|
|
310
|
-
tokenId: "",
|
|
311
|
-
};
|
|
312
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
313
|
-
expect(result.errors.amount).toBeUndefined();
|
|
314
|
-
});
|
|
315
|
-
it("should handle undefined reserve amount", async () => {
|
|
316
|
-
mockCoinConfig.getCoinConfig.mockReturnValue({
|
|
317
|
-
networkType: "mainnet",
|
|
318
|
-
status: { type: "active" },
|
|
319
|
-
nativeInstrumentId: "Amulet",
|
|
320
|
-
});
|
|
321
|
-
const transaction = {
|
|
322
|
-
family: "canton",
|
|
323
|
-
amount: new BigNumber(50),
|
|
324
|
-
recipient: "valid::123",
|
|
325
|
-
fee: new BigNumber(10),
|
|
326
|
-
tokenId: "",
|
|
327
|
-
};
|
|
328
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
329
|
-
expect(result.errors.amount).toBeUndefined();
|
|
330
|
-
});
|
|
331
|
-
});
|
|
332
|
-
describe("multiple validation errors", () => {
|
|
333
|
-
it("should return multiple errors when multiple validations fail", async () => {
|
|
334
|
-
const transaction = {
|
|
335
|
-
family: "canton",
|
|
336
|
-
amount: new BigNumber(0), // AmountRequired
|
|
337
|
-
recipient: "", // RecipientRequired
|
|
338
|
-
fee: null, // FeeNotLoaded
|
|
339
|
-
tokenId: "",
|
|
340
|
-
};
|
|
341
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
342
|
-
expect(result.errors.amount).toBeInstanceOf(AmountRequired);
|
|
343
|
-
expect(result.errors.recipient).toBeInstanceOf(RecipientRequired);
|
|
344
|
-
expect(result.errors.fee).toBeInstanceOf(FeeNotLoaded);
|
|
345
|
-
});
|
|
346
|
-
it("should return both errors and warnings", async () => {
|
|
347
|
-
const transaction = {
|
|
348
|
-
family: "canton",
|
|
349
|
-
amount: new BigNumber(5), // Small amount
|
|
350
|
-
recipient: "valid::123",
|
|
351
|
-
fee: new BigNumber(100), // High fee relative to amount
|
|
352
|
-
tokenId: "",
|
|
353
|
-
};
|
|
354
|
-
const result = await getTransactionStatus(mockAccount, transaction);
|
|
355
|
-
expect(result.warnings.feeTooHigh).toBeInstanceOf(FeeTooHigh);
|
|
356
|
-
expect(result.errors.amount).toBeInstanceOf(NotEnoughBalanceBecauseDestinationNotCreated);
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
});
|
|
360
|
-
//# sourceMappingURL=getTransactionStatus.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/bridge/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { createBridges } from ".";
|
|
2
|
-
describe("createBridges", () => {
|
|
3
|
-
it("should return both bridges interface", () => {
|
|
4
|
-
const bridges = createBridges(undefined, {});
|
|
5
|
-
expect(bridges.accountBridge).toBeDefined();
|
|
6
|
-
expect(bridges.currencyBridge).toBeDefined();
|
|
7
|
-
});
|
|
8
|
-
it("should have a currency bridge with required methods", () => {
|
|
9
|
-
const bridges = createBridges(undefined, {});
|
|
10
|
-
expect(bridges.currencyBridge).toBeDefined();
|
|
11
|
-
expect(bridges.currencyBridge.preload).toBeDefined();
|
|
12
|
-
expect(bridges.currencyBridge.hydrate).toBeDefined();
|
|
13
|
-
expect(bridges.currencyBridge.scanAccounts).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
it("should have an account bridge with required methods", () => {
|
|
16
|
-
const bridges = createBridges(undefined, {});
|
|
17
|
-
expect(bridges.accountBridge).toBeDefined();
|
|
18
|
-
expect(bridges.accountBridge.broadcast).toBeDefined();
|
|
19
|
-
expect(bridges.accountBridge.createTransaction).toBeDefined();
|
|
20
|
-
expect(bridges.accountBridge.estimateMaxSpendable).toBeDefined();
|
|
21
|
-
expect(bridges.accountBridge.getTransactionStatus).toBeDefined();
|
|
22
|
-
expect(bridges.accountBridge.prepareTransaction).toBeDefined();
|
|
23
|
-
expect(bridges.accountBridge.receive).toBeDefined();
|
|
24
|
-
expect(bridges.accountBridge.signOperation).toBeDefined();
|
|
25
|
-
expect(bridges.accountBridge.sync).toBeDefined();
|
|
26
|
-
expect(bridges.accountBridge.updateTransaction).toBeDefined();
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/bridge/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAElC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAgB,EAAE,EAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,SAAgB,EAAE,EAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,SAAgB,EAAE,EAAS,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.integ.test.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.integ.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import BigNumber from "bignumber.js";
|
|
2
|
-
import { firstValueFrom, toArray } from "rxjs";
|
|
3
|
-
import { emptyHistoryCache } from "@ledgerhq/coin-framework/account/index";
|
|
4
|
-
import { generateMockKeyPair, createMockSigner } from "../test/cantonTestUtils";
|
|
5
|
-
import { AuthorizeStatus, OnboardStatus, } from "../types/onboard";
|
|
6
|
-
import coinConfig from "../config";
|
|
7
|
-
import { buildOnboardAccount, isAccountOnboarded, buildAuthorizePreapproval } from "./onboard";
|
|
8
|
-
describe("onboard (devnet)", () => {
|
|
9
|
-
const mockDeviceId = "test-device-id";
|
|
10
|
-
const mockCurrency = {
|
|
11
|
-
id: "canton_network",
|
|
12
|
-
};
|
|
13
|
-
const mockAccount = {
|
|
14
|
-
type: "Account",
|
|
15
|
-
id: "js:2:canton_network:canton_3f5c9d9a:canton",
|
|
16
|
-
seedIdentifier: "canton_3f5c9d9a",
|
|
17
|
-
derivationMode: "canton",
|
|
18
|
-
index: 0,
|
|
19
|
-
freshAddress: "canton_3f5c9d9a",
|
|
20
|
-
freshAddressPath: "44'/6767'/0'/0'/0'",
|
|
21
|
-
used: false,
|
|
22
|
-
balance: BigNumber(10000),
|
|
23
|
-
spendableBalance: BigNumber(10000),
|
|
24
|
-
creationDate: new Date(),
|
|
25
|
-
blockHeight: 1,
|
|
26
|
-
currency: mockCurrency,
|
|
27
|
-
operationsCount: 0,
|
|
28
|
-
operations: [],
|
|
29
|
-
pendingOperations: [],
|
|
30
|
-
lastSyncDate: new Date(),
|
|
31
|
-
balanceHistoryCache: emptyHistoryCache,
|
|
32
|
-
swapHistory: [],
|
|
33
|
-
};
|
|
34
|
-
let onboardedAccount = null;
|
|
35
|
-
beforeAll(() => {
|
|
36
|
-
coinConfig.setCoinConfig(() => ({
|
|
37
|
-
gatewayUrl: "https://canton-gateway.api.live.ledger-test.com",
|
|
38
|
-
useGateway: true,
|
|
39
|
-
networkType: "devnet",
|
|
40
|
-
nativeInstrumentId: "Amulet",
|
|
41
|
-
status: {
|
|
42
|
-
type: "active",
|
|
43
|
-
},
|
|
44
|
-
}));
|
|
45
|
-
});
|
|
46
|
-
const getOnboardedAccount = () => {
|
|
47
|
-
if (!onboardedAccount) {
|
|
48
|
-
throw new Error("onboardedAccount is null. Ensure isAccountOnboarded test runs first to set it.");
|
|
49
|
-
}
|
|
50
|
-
return onboardedAccount;
|
|
51
|
-
};
|
|
52
|
-
describe("isAccountOnboarded", () => {
|
|
53
|
-
it("should return true for onboarded account", async () => {
|
|
54
|
-
// GIVEN
|
|
55
|
-
const keyPair = generateMockKeyPair();
|
|
56
|
-
const mockSigner = createMockSigner(keyPair);
|
|
57
|
-
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
58
|
-
return callback(mockSigner);
|
|
59
|
-
});
|
|
60
|
-
const onboardObservable = buildOnboardAccount(mockSignerContext);
|
|
61
|
-
const onboardValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
|
|
62
|
-
const onboardResult = onboardValues.find((value) => "partyId" in value);
|
|
63
|
-
if (!onboardResult) {
|
|
64
|
-
throw new Error("Failed to onboard account for shared test data");
|
|
65
|
-
}
|
|
66
|
-
// Save onboarded account for all tests that need a valid party ID
|
|
67
|
-
onboardedAccount = {
|
|
68
|
-
keyPair,
|
|
69
|
-
mockSigner,
|
|
70
|
-
mockSignerContext,
|
|
71
|
-
onboardResult,
|
|
72
|
-
};
|
|
73
|
-
// WHEN
|
|
74
|
-
const result = await isAccountOnboarded(mockCurrency, keyPair.publicKeyHex);
|
|
75
|
-
// THEN
|
|
76
|
-
expect(result).not.toBe(false);
|
|
77
|
-
if (typeof result === "object") {
|
|
78
|
-
expect(result.partyId).toBeDefined();
|
|
79
|
-
expect(result.partyId).toBe(onboardResult.partyId);
|
|
80
|
-
}
|
|
81
|
-
}, 40000);
|
|
82
|
-
it("should return false for non-onboarded account with fresh keypair", async () => {
|
|
83
|
-
// GIVEN
|
|
84
|
-
const keyPair = generateMockKeyPair();
|
|
85
|
-
// WHEN
|
|
86
|
-
const result = await isAccountOnboarded(mockCurrency, keyPair.publicKeyHex);
|
|
87
|
-
// THEN
|
|
88
|
-
expect(result).toEqual({ isOnboarded: false });
|
|
89
|
-
}, 15000);
|
|
90
|
-
it("should handle errors gracefully when checking non-existent party", async () => {
|
|
91
|
-
// GIVEN
|
|
92
|
-
const keyPair = generateMockKeyPair();
|
|
93
|
-
// WHEN
|
|
94
|
-
const result = await isAccountOnboarded(mockCurrency, keyPair.publicKeyHex);
|
|
95
|
-
// THEN
|
|
96
|
-
expect(result).toEqual({ isOnboarded: false });
|
|
97
|
-
}, 15000);
|
|
98
|
-
});
|
|
99
|
-
describe("buildOnboardAccount", () => {
|
|
100
|
-
it("should complete full onboarding flow with fresh keypair", async () => {
|
|
101
|
-
// GIVEN
|
|
102
|
-
const keyPair = generateMockKeyPair();
|
|
103
|
-
const mockSigner = createMockSigner(keyPair);
|
|
104
|
-
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
105
|
-
return callback(mockSigner);
|
|
106
|
-
});
|
|
107
|
-
const onboardObservable = buildOnboardAccount(mockSignerContext);
|
|
108
|
-
// WHEN
|
|
109
|
-
const allValues = await firstValueFrom(onboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
|
|
110
|
-
const progressValues = allValues.filter((value) => "status" in value && !("partyId" in value));
|
|
111
|
-
const resultValues = allValues.filter((value) => "partyId" in value);
|
|
112
|
-
// THEN
|
|
113
|
-
// Check expected status progression
|
|
114
|
-
expect(progressValues.some(p => p.status === OnboardStatus.INIT)).toBe(true);
|
|
115
|
-
expect(progressValues.some(p => p.status === OnboardStatus.PREPARE)).toBe(true);
|
|
116
|
-
expect(progressValues.some(p => p.status === OnboardStatus.SIGN)).toBe(true);
|
|
117
|
-
expect(progressValues.some(p => p.status === OnboardStatus.SUBMIT)).toBe(true);
|
|
118
|
-
// Check final result
|
|
119
|
-
expect(resultValues.length).toBeGreaterThan(0);
|
|
120
|
-
const finalResult = resultValues[resultValues.length - 1];
|
|
121
|
-
expect(finalResult.partyId).toBeDefined();
|
|
122
|
-
expect(typeof finalResult.partyId).toBe("string");
|
|
123
|
-
expect(mockSignerContext).toHaveBeenCalled();
|
|
124
|
-
}, 30000);
|
|
125
|
-
it("should complete full onboarding flow with already onboarded account", async () => {
|
|
126
|
-
// GIVEN
|
|
127
|
-
const { mockSignerContext, onboardResult: firstResult } = getOnboardedAccount();
|
|
128
|
-
const secondOnboardObservable = buildOnboardAccount(mockSignerContext);
|
|
129
|
-
// WHEN
|
|
130
|
-
const secondOnboardValues = await firstValueFrom(secondOnboardObservable(mockCurrency, mockDeviceId, mockAccount).pipe(toArray()));
|
|
131
|
-
const secondResult = secondOnboardValues.find((value) => "partyId" in value);
|
|
132
|
-
// THEN
|
|
133
|
-
expect(secondResult).toBeDefined();
|
|
134
|
-
expect(secondResult.partyId).toBe(firstResult.partyId);
|
|
135
|
-
expect(typeof secondResult.partyId).toBe("string");
|
|
136
|
-
}, 30000);
|
|
137
|
-
});
|
|
138
|
-
describe("buildAuthorizePreapproval", () => {
|
|
139
|
-
it("should complete preapproval flow for onboarded account", async () => {
|
|
140
|
-
// GIVEN
|
|
141
|
-
const { mockSignerContext, onboardResult } = getOnboardedAccount();
|
|
142
|
-
const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
|
|
143
|
-
// WHEN
|
|
144
|
-
const preapprovalValues = await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockAccount, onboardResult.partyId).pipe(toArray()));
|
|
145
|
-
const progressValues = preapprovalValues.filter((value) => "status" in value && !("isApproved" in value));
|
|
146
|
-
const resultValues = preapprovalValues.filter((value) => "isApproved" in value);
|
|
147
|
-
// THEN
|
|
148
|
-
// Check expected status progression
|
|
149
|
-
expect(progressValues.some(p => p.status === AuthorizeStatus.PREPARE)).toBe(true);
|
|
150
|
-
expect(progressValues.some(p => p.status === AuthorizeStatus.SIGN)).toBe(true);
|
|
151
|
-
expect(progressValues.some(p => p.status === AuthorizeStatus.SUBMIT)).toBe(true);
|
|
152
|
-
// Check final result (should be approved)
|
|
153
|
-
expect(resultValues.length).toBeGreaterThan(0);
|
|
154
|
-
const finalResult = resultValues[resultValues.length - 1];
|
|
155
|
-
expect(finalResult.isApproved).toBe(true);
|
|
156
|
-
expect(typeof finalResult.isApproved).toBe("boolean");
|
|
157
|
-
}, 30000);
|
|
158
|
-
it("should handle invalid party ID gracefully", async () => {
|
|
159
|
-
// GIVEN
|
|
160
|
-
const keyPair = generateMockKeyPair();
|
|
161
|
-
const mockSigner = createMockSigner(keyPair);
|
|
162
|
-
const mockSignerContext = jest.fn().mockImplementation((deviceId, callback) => {
|
|
163
|
-
return callback(mockSigner);
|
|
164
|
-
});
|
|
165
|
-
const preapprovalObservable = buildAuthorizePreapproval(mockSignerContext);
|
|
166
|
-
// WHEN & THEN
|
|
167
|
-
try {
|
|
168
|
-
await firstValueFrom(preapprovalObservable(mockCurrency, mockDeviceId, mockAccount, "invalid-party-id-123"));
|
|
169
|
-
expect(true).toBe(true);
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
expect(error).toBeDefined();
|
|
173
|
-
}
|
|
174
|
-
}, 30000);
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
//# sourceMappingURL=onboard.integ.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.integ.test.js","sourceRoot":"","sources":["../../src/bridge/onboard.integ.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.test.d.ts","sourceRoot":"","sources":["../../src/bridge/onboard.test.ts"],"names":[],"mappings":""}
|