From d5a9f0bd20b1de0e7e3f6e3f985c5a754072e03d Mon Sep 17 00:00:00 2001 From: Erdi Maden Date: Mon, 3 Jun 2024 13:35:39 -0500 Subject: [PATCH] Adding initial version of e2e test cases --- package.json | 5 +- src/coinbase/tests/e2e.ts | 101 ++++++++++++++++++++++++++++++++++++++ yarn.lock | 5 ++ 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/coinbase/tests/e2e.ts diff --git a/package.json b/package.json index c818a4bb..f24ba2f9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "format": "prettier -c .prettierrc --write \"**/*.{ts,js,cjs,json,md}\"", "format-check": "prettier -c .prettierrc --check \"**/*.{ts,js,cjs,json,md}\"", "check": "tsc --noEmit", - "test": "npx jest --no-cache", + "test": "npx jest --no-cache --testMatch=**/*_test.ts", + "test:e2e": "npx jest --no-cache --testMatch=**/e2e.ts", "clean": "rm -rf dist/*", "build": "tsc", "prepack": "tsc", @@ -28,6 +29,7 @@ "bip32": "^4.0.0", "bip39": "^3.1.0", "decimal.js": "^10.4.3", + "dotenv": "^16.4.5", "ethers": "^6.12.1", "node-jose": "^2.2.0", "secp256k1": "^5.0.0" @@ -69,7 +71,6 @@ "text" ], "verbose": true, - "testRegex": ".test.ts$", "maxWorkers": 1 } } diff --git a/src/coinbase/tests/e2e.ts b/src/coinbase/tests/e2e.ts new file mode 100644 index 00000000..8596cdde --- /dev/null +++ b/src/coinbase/tests/e2e.ts @@ -0,0 +1,101 @@ +import fs from "fs"; +import dotenv from "dotenv"; +import { Coinbase } from "../coinbase"; +import { TransferStatus } from "../types"; + +describe("Coinbase SDK E2E Test", () => { + let coinbase: Coinbase; + beforeAll(() => { + dotenv.config(); + }); + beforeEach(() => { + coinbase = new Coinbase({ + apiKeyName: process.env.name, + privateKey: process.env.privateKey, + }); + }); + it("should be able to access environment variables", () => { + expect(process.env.name).toBeDefined(); + expect(process.env.privateKey).toBeDefined(); + }); + it("should be able to interact with the Coinbase SDK", async () => { + console.log("Fetching default user..."); + const user = await coinbase.getDefaultUser(); + expect(user.getId()).toBeDefined(); + console.log(`Fetched default user with ID: ${user.getId()}`); + + console.log("Creating new wallet..."); + const wallet = await user.createWallet(); + expect(wallet?.getId()).toBeDefined(); + console.log( + `Created new wallet with ID: ${wallet.getId()}, default address: ${wallet.getDefaultAddress()}`, + ); + + console.log("Importing wallet with balance..."); + const seedFile = JSON.parse(process.env.seed || ""); + const walletId = Object.keys(seedFile)[0]; + const seed = seedFile[walletId].seed; + + const userWallet = await user.importWallet({ seed, walletId }); + expect(userWallet).toBeDefined(); + expect(userWallet.getId()).toBe(walletId); + console.log( + `Imported wallet with ID: ${userWallet.getId()}, default address: ${userWallet.getDefaultAddress()}`, + ); + + console.log("Listing wallet addresses..."); + const addresses = userWallet.listAddresses(); + expect(addresses.length).toBeGreaterThan(0); + // puts "Listed addresses: #{addresses.map(&:to_s).join(', ')}" + console.log(`Listed addresses: ${userWallet.listAddresses().join(", ")}`); + + console.log("Fetching wallet balances..."); + const balances = await userWallet.listBalances(); + expect(Array.from([...balances.keys()]).length).toBeGreaterThan(0); + console.log(`Fetched balances: ${balances.toString()}`); + + // console.log("Transfering 1 Gwei from default address to second address..."); + // const [a1, a2] = addresses; + // const transfer = await a1.createTransfer(1, Coinbase.assets.Gwei, a2); + // expect(transfer.getStatus()).toBe(TransferStatus.COMPLETE); + // // puts "Transferred 1 Gwei from #{a1} to #{a2}" + // console.log(`Transferred 1 Gwei from ${a1} to ${a2}`); + + // console.log("Fetching updated balances..."); + // const firstBalance = await a1.listBalances(); + // const secondBalance = await a2.listBalances(); + // expect(firstBalance.get(Coinbase.assets.Eth)).toBeGreaterThan(0); + // expect(secondBalance.get(Coinbase.assets.Eth)).toBeGreaterThan(0); + // console.log(`First address balances: ${firstBalance}`); + // console.log(`Second address balances: ${secondBalance}`); + + console.log("Exporting wallet..."); + const exportedWallet = await wallet.export(); + expect(exportedWallet.walletId).toBeDefined(); + expect(exportedWallet.seed).toBeDefined(); + + console.log("Saving seed to file..."); + await wallet.saveSeed("test_seed.json"); + expect(fs.existsSync("test_seed.json")).toBe(true); + console.log("Saved seed to test_seed.json"); + + const unhydratedWallet = await user.getWallet(wallet.getId()!); + expect(unhydratedWallet.canSign()).toBe(false); + await unhydratedWallet.loadSeed("test_seed.json"); + expect(unhydratedWallet.canSign()).toBe(true); + expect(unhydratedWallet.getId()).toBe(wallet.getId()); + + const savedSeed = JSON.parse(fs.readFileSync("test_seed.json", "utf-8")); + fs.unlinkSync("test_seed.json"); + + expect(exportedWallet.seed.length).toBe(64); + expect(savedSeed).toEqual({ + [wallet.getId()!]: { + seed: exportedWallet.seed, + encrypted: false, + authTag: "", + iv: "", + }, + }); + }); +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 000b7cfa..395a7e5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1466,6 +1466,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dotenv@^16.4.5: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + electron-to-chromium@^1.4.668: version "1.4.773" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.773.tgz#49741af9bb4e712ad899e35d8344d8d59cdb7e12"