@ledgerhq/coin-casper 2.2.0-nightly.8 → 2.2.0

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.
Files changed (131) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -69
  3. package/lib/api/index.integ.test.d.ts +2 -0
  4. package/lib/api/index.integ.test.d.ts.map +1 -0
  5. package/lib/api/index.integ.test.js +53 -0
  6. package/lib/api/index.integ.test.js.map +1 -0
  7. package/lib/api/index.test.d.ts +2 -0
  8. package/lib/api/index.test.d.ts.map +1 -0
  9. package/lib/api/index.test.js +274 -0
  10. package/lib/api/index.test.js.map +1 -0
  11. package/lib/bridge/bridgeHelpers/accountShape.test.d.ts +2 -0
  12. package/lib/bridge/bridgeHelpers/accountShape.test.d.ts.map +1 -0
  13. package/lib/bridge/bridgeHelpers/accountShape.test.js +94 -0
  14. package/lib/bridge/bridgeHelpers/accountShape.test.js.map +1 -0
  15. package/lib/bridge/bridgeHelpers/txn.test.d.ts +2 -0
  16. package/lib/bridge/bridgeHelpers/txn.test.d.ts.map +1 -0
  17. package/lib/bridge/bridgeHelpers/txn.test.js +306 -0
  18. package/lib/bridge/bridgeHelpers/txn.test.js.map +1 -0
  19. package/lib/bridge/broadcast.test.d.ts +2 -0
  20. package/lib/bridge/broadcast.test.d.ts.map +1 -0
  21. package/lib/bridge/broadcast.test.js +72 -0
  22. package/lib/bridge/broadcast.test.js.map +1 -0
  23. package/lib/bridge/buildOptimisticOperation.test.d.ts +2 -0
  24. package/lib/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  25. package/lib/bridge/buildOptimisticOperation.test.js +76 -0
  26. package/lib/bridge/buildOptimisticOperation.test.js.map +1 -0
  27. package/lib/bridge/createTransaction.test.d.ts +2 -0
  28. package/lib/bridge/createTransaction.test.d.ts.map +1 -0
  29. package/lib/bridge/createTransaction.test.js +41 -0
  30. package/lib/bridge/createTransaction.test.js.map +1 -0
  31. package/lib/bridge/deviceTransactionConfig.test.d.ts +2 -0
  32. package/lib/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  33. package/lib/bridge/deviceTransactionConfig.test.js +148 -0
  34. package/lib/bridge/deviceTransactionConfig.test.js.map +1 -0
  35. package/lib/bridge/estimateMaxSpendable.test.d.ts +2 -0
  36. package/lib/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  37. package/lib/bridge/estimateMaxSpendable.test.js +133 -0
  38. package/lib/bridge/estimateMaxSpendable.test.js.map +1 -0
  39. package/lib/bridge/getTransactionStatus.test.d.ts +2 -0
  40. package/lib/bridge/getTransactionStatus.test.d.ts.map +1 -0
  41. package/lib/bridge/getTransactionStatus.test.js +214 -0
  42. package/lib/bridge/getTransactionStatus.test.js.map +1 -0
  43. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  44. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  45. package/lib/bridge/prepareTransaction.test.js +159 -0
  46. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  47. package/lib/bridge/transaction.test.d.ts +2 -0
  48. package/lib/bridge/transaction.test.d.ts.map +1 -0
  49. package/lib/bridge/transaction.test.js +179 -0
  50. package/lib/bridge/transaction.test.js.map +1 -0
  51. package/lib/common-logic/utils.additional.test.d.ts +2 -0
  52. package/lib/common-logic/utils.additional.test.d.ts.map +1 -0
  53. package/lib/common-logic/utils.additional.test.js +58 -0
  54. package/lib/common-logic/utils.additional.test.js.map +1 -0
  55. package/lib/common-logic/utils.unit.test.d.ts +2 -0
  56. package/lib/common-logic/utils.unit.test.d.ts.map +1 -0
  57. package/lib/common-logic/utils.unit.test.js +52 -0
  58. package/lib/common-logic/utils.unit.test.js.map +1 -0
  59. package/lib/hw-signMessage.test.d.ts +2 -0
  60. package/lib/hw-signMessage.test.d.ts.map +1 -0
  61. package/lib/hw-signMessage.test.js +80 -0
  62. package/lib/hw-signMessage.test.js.map +1 -0
  63. package/lib/signer/getAddress.test.d.ts +2 -0
  64. package/lib/signer/getAddress.test.d.ts.map +1 -0
  65. package/lib/signer/getAddress.test.js +133 -0
  66. package/lib/signer/getAddress.test.js.map +1 -0
  67. package/lib-es/api/index.integ.test.d.ts +2 -0
  68. package/lib-es/api/index.integ.test.d.ts.map +1 -0
  69. package/lib-es/api/index.integ.test.js +51 -0
  70. package/lib-es/api/index.integ.test.js.map +1 -0
  71. package/lib-es/api/index.test.d.ts +2 -0
  72. package/lib-es/api/index.test.d.ts.map +1 -0
  73. package/lib-es/api/index.test.js +269 -0
  74. package/lib-es/api/index.test.js.map +1 -0
  75. package/lib-es/bridge/bridgeHelpers/accountShape.test.d.ts +2 -0
  76. package/lib-es/bridge/bridgeHelpers/accountShape.test.d.ts.map +1 -0
  77. package/lib-es/bridge/bridgeHelpers/accountShape.test.js +89 -0
  78. package/lib-es/bridge/bridgeHelpers/accountShape.test.js.map +1 -0
  79. package/lib-es/bridge/bridgeHelpers/txn.test.d.ts +2 -0
  80. package/lib-es/bridge/bridgeHelpers/txn.test.d.ts.map +1 -0
  81. package/lib-es/bridge/bridgeHelpers/txn.test.js +278 -0
  82. package/lib-es/bridge/bridgeHelpers/txn.test.js.map +1 -0
  83. package/lib-es/bridge/broadcast.test.d.ts +2 -0
  84. package/lib-es/bridge/broadcast.test.d.ts.map +1 -0
  85. package/lib-es/bridge/broadcast.test.js +70 -0
  86. package/lib-es/bridge/broadcast.test.js.map +1 -0
  87. package/lib-es/bridge/buildOptimisticOperation.test.d.ts +2 -0
  88. package/lib-es/bridge/buildOptimisticOperation.test.d.ts.map +1 -0
  89. package/lib-es/bridge/buildOptimisticOperation.test.js +74 -0
  90. package/lib-es/bridge/buildOptimisticOperation.test.js.map +1 -0
  91. package/lib-es/bridge/createTransaction.test.d.ts +2 -0
  92. package/lib-es/bridge/createTransaction.test.d.ts.map +1 -0
  93. package/lib-es/bridge/createTransaction.test.js +36 -0
  94. package/lib-es/bridge/createTransaction.test.js.map +1 -0
  95. package/lib-es/bridge/deviceTransactionConfig.test.d.ts +2 -0
  96. package/lib-es/bridge/deviceTransactionConfig.test.d.ts.map +1 -0
  97. package/lib-es/bridge/deviceTransactionConfig.test.js +143 -0
  98. package/lib-es/bridge/deviceTransactionConfig.test.js.map +1 -0
  99. package/lib-es/bridge/estimateMaxSpendable.test.d.ts +2 -0
  100. package/lib-es/bridge/estimateMaxSpendable.test.d.ts.map +1 -0
  101. package/lib-es/bridge/estimateMaxSpendable.test.js +131 -0
  102. package/lib-es/bridge/estimateMaxSpendable.test.js.map +1 -0
  103. package/lib-es/bridge/getTransactionStatus.test.d.ts +2 -0
  104. package/lib-es/bridge/getTransactionStatus.test.d.ts.map +1 -0
  105. package/lib-es/bridge/getTransactionStatus.test.js +212 -0
  106. package/lib-es/bridge/getTransactionStatus.test.js.map +1 -0
  107. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  108. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  109. package/lib-es/bridge/prepareTransaction.test.js +157 -0
  110. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  111. package/lib-es/bridge/transaction.test.d.ts +2 -0
  112. package/lib-es/bridge/transaction.test.d.ts.map +1 -0
  113. package/lib-es/bridge/transaction.test.js +154 -0
  114. package/lib-es/bridge/transaction.test.js.map +1 -0
  115. package/lib-es/common-logic/utils.additional.test.d.ts +2 -0
  116. package/lib-es/common-logic/utils.additional.test.d.ts.map +1 -0
  117. package/lib-es/common-logic/utils.additional.test.js +56 -0
  118. package/lib-es/common-logic/utils.additional.test.js.map +1 -0
  119. package/lib-es/common-logic/utils.unit.test.d.ts +2 -0
  120. package/lib-es/common-logic/utils.unit.test.d.ts.map +1 -0
  121. package/lib-es/common-logic/utils.unit.test.js +50 -0
  122. package/lib-es/common-logic/utils.unit.test.js.map +1 -0
  123. package/lib-es/hw-signMessage.test.d.ts +2 -0
  124. package/lib-es/hw-signMessage.test.d.ts.map +1 -0
  125. package/lib-es/hw-signMessage.test.js +78 -0
  126. package/lib-es/hw-signMessage.test.js.map +1 -0
  127. package/lib-es/signer/getAddress.test.d.ts +2 -0
  128. package/lib-es/signer/getAddress.test.d.ts.map +1 -0
  129. package/lib-es/signer/getAddress.test.js +105 -0
  130. package/lib-es/signer/getAddress.test.js.map +1 -0
  131. package/package.json +8 -8
@@ -0,0 +1,143 @@
1
+ import { log } from "@ledgerhq/logs";
2
+ import getDeviceTransactionConfig from "./deviceTransactionConfig";
3
+ import { createMockAccount, createMockTransaction } from "../test/fixtures";
4
+ import { CASPER_NETWORK } from "../consts";
5
+ import { methodToString } from "../common-logic";
6
+ import BigNumber from "bignumber.js";
7
+ // Mock the log function to prevent console output during tests
8
+ jest.mock("@ledgerhq/logs", () => ({
9
+ log: jest.fn(),
10
+ }));
11
+ /**
12
+ * Tests for the getDeviceTransactionConfig function
13
+ * Validates the correct display fields are generated for Ledger devices
14
+ */
15
+ describe("getDeviceTransactionConfig", () => {
16
+ // Common test objects
17
+ const MOCK_AMOUNT = new BigNumber("1000000000"); // 1 CSPR
18
+ const TRANSFER_ID = "12345678";
19
+ /**
20
+ * Creates a mock transaction status for testing
21
+ * @returns A valid TransactionStatus object
22
+ */
23
+ const createMockStatus = () => ({
24
+ errors: {},
25
+ warnings: {},
26
+ estimatedFees: new BigNumber(0),
27
+ amount: new BigNumber(0),
28
+ totalSpent: new BigNumber(0),
29
+ });
30
+ /**
31
+ * Helper to get config fields
32
+ */
33
+ const getConfigFields = (transaction, account = createMockAccount()) => getDeviceTransactionConfig({
34
+ account,
35
+ parentAccount: null,
36
+ transaction,
37
+ status: createMockStatus(),
38
+ });
39
+ beforeEach(() => {
40
+ jest.clearAllMocks();
41
+ });
42
+ test("should display chain ID, transaction type and amount fields for standard transactions", () => {
43
+ // Create mock transaction
44
+ const mockTransaction = createMockTransaction({
45
+ amount: MOCK_AMOUNT,
46
+ });
47
+ // Get display fields
48
+ const fields = getConfigFields(mockTransaction);
49
+ // Verify the results
50
+ expect(fields).toHaveLength(4);
51
+ // Check Type field
52
+ expect(fields[0]).toEqual({
53
+ type: "text",
54
+ label: "Type",
55
+ value: methodToString(0), // 0 = "transfer"
56
+ });
57
+ // Check Chain ID field
58
+ expect(fields[1]).toEqual({
59
+ type: "text",
60
+ label: "Chain ID",
61
+ value: CASPER_NETWORK,
62
+ });
63
+ // Check Fee field
64
+ expect(fields[2]).toEqual({
65
+ type: "casper.extendedAmount",
66
+ label: "Fee",
67
+ value: new BigNumber(100000000),
68
+ });
69
+ // Check Amount field
70
+ expect(fields[3]).toEqual({
71
+ type: "casper.extendedAmount",
72
+ label: "Amount",
73
+ value: MOCK_AMOUNT,
74
+ });
75
+ // Verify logging
76
+ expect(log).toHaveBeenCalledWith("debug", expect.stringContaining("Transaction config"));
77
+ });
78
+ test("should include transferId field when provided in transaction", () => {
79
+ // Create mock transaction with transferId
80
+ const mockTransaction = createMockTransaction({
81
+ amount: MOCK_AMOUNT,
82
+ transferId: TRANSFER_ID,
83
+ });
84
+ // Get display fields
85
+ const fields = getConfigFields(mockTransaction);
86
+ // Verify the results
87
+ expect(fields).toHaveLength(5); // Chain ID, Type, Amount, Transfer ID fields
88
+ // Check all fields are present
89
+ const fieldLabels = fields.map(field => field.label);
90
+ expect(fieldLabels).toEqual(["Type", "Chain ID", "Fee", "Amount", "Transfer ID"]);
91
+ // Check Transfer ID field specifically
92
+ expect(fields[4]).toEqual({
93
+ type: "text",
94
+ label: "Transfer ID",
95
+ value: TRANSFER_ID,
96
+ });
97
+ });
98
+ test("should not include transferId field when undefined in transaction", () => {
99
+ // Create mock transaction with explicitly undefined transferId
100
+ const mockTransaction = createMockTransaction({
101
+ amount: MOCK_AMOUNT,
102
+ transferId: undefined,
103
+ });
104
+ // Get display fields
105
+ const fields = getConfigFields(mockTransaction);
106
+ // Verify no transferId field is present
107
+ expect(fields).toHaveLength(4);
108
+ expect(fields.map(field => field.label)).not.toContain("Transfer ID");
109
+ });
110
+ test("should handle zero amount transactions correctly", () => {
111
+ // Create mock transaction with zero amount
112
+ const mockTransaction = createMockTransaction({
113
+ amount: new BigNumber(0),
114
+ });
115
+ // Get display fields
116
+ const fields = getConfigFields(mockTransaction);
117
+ // Verify amount field has zero value
118
+ const amountField = fields.find(field => field.label === "Amount");
119
+ expect(amountField).toBeDefined();
120
+ expect(amountField).toEqual({
121
+ type: "casper.extendedAmount",
122
+ label: "Amount",
123
+ value: new BigNumber(0),
124
+ });
125
+ });
126
+ test("should maintain consistent order of fields regardless of transaction properties", () => {
127
+ // Create two transactions - one with transferId, one without
128
+ const txWithTransferId = createMockTransaction({
129
+ amount: MOCK_AMOUNT,
130
+ transferId: TRANSFER_ID,
131
+ });
132
+ const txWithoutTransferId = createMockTransaction({
133
+ amount: MOCK_AMOUNT,
134
+ });
135
+ const fieldsWithId = getConfigFields(txWithTransferId);
136
+ const fieldsWithoutId = getConfigFields(txWithoutTransferId);
137
+ // Verify field order consistency for common fields
138
+ for (let i = 0; i < fieldsWithoutId.length; i++) {
139
+ expect(fieldsWithId[i].label).toEqual(fieldsWithoutId[i].label);
140
+ }
141
+ });
142
+ });
143
+ //# sourceMappingURL=deviceTransactionConfig.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceTransactionConfig.test.js","sourceRoot":"","sources":["../../src/bridge/deviceTransactionConfig.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=estimateMaxSpendable.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateMaxSpendable.test.d.ts","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { estimateMaxSpendable } from "./estimateMaxSpendable";
3
+ import { getEstimatedFees } from "./bridgeHelpers/fee";
4
+ import { createMockAccount } from "../test/fixtures";
5
+ // Mock the fee helper
6
+ jest.mock("./bridgeHelpers/fee", () => ({
7
+ getEstimatedFees: jest.fn().mockReturnValue(new BigNumber(1000000)),
8
+ }));
9
+ describe("estimateMaxSpendable", () => {
10
+ const mockAccount = {
11
+ id: "casper:0:testAccount",
12
+ type: "Account",
13
+ spendableBalance: new BigNumber(10000000),
14
+ };
15
+ afterEach(() => {
16
+ jest.clearAllMocks();
17
+ });
18
+ test("should return zero when balance is zero", async () => {
19
+ const zeroBalanceAccount = {
20
+ ...mockAccount,
21
+ spendableBalance: new BigNumber(0),
22
+ };
23
+ const result = await estimateMaxSpendable({
24
+ account: zeroBalanceAccount,
25
+ parentAccount: undefined,
26
+ });
27
+ expect(result.toNumber()).toBe(0);
28
+ expect(getEstimatedFees).not.toHaveBeenCalled();
29
+ });
30
+ test("should return balance minus fees when no transaction is provided", async () => {
31
+ const result = await estimateMaxSpendable({
32
+ account: mockAccount,
33
+ parentAccount: undefined,
34
+ });
35
+ const expectedFees = new BigNumber(1000000);
36
+ const expectedMaxSpendable = mockAccount.spendableBalance.minus(expectedFees);
37
+ expect(result.toString()).toBe(expectedMaxSpendable.toString());
38
+ expect(getEstimatedFees).toHaveBeenCalled();
39
+ });
40
+ test("should use transaction fees when transaction is provided", async () => {
41
+ const transactionFees = new BigNumber(500000);
42
+ const mockTransaction = {
43
+ fees: transactionFees,
44
+ };
45
+ const result = await estimateMaxSpendable({
46
+ account: mockAccount,
47
+ parentAccount: undefined,
48
+ transaction: mockTransaction,
49
+ });
50
+ const expectedMaxSpendable = mockAccount.spendableBalance.minus(transactionFees);
51
+ expect(result.toString()).toBe(expectedMaxSpendable.toString());
52
+ expect(getEstimatedFees).not.toHaveBeenCalled();
53
+ });
54
+ test("should return zero when balance is less than fees", async () => {
55
+ const lowBalanceAccount = {
56
+ ...mockAccount,
57
+ spendableBalance: new BigNumber(500000), // Less than default fee of 1000000
58
+ };
59
+ const result = await estimateMaxSpendable({
60
+ account: lowBalanceAccount,
61
+ parentAccount: undefined,
62
+ });
63
+ expect(result.toString()).toBe("0");
64
+ });
65
+ test("should use main account when parentAccount is provided", async () => {
66
+ const parentAccount = {
67
+ id: "casper:parent",
68
+ spendableBalance: new BigNumber(0),
69
+ };
70
+ const result = await estimateMaxSpendable({
71
+ account: mockAccount,
72
+ parentAccount: parentAccount,
73
+ });
74
+ const expectedFees = new BigNumber(1000000);
75
+ const expectedMaxSpendable = mockAccount.spendableBalance.minus(expectedFees);
76
+ expect(result.toString()).toBe(expectedMaxSpendable.toString());
77
+ });
78
+ });
79
+ // Add test cases from fixtures
80
+ describe("estimateMaxSpendable with standard test cases", () => {
81
+ const standardFees = new BigNumber("1000000");
82
+ beforeEach(() => {
83
+ getEstimatedFees.mockReturnValue(standardFees);
84
+ });
85
+ test.each([
86
+ {
87
+ name: "Standard account",
88
+ account: createMockAccount(),
89
+ expectedResult: new BigNumber("10000000000").minus(standardFees),
90
+ },
91
+ {
92
+ name: "Empty account",
93
+ account: createMockAccount({
94
+ balance: new BigNumber("0"),
95
+ spendableBalance: new BigNumber("0"),
96
+ }),
97
+ expectedResult: new BigNumber("0"),
98
+ },
99
+ {
100
+ name: "Account with balance less than fees",
101
+ account: createMockAccount({
102
+ balance: standardFees.div(2),
103
+ spendableBalance: standardFees.div(2),
104
+ }),
105
+ expectedResult: new BigNumber("0"),
106
+ },
107
+ {
108
+ name: "Account with balance equal to fees",
109
+ account: createMockAccount({
110
+ balance: standardFees,
111
+ spendableBalance: standardFees,
112
+ }),
113
+ expectedResult: new BigNumber("0"),
114
+ },
115
+ {
116
+ name: "Account with high balance",
117
+ account: createMockAccount({
118
+ balance: new BigNumber("100000000000000"),
119
+ spendableBalance: new BigNumber("100000000000000"),
120
+ }),
121
+ expectedResult: new BigNumber("100000000000000").minus(standardFees),
122
+ },
123
+ ])("should handle $name", async ({ account, expectedResult }) => {
124
+ const result = await estimateMaxSpendable({
125
+ account: account,
126
+ parentAccount: undefined,
127
+ });
128
+ expect(result.toString()).toBe(expectedResult.toString());
129
+ });
130
+ });
131
+ //# sourceMappingURL=estimateMaxSpendable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimateMaxSpendable.test.js","sourceRoot":"","sources":["../../src/bridge/estimateMaxSpendable.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getTransactionStatus.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransactionStatus.test.d.ts","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,212 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { getTransactionStatus } from "./getTransactionStatus";
3
+ import { CASPER_MINIMUM_VALID_AMOUNT_MOTES, MayBlockAccountError, InvalidMinimumAmountError, } from "../consts";
4
+ import { AmountRequired, InvalidAddress, InvalidAddressBecauseDestinationIsAlsoSource, NotEnoughBalance, RecipientRequired, } from "@ledgerhq/errors";
5
+ import { CasperInvalidTransferId } from "../errors";
6
+ import { createMockAccount, createMockTransaction, TEST_ADDRESSES } from "../test/fixtures";
7
+ describe("getTransactionStatus", () => {
8
+ // Create fixtures
9
+ const mockAccount = createMockAccount();
10
+ const validTransaction = createMockTransaction();
11
+ beforeEach(() => {
12
+ jest.clearAllMocks();
13
+ });
14
+ test("should validate a valid transaction", async () => {
15
+ const status = await getTransactionStatus(mockAccount, validTransaction);
16
+ expect(status.errors).toEqual({});
17
+ expect(status.warnings).toEqual({});
18
+ expect(status.estimatedFees).toEqual(validTransaction.fees);
19
+ expect(status.amount).toEqual(validTransaction.amount);
20
+ expect(status.totalSpent).toEqual(validTransaction.amount.plus(validTransaction.fees));
21
+ });
22
+ test("should return error when recipient is missing", async () => {
23
+ const txWithoutRecipient = {
24
+ ...validTransaction,
25
+ recipient: "",
26
+ };
27
+ const status = await getTransactionStatus(mockAccount, txWithoutRecipient);
28
+ expect(status.errors.recipient).toBeInstanceOf(RecipientRequired);
29
+ });
30
+ test("should return error when recipient is invalid", async () => {
31
+ const txWithInvalidRecipient = {
32
+ ...validTransaction,
33
+ recipient: TEST_ADDRESSES.INVALID,
34
+ };
35
+ const status = await getTransactionStatus(mockAccount, txWithInvalidRecipient);
36
+ expect(status.errors.recipient).toBeInstanceOf(InvalidAddress);
37
+ });
38
+ test("should return error when recipient is same as sender", async () => {
39
+ const txToSelf = {
40
+ ...validTransaction,
41
+ recipient: mockAccount.freshAddress,
42
+ };
43
+ const status = await getTransactionStatus(mockAccount, txToSelf);
44
+ expect(status.errors.recipient).toBeInstanceOf(InvalidAddressBecauseDestinationIsAlsoSource);
45
+ });
46
+ test("should return error when transfer ID is invalid", async () => {
47
+ const txWithInvalidTransferId = {
48
+ ...validTransaction,
49
+ transferId: "invalid-id",
50
+ };
51
+ const status = await getTransactionStatus(mockAccount, txWithInvalidTransferId);
52
+ expect(status.errors.sender).toBeInstanceOf(CasperInvalidTransferId);
53
+ });
54
+ test("should handle useAllAmount correctly", async () => {
55
+ const useAllAmountTx = {
56
+ ...validTransaction,
57
+ useAllAmount: true,
58
+ };
59
+ const status = await getTransactionStatus(mockAccount, useAllAmountTx);
60
+ expect(status.amount).toEqual(mockAccount.spendableBalance.minus(useAllAmountTx.fees));
61
+ expect(status.totalSpent).toEqual(mockAccount.spendableBalance);
62
+ expect(status.errors).toEqual({});
63
+ });
64
+ test("should return error when useAllAmount but not enough balance for fees", async () => {
65
+ const lowBalanceAccount = createMockAccount({
66
+ spendableBalance: new BigNumber(500000), // Less than the fee
67
+ });
68
+ const useAllAmountTx = {
69
+ ...validTransaction,
70
+ useAllAmount: true,
71
+ fees: new BigNumber(1000000),
72
+ };
73
+ const status = await getTransactionStatus(lowBalanceAccount, useAllAmountTx);
74
+ expect(status.errors.amount).toBeInstanceOf(NotEnoughBalance);
75
+ });
76
+ test("should return error when amount is zero", async () => {
77
+ const zeroAmountTx = {
78
+ ...validTransaction,
79
+ amount: new BigNumber(0),
80
+ };
81
+ const status = await getTransactionStatus(mockAccount, zeroAmountTx);
82
+ expect(status.errors.amount).toBeInstanceOf(AmountRequired);
83
+ });
84
+ test("should return error when amount is below minimum", async () => {
85
+ const lowAmountTx = {
86
+ ...validTransaction,
87
+ amount: new BigNumber(CASPER_MINIMUM_VALID_AMOUNT_MOTES).minus(1),
88
+ };
89
+ const status = await getTransactionStatus(mockAccount, lowAmountTx);
90
+ expect(status.errors.amount).toBe(InvalidMinimumAmountError);
91
+ });
92
+ test("should return error when not enough balance for transaction", async () => {
93
+ const lowBalanceAccount = createMockAccount({
94
+ spendableBalance: new BigNumber(5000000),
95
+ });
96
+ const expensiveTx = {
97
+ ...validTransaction,
98
+ amount: new BigNumber(5000000),
99
+ fees: new BigNumber(1000000),
100
+ };
101
+ const status = await getTransactionStatus(lowBalanceAccount, expensiveTx);
102
+ expect(status.errors.amount).toBeInstanceOf(NotEnoughBalance);
103
+ });
104
+ test("should return warning when spending more than 90% of balance", async () => {
105
+ const expensiveTx = {
106
+ ...validTransaction,
107
+ amount: mockAccount.spendableBalance.multipliedBy(0.95), // 95% of balance
108
+ };
109
+ const status = await getTransactionStatus(mockAccount, expensiveTx);
110
+ expect(status.warnings.amount).toBe(MayBlockAccountError);
111
+ });
112
+ // Test using the predefined test cases
113
+ describe("transaction status test cases", () => {
114
+ const testCases = [
115
+ {
116
+ name: "Valid transaction",
117
+ account: createMockAccount(),
118
+ transaction: createMockTransaction(),
119
+ expectedStatus: { errors: {}, warnings: {}, estimatedFees: createMockTransaction().fees },
120
+ },
121
+ {
122
+ name: "Invalid recipient",
123
+ account: createMockAccount(),
124
+ transaction: createMockTransaction({ recipient: TEST_ADDRESSES.INVALID }),
125
+ expectedStatus: {
126
+ errors: { recipient: new InvalidAddress() },
127
+ warnings: {},
128
+ estimatedFees: createMockTransaction().fees,
129
+ },
130
+ },
131
+ {
132
+ name: "Zero amount",
133
+ account: createMockAccount(),
134
+ transaction: createMockTransaction({ amount: new BigNumber("0") }),
135
+ expectedStatus: {
136
+ errors: { amount: new AmountRequired() },
137
+ warnings: {},
138
+ },
139
+ },
140
+ {
141
+ name: "High amount (warning)",
142
+ account: createMockAccount(),
143
+ transaction: createMockTransaction({
144
+ amount: new BigNumber(createMockAccount().balance.minus(createMockTransaction().fees).toString()),
145
+ }),
146
+ expectedStatus: {
147
+ errors: {},
148
+ warnings: { amount: MayBlockAccountError },
149
+ },
150
+ },
151
+ {
152
+ name: "Insufficient funds",
153
+ account: createMockAccount({
154
+ balance: new BigNumber("2000000"), // 0.002 CSPR
155
+ spendableBalance: new BigNumber("2000000"),
156
+ }),
157
+ transaction: createMockTransaction({
158
+ amount: new BigNumber("2000000"),
159
+ }),
160
+ expectedStatus: {
161
+ errors: { amount: new NotEnoughBalance() },
162
+ warnings: { amount: MayBlockAccountError },
163
+ },
164
+ },
165
+ {
166
+ name: "Empty account",
167
+ account: createMockAccount({
168
+ balance: new BigNumber("0"),
169
+ spendableBalance: new BigNumber("0"),
170
+ }),
171
+ transaction: createMockTransaction(),
172
+ expectedStatus: {
173
+ errors: { amount: new NotEnoughBalance() },
174
+ warnings: { amount: MayBlockAccountError },
175
+ },
176
+ },
177
+ ];
178
+ testCases.forEach(testCase => {
179
+ test(`should handle ${testCase.name}`, async () => {
180
+ const status = await getTransactionStatus(testCase.account, testCase.transaction);
181
+ // Check if errors match expected errors
182
+ if (Object.keys(testCase.expectedStatus.errors).length) {
183
+ // Simplified error checking
184
+ expect(Object.keys(status.errors).length).toBeGreaterThan(0);
185
+ // Check only specific known error keys
186
+ if ("recipient" in testCase.expectedStatus.errors) {
187
+ expect(status.errors.recipient).toBeTruthy();
188
+ }
189
+ if ("amount" in testCase.expectedStatus.errors) {
190
+ expect(status.errors.amount).toBeTruthy();
191
+ }
192
+ }
193
+ else {
194
+ expect(Object.keys(status.errors).length).toBe(0);
195
+ }
196
+ // Check if warnings match expected warnings
197
+ if (Object.keys(testCase.expectedStatus.warnings).length) {
198
+ // Simplified warning checking
199
+ expect(Object.keys(status.warnings).length).toBeGreaterThan(0);
200
+ // Check only specific known warning keys
201
+ if ("amount" in testCase.expectedStatus.warnings) {
202
+ expect(status.warnings.amount).toBeTruthy();
203
+ }
204
+ }
205
+ else {
206
+ expect(Object.keys(status.warnings).length).toBe(0);
207
+ }
208
+ });
209
+ });
210
+ });
211
+ });
212
+ //# sourceMappingURL=getTransactionStatus.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTransactionStatus.test.js","sourceRoot":"","sources":["../../src/bridge/getTransactionStatus.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prepareTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareTransaction.test.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":""}