Skip to content

Commit

Permalink
First round of provider tests (#511)
Browse files Browse the repository at this point in the history
* First round of provider tests

* fix lint

* pr feedback
  • Loading branch information
cb-jake committed May 10, 2022
1 parent 9614ef4 commit 87dda1e
Show file tree
Hide file tree
Showing 9 changed files with 491 additions and 54 deletions.
12 changes: 6 additions & 6 deletions __tests__/addressStorage.test.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
const { ensureAddressString } = require("../build/npm/dist/util");
const { CoinbaseWalletSDK } = require("../build/npm/dist");

describe("address storage tests", function () {
it("ensureAddressString returns lowercase string", function () {
let input = "0xFadAFCE89EA2221fa33005640Acf2C923312F2b9";
let output = ensureAddressString(input);
describe("address storage tests", () => {
it("ensureAddressString returns lowercase string", () => {
const input = "0xFadAFCE89EA2221fa33005640Acf2C923312F2b9";
const output = ensureAddressString(input);
expect(output).toEqual("0xfadafce89ea2221fa33005640acf2c923312f2b9");
});

Expand All @@ -20,7 +20,7 @@ describe("address storage tests", function () {
);

provider._addresses = ["0xfadafce89ea2221fa33005640acf2c923312f2b9"];
provider.enable().then(addresses => {
void provider.enable().then(addresses => {
addresses[0] = "0xFadAFCE89EA2221fa33005640Acf2C923312F2b9";
expect(provider._addresses[0]).toEqual(
"0xfadafce89ea2221fa33005640acf2c923312f2b9",
Expand All @@ -41,7 +41,7 @@ describe("address storage tests", function () {
);

provider._addresses = ["0xfadafce89ea2221fa33005640acf2c923312f2b9"];
provider.request({ method: "eth_accounts" }).then(addresses => {
void provider.request({ method: "eth_accounts" }).then(addresses => {
addresses[0] = "0xFadAFCE89EA2221fa33005640Acf2C923312F2b9";
expect(provider._addresses[0]).toEqual(
"0xfadafce89ea2221fa33005640acf2c923312f2b9",
Expand Down
10 changes: 5 additions & 5 deletions __tests__/encryptDecrypt.test.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const { encrypt, decrypt } = require("../build/npm/dist/relay/aes256gcm");
const { randomBytesHex } = require("../build/npm/dist/util");

describe("encryption and decryption tests", function () {
describe("encryption and decryption tests", () => {
it("decrypted output matches original input", done => {
(async function () {
void (async function () {
const secret = randomBytesHex(32);
let input = "coinbasewallet:2.0";
let cipherText = await encrypt(input, secret);
const input = "coinbasewallet:2.0";
const cipherText = await encrypt(input, secret);

decrypt(cipherText, secret).subscribe({
next: decryptedText => {
Expand All @@ -18,7 +18,7 @@ describe("encryption and decryption tests", function () {
});

it("decrypt data sample from client", done => {
(async function () {
(function () {
const cipherText =
"06593325a922a928913b5c6ea26f848c4545bcea4e26c4f5ee745316ff22b2780aeccc565730514b2820a94b03f5f89fe7542a35bbdd87a1d52a4352f49482781113db09266c668696778e0a94bc9f866f1e92e7262fd0bb811838284cc64cbc4552b33e9c6fb2582cea4f49471d6d46a16a5c8ac83ee8483ed4dc01f1fde3bfd7a2f173715e0a8d09dd4907483f096a845bff698831ea277c1ca4223d3f6073174cb35119d0a795c1a9cb4f32ee1dcc254d8931";
const secret =
Expand Down
8 changes: 6 additions & 2 deletions src/CoinbaseWalletSDK.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,14 @@ describe("CoinbaseWalletSDK", () => {
);
});

test("@disconnect", () => {
test("@disconnect", async () => {
jest
.spyOn(mockExtensionProvider, "close")
// @ts-expect-error expect string instead of void
.mockImplementation(() => "mockClose");
// Calls extension close
coinbaseWalletSDK2.disconnect();
expect(mockExtensionProvider.close()).toEqual("mockClose");
expect(await mockExtensionProvider.close()).toBe("mockClose");
});

test("@setAppInfo", async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/CoinbaseWalletSDK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ export class CoinbaseWalletSDK {
public disconnect(): void {
const extension = this.walletExtension;
if (extension) {
extension.close();
void extension.close();
} else {
this._relay?.resetAndReload();
}
Expand Down
10 changes: 4 additions & 6 deletions src/__mocks__/provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@ export class MockProviderClass extends CoinbaseWalletProvider {
super(opts);
}

public close() {
return "mockClose";
public async close() {
return Promise.resolve();
}

// @ts-expect-error mock relay
private async initializeRelay() {
const relay = {
return Promise.resolve({
setAppInfo: mockSetAppInfo,
};
await Promise.resolve();
return relay;
});
}
}

Expand Down
110 changes: 110 additions & 0 deletions src/__mocks__/relay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import { ScopedLocalStorage } from "../lib/ScopedLocalStorage";
import { Session } from "../relay/Session";
import {
CancelablePromise,
WalletSDKRelayAbstract,
} from "../relay/WalletSDKRelayAbstract";
import { Web3Method } from "../relay/Web3Method";
import {
AddEthereumChainResponse,
EthereumAddressFromSignedMessageResponse,
GenericResponse,
RequestEthereumAccountsResponse,
ScanQRCodeResponse,
SignEthereumMessageResponse,
SignEthereumTransactionResponse,
SubmitEthereumTransactionResponse,
SwitchEthereumChainResponse,
WatchAssetResponse,
Web3Response,
} from "../relay/Web3Response";
import { AddressString } from "../types";

function makeMockReturn<T>(returnValue?: T) {
return { cancel: () => {}, promise: Promise.resolve(returnValue as T) };
}

export const MOCK_ADDERESS = "0xFadAFCE89EA2221fa33005640Acf2C923312F2b9";

export class MockRelayClass extends WalletSDKRelayAbstract {
constructor() {
super();
this.requestEthereumAccounts = this.requestEthereumAccounts.bind(this);
}

resetAndReload(): void {}

requestEthereumAccounts(): CancelablePromise<RequestEthereumAccountsResponse> {
return makeMockReturn<RequestEthereumAccountsResponse>({
method: Web3Method.requestEthereumAccounts,
result: [AddressString(MOCK_ADDERESS)],
});
}

addEthereumChain(): CancelablePromise<AddEthereumChainResponse> {
return makeMockReturn<AddEthereumChainResponse>();
}

watchAsset(): CancelablePromise<WatchAssetResponse> {
return makeMockReturn<WatchAssetResponse>();
}

switchEthereumChain(): CancelablePromise<SwitchEthereumChainResponse> {
return makeMockReturn<SwitchEthereumChainResponse>();
}

signEthereumMessage(): CancelablePromise<SignEthereumMessageResponse> {
return makeMockReturn<SignEthereumMessageResponse>();
}

ethereumAddressFromSignedMessage(): CancelablePromise<EthereumAddressFromSignedMessageResponse> {
return makeMockReturn<EthereumAddressFromSignedMessageResponse>();
}

signEthereumTransaction(): CancelablePromise<SignEthereumTransactionResponse> {
return makeMockReturn<SignEthereumTransactionResponse>();
}

signAndSubmitEthereumTransaction(): CancelablePromise<SubmitEthereumTransactionResponse> {
return makeMockReturn<SubmitEthereumTransactionResponse>();
}

submitEthereumTransaction(): CancelablePromise<SubmitEthereumTransactionResponse> {
return makeMockReturn<SubmitEthereumTransactionResponse>();
}

scanQRCode(): CancelablePromise<ScanQRCodeResponse> {
return makeMockReturn<ScanQRCodeResponse>();
}

genericRequest(): CancelablePromise<GenericResponse> {
return makeMockReturn<GenericResponse>({
method: Web3Method.generic,
result: "Success",
});
}

sendRequest<_, U extends Web3Response>(): CancelablePromise<U> {
return makeMockReturn<U>();
}

setAppInfo() {
return;
}

inlineAddEthereumChain() {
return false;
}

setAccountsCallback(): void {
return;
}

setChainCallback(): void {
return;
}

get session() {
return new Session(new ScopedLocalStorage("session-test"));
}
}
Loading

0 comments on commit 87dda1e

Please sign in to comment.