UNPKG

@ledgerhq/coin-mina

Version:
181 lines 8.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _1 = require("."); const bignumber_js_1 = require("bignumber.js"); const consts_1 = require("../consts"); // Mock functions to create test objects function createMockAccount(overrides = {}) { return { spendableBalance: new bignumber_js_1.BigNumber(1000), pendingOperations: [], ...overrides, }; } function createMockTransaction(overrides = {}) { return { family: "mina", amount: new bignumber_js_1.BigNumber(0), recipient: "B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", ...overrides, }; } describe("getAccountNumFromPath", () => { it("should return undefined for invalid account number", () => { const account = (0, _1.getAccountNumFromPath)("44'/616'/4'/0/0"); expect(account).toBe(undefined); }); it("should return undefined for unsupported path", () => { const account = (0, _1.getAccountNumFromPath)("44'/616'/4/0/0"); expect(account).toBe(undefined); }); it("should return the account number", () => { const account = (0, _1.getAccountNumFromPath)("44'/12586'/4'/0/0"); expect(account).toBe(4); }); }); describe("testingAddress", () => { const validAddresses = [ "B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", "B62qr5cXFjdnZXYxP5dEwRY7wENxcod4Q2oLxUDiq1QrBXZZyxMH8q4", "B62qqmRToRiXZjyLLMJoGnQFXXZuZWdqaNYr43xEDDQzkXMHLouCMZp", "B62qnixP59E4vJytpDWZ5YQPrnmqb7YNwhVWiuSAkxbYdX5RauHWwcm", "B62qmfBiJx88gM9opov4MDxmDVKMutQsBQ1aGt7TrQYyGQx66fRFxvC", "B62qosg21UpwpfPFaxTyirdfUVDHe2Ynsyv1QydE4z34zbLuBZ92ALM", "B62qkWUvsVEnXmd4poHbkKujHNnjxkDcZtrLxN1FTa8pp3GkfHMB1gv", "B62qoiK7DJurVUUJx1dmJGULdNUmX5bjdiYvoWXEXGugS2Cx3YDsHhy", "B62qn1KptFUxxu8aRS52NGQ3GWzn5h8v7U9k571r4LCs5obpoZyd81e", "B62qis2tX1rveddCeJeBAZJnXcCwWPp1x9ScZ3iMCxbV29gRbxWo7qi", "B62qpBKEDTnS4efjBmou7iztx5x152JEmc29XMR1Y3FVCpnmfKGX4R4", "B62qro5bGnk7eCNMA1S5QWmzn5sCcRWckbw83GGaqN3HM2QzP9zYS83", "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw", "B62qrmYwToypQv8v9cjxJdyhAxKihrqtTtEkYC4Y3u412KCPLGSD93V", "B62qj3rpYkGM1T3VN6JDAJs9NccHCRQDYMcQ6UCBc81ff5HXTDjU44d", "B62qp2kks3r14P8GWkR2ieT18JobwnmrBFGEoqy3dAReiyM8aDp4be7", "B62qpW1SYPcp7TcHJYL6egnN9qzvNtQL5XGyiM8S6UsHvxCYzhhFPjz", "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw", "B62qj5L8U8A8gexpHLWHxBdfjKuWb8HMguVPecQ5FGqgZAwBAKHvhEy", "B62qnt5WShcbVVnVqQqWjkyMJdxMwLq4QbRbgMjoi5nmvQw7dZLRtpx", "B62qrGUxqRWn9A8PEJschgLZuS5S1GJiairh65mgTapaK58nkTKHUs8", "B62qkS7hmMkzmNDjeCUKyAMZSw1c98MxszZPA7WnvBuh7Pq66ztiwdt", "B62qjGWerE9MPNk7E2jEJe9Ex5GxkNR9JCc5mhFeJdGFaNDHnMdGQJQ", "B62qpp2DLkLxwFn1QZdkEWgiRFMYnkgh6cj5AJC5pqCYiALh8BmiYJ8", "B62qqALaAoEnaJPSNmQaDkUwFGiKwZo4zRK4Ay5eSMxAMVhNxwr2KeM", "B62qospDjUj43x2yMKiNehojWWRUsE1wpdUDVpfxH8V3n5Y1QgJKFfw", "B62qr3epzHUrxrdminUN4Hzuinuc7aBDAFSR94mPmmxVsbuFpUvDDq6", "B62qrJurUKtcqdhQu1XtJJfSH7rR1xrEtSWPQQcFwBJBwVcsFSyVSM3", ]; const invalidAddresses = [ "", // Empty address null, // Null address undefined, // Undefined address "123", // Too short "B61qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Incorrect prefix "B62q!@#$%^&*()_+{}|:<>?`~", // Invalid characters "B62qj5L8U8A8gexpHLWHxBdfjKuWb8HMguVPecQ5FGqgZAwBAKHvhE", // Too short "B62qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq", // Too long " B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Leading whitespace "B62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc ", // Trailing whitespace "B62qiVhtBtqakq8sNTHdC TXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Internal whitespace "C62qiVhtBtqakq8sNTHdCTXn6tETSK6gtsmNHRn1WdLqjGLpsHbw1xc", // Incorrect prefix ]; it("should return true for valid address", () => { for (const address of validAddresses) { expect((0, _1.isValidAddress)(address)).toBe(true); } }); it("should return false for invalid address", () => { for (const address of invalidAddresses) { expect((0, _1.isValidAddress)(address)).toBe(false); } }); }); describe("isValidMemo", () => { it("should return true for valid memo", () => { expect((0, _1.isValidMemo)("")).toBe(true); expect((0, _1.isValidMemo)("Valid memo")).toBe(true); expect((0, _1.isValidMemo)("A".repeat(consts_1.MAX_MEMO_LENGTH))).toBe(true); }); it("should return false for memo exceeding max length", () => { expect((0, _1.isValidMemo)("A".repeat(consts_1.MAX_MEMO_LENGTH + 1))).toBe(false); }); }); describe("getMaxAmount", () => { it("should calculate correct max amount with no fees", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(1000), pendingOperations: [], }); const transaction = createMockTransaction(); expect((0, _1.getMaxAmount)(account, transaction).toNumber()).toBe(1000); }); it("should calculate correct max amount with fees", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(1000), pendingOperations: [], }); const transaction = createMockTransaction(); const fees = new bignumber_js_1.BigNumber(10); expect((0, _1.getMaxAmount)(account, transaction, fees).toNumber()).toBe(990); }); it("should subtract pending operations from max amount", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(1000), pendingOperations: [ { value: new bignumber_js_1.BigNumber(100) }, { value: new bignumber_js_1.BigNumber(200) }, ], }); const transaction = createMockTransaction(); expect((0, _1.getMaxAmount)(account, transaction).toNumber()).toBe(700); }); it("should return 0 when max amount would be negative", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(100), pendingOperations: [{ value: new bignumber_js_1.BigNumber(200) }], }); const transaction = createMockTransaction(); expect((0, _1.getMaxAmount)(account, transaction).toNumber()).toBe(0); }); }); describe("getTotalSpent", () => { it("should return spendable balance when useAllAmount is true", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(1000), }); const transaction = createMockTransaction({ useAllAmount: true, amount: new bignumber_js_1.BigNumber(500), }); const fees = new bignumber_js_1.BigNumber(10); expect((0, _1.getTotalSpent)(account, transaction, fees).toNumber()).toBe(1000); }); it("should return amount plus fees when useAllAmount is false", () => { const account = createMockAccount({ spendableBalance: new bignumber_js_1.BigNumber(1000), }); const transaction = createMockTransaction({ useAllAmount: false, amount: new bignumber_js_1.BigNumber(500), }); const fees = new bignumber_js_1.BigNumber(10); expect((0, _1.getTotalSpent)(account, transaction, fees).toNumber()).toBe(510); }); }); describe("reEncodeRawSignature", () => { it("should correctly re-encode a valid signature", () => { const rawSignature = "a".repeat(64) + "b".repeat(64); const result = (0, _1.reEncodeRawSignature)(rawSignature); // Check that the result has the correct format (reverse bytes) expect(result.length).toBe(128); // Check field part const fieldPart = result.substring(0, 64); expect(fieldPart).toBe("a".repeat(64).match(/.{2}/g)?.reverse().join("")); // Check scalar part const scalarPart = result.substring(64); expect(scalarPart).toBe("b".repeat(64).match(/.{2}/g)?.reverse().join("")); }); it("should throw an error for invalid signature length", () => { expect(() => (0, _1.reEncodeRawSignature)("too_short")).toThrow("Invalid raw signature input"); }); }); //# sourceMappingURL=index.test.js.map