Skip to content

Commit

Permalink
Adding initial version of e2e test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
erdimaden committed Jun 3, 2024
1 parent deffaa1 commit d5a9f0b
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 2 deletions.
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
Expand Down Expand Up @@ -69,7 +71,6 @@
"text"
],
"verbose": true,
"testRegex": ".test.ts$",
"maxWorkers": 1
}
}
101 changes: 101 additions & 0 deletions src/coinbase/tests/e2e.ts
Original file line number Diff line number Diff line change
@@ -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: "",
},
});
});
});
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit d5a9f0b

Please sign in to comment.