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