wormhole-explorer/blockchain-watcher/test/infrastructure/repositories/RateLimitedSolanaSlotReposi...

56 lines
2.0 KiB
TypeScript

import { expect, describe, it } from "@jest/globals";
import {
Web3SolanaSlotRepository,
RateLimitedSolanaSlotRepository,
} from "../../../src/infrastructure/repositories";
const repoMock = {
getSlot: () => Promise.resolve(100),
getLatestSlot: () => Promise.resolve(100),
getBlock: () => Promise.resolve({ blockTime: 100, transactions: [] }),
getSignaturesForAddress: () => Promise.resolve([]),
getTransactions: () => Promise.resolve([]),
} as any as Web3SolanaSlotRepository;
describe("RateLimitedSolanaSlotRepository", () => {
describe("getLatestSlot", () => {
it("should fail when ratelimit is exceeded", async () => {
const repository = new RateLimitedSolanaSlotRepository(repoMock, { period: 1000, limit: 1 });
await repository.getLatestSlot("confirmed");
await expect(repository.getLatestSlot("confirmed")).rejects.toThrowError();
});
});
describe("getBlock", () => {
it("should fail when ratelimit is exceeded", async () => {
const repository = new RateLimitedSolanaSlotRepository(repoMock, { period: 1000, limit: 1 });
await repository.getBlock(1);
const failure = await repository.getBlock(1);
expect(failure.getError()).toHaveProperty("message", "Ratelimited");
});
});
describe("getSignaturesForAddress", () => {
it("should fail when ratelimit is exceeded", async () => {
const repository = new RateLimitedSolanaSlotRepository(repoMock, { period: 1000, limit: 1 });
await repository.getSignaturesForAddress("address", "before", "after", 1);
await expect(
repository.getSignaturesForAddress("address", "before", "after", 1)
).rejects.toThrowError();
});
});
describe("getTransactions", () => {
it("should fail when ratelimit is exceeded", async () => {
const repository = new RateLimitedSolanaSlotRepository(repoMock, { period: 1000, limit: 1 });
await repository.getTransactions([]);
await expect(repository.getTransactions([])).rejects.toThrowError();
});
});
});