-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathwebsocketProvider.test.ts
More file actions
70 lines (66 loc) · 1.84 KB
/
Copy pathwebsocketProvider.test.ts
File metadata and controls
70 lines (66 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import SturdyWebSocket from "sturdy-websocket";
import { JsonRpcResponse } from "../src/types";
import {
JsonRpcSenders,
makeJsonRpcPayloadFactory,
makeJsonRpcSenders,
} from "../src/util/jsonRpc";
import { promisify } from "../src/util/promises";
import { AlchemyWebSocketProvider } from "../src/web3-adapter/webSocketProvider";
import { Mocked } from "./testUtils";
let ws: Mocked<SturdyWebSocket>;
let sendJsonRpcPayload: jest.Mock;
let jsonRpcSenders: JsonRpcSenders;
let wsProvider: AlchemyWebSocketProvider;
beforeEach(() => {
ws = {
close: jest.fn(),
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
} as any;
sendJsonRpcPayload = jest.fn();
jsonRpcSenders = makeJsonRpcSenders(
sendJsonRpcPayload,
makeJsonRpcPayloadFactory(),
);
wsProvider = new AlchemyWebSocketProvider(
ws as any,
sendJsonRpcPayload,
jsonRpcSenders,
);
});
afterEach(() => {
wsProvider.disconnect();
});
describe("AlchemyWebSocketProvider", () => {
it("sends and receives payloads", async () => {
let resolve: (result: JsonRpcResponse) => void = undefined!;
const promise = new Promise<JsonRpcResponse>((r) => (resolve = r));
sendJsonRpcPayload.mockReturnValue(promise);
const result = promisify((callback) =>
wsProvider.send(
{
jsonrpc: "2.0",
id: 10,
method: "eth_getBlockByNumber",
params: ["latest", false],
},
callback,
),
);
expect(sendJsonRpcPayload).toHaveBeenCalledWith({
jsonrpc: "2.0",
id: 10,
method: "eth_getBlockByNumber",
params: ["latest", false],
});
const { id } = sendJsonRpcPayload.mock.calls[0][0];
const expected: JsonRpcResponse = {
id,
jsonrpc: "2.0",
result: "Some block",
};
resolve(expected);
expect(await result).toEqual(expected);
});
});