Skip to content

Commit

Permalink
test(middleware): improve type checking by validating MiddlewarePage …
Browse files Browse the repository at this point in the history
…arguments
  • Loading branch information
davidyuk committed Feb 4, 2025
1 parent 0cdd35b commit e96d7b7
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 36 deletions.
8 changes: 4 additions & 4 deletions src/utils/MiddlewarePage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import type Middleware from '../Middleware.js';
import { BaseError } from './errors.js';

export interface MiddlewareRawPage {
data: unknown[];
interface MiddlewareRawPage<T = unknown> {
data: T[];
next: string | null;
prev: string | null;
}
Expand Down Expand Up @@ -40,8 +40,8 @@ export class MiddlewarePage<Item> {

readonly #middleware: Middleware;

constructor(rawPage: MiddlewareRawPage, middleware: Middleware) {
this.data = rawPage.data as Item[];
constructor(rawPage: MiddlewareRawPage<Item>, middleware: Middleware) {
this.data = rawPage.data;
this.nextPath = rawPage.next;
this.prevPath = rawPage.prev;
this.#middleware = middleware;
Expand Down
84 changes: 52 additions & 32 deletions test/integration/Middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,25 @@ import {
} from '../../src';
import { assertNotNull } from '../utils';
import { pause } from '../../src/utils/other';
import { Activity } from '../../src/apis/middleware';
import {
Activity,
Auction,
Channel,
ContractCall,
ContractLog,
DeltaStat,
KeyBlockExtended,
Miner,
Name,
NameClaim,
NameUpdate,
Oracle,
Pointee,
Stat,
TotalStat,
Transaction,
Transfer,
} from '../../src/apis/middleware';
import { MiddlewarePage } from '../../src/utils/MiddlewarePage';

function copyFields(
Expand Down Expand Up @@ -71,7 +89,7 @@ describe('Middleware API', () => {
describe('blocks', () => {
it('gets key blocks', async () => {
const res = await middleware.getKeyBlocks({ limit: 15 });
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<KeyBlockExtended>(
{
data: [
{
Expand Down Expand Up @@ -135,7 +153,7 @@ describe('Middleware API', () => {
describe('transactions', () => {
it('gets account activities', async () => {
const res = await middleware.getAccountActivities(presetAccount1Address);
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Activity>(
{
data: [
{
Expand Down Expand Up @@ -233,29 +251,31 @@ describe('Middleware API', () => {
],
tx: {
abiVersion: 3,
aexn_type: null,
amount: 0n,
args: [],
callData: 'cb_KxFE1kQfP4oEp9E=',
callerId: 'ak_2Fh6StA76AKdy8qsGdkEfkQyVmAYc2XE1irWRnDgXKhmBLKoXg',
code: 'cb_+GhGA6Daq9LRBkSN10Qb9d5ZbvJWB+/tg8rj5OynWtj8AQ2R7cC4O57+RNZEHwA3ADcAGg6CPwEDP/6AeCCSADcBBwcBAQCYLwIRRNZEHxFpbml0EYB4IJIZZ2V0QXJngi8AhTguMC4wAHQkH9o=',
compiler_version: '8.0.0',
contractId: 'ct_2JgVFKjJYUyJDnpJPhspX8C6RS6rFS46r3C1sy15tW9dDmPX2E',
deposit: 0n,
fee: 78500000000000n,
gas: 76,
gasPrice: 1000000000n,
gas_used: 61,
log: [],
nonce: 1,
ownerId: 'ak_2Fh6StA76AKdy8qsGdkEfkQyVmAYc2XE1irWRnDgXKhmBLKoXg',
return_type: 'ok',
return_value: 'cb_Xfbg4g==',
source_hash: '2qvS0QZEjddEG/XeWW7yVgfv7YPK4+Tsp1rY/AENke0=',
ttl: 5,
type: 'ContractCreateTx',
version: 1,
vmVersion: 8,
...{
aexn_type: null,
args: [],
compiler_version: '8.0.0',
gas_used: 61,
log: [],
return_type: 'ok',
return_value: 'cb_Xfbg4g==',
source_hash: '2qvS0QZEjddEG/XeWW7yVgfv7YPK4+Tsp1rY/AENke0=',
},
},
},
type: 'ContractCreateTxEvent',
Expand Down Expand Up @@ -304,7 +324,7 @@ describe('Middleware API', () => {

it('gets transactions', async () => {
const res = await middleware.getTransactions({ limit: 15 });
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Transaction>(
{
data: [
{
Expand Down Expand Up @@ -352,7 +372,7 @@ describe('Middleware API', () => {

it('gets transfers', async () => {
const res = await middleware.getTransfers();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Transfer>(
{
data: [
{
Expand Down Expand Up @@ -380,7 +400,7 @@ describe('Middleware API', () => {
describe('contracts', () => {
it('gets contract calls', async () => {
const res = await middleware.getContractCalls();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<ContractCall>(
{
data: [
{
Expand Down Expand Up @@ -415,7 +435,7 @@ describe('Middleware API', () => {

it('gets contract logs', async () => {
const res = await middleware.getContractLogs();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<ContractLog>(
{
data: [
{
Expand Down Expand Up @@ -477,7 +497,7 @@ describe('Middleware API', () => {
describe('names', () => {
it('gets names', async () => {
const res = await middleware.getNames();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Name>(
{
data: [
{
Expand Down Expand Up @@ -534,7 +554,7 @@ describe('Middleware API', () => {

it('gets name claims', async () => {
const res = await middleware.getNameClaims('123456789012345678901234567801.chain');
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<NameClaim>(
{
data: [
{
Expand Down Expand Up @@ -566,7 +586,7 @@ describe('Middleware API', () => {

it('gets name updates', async () => {
const res = await middleware.getNameUpdates('123456789012345678901234567801.chain');
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<NameUpdate>(
{
data: [
{
Expand Down Expand Up @@ -610,7 +630,7 @@ describe('Middleware API', () => {

it('gets account pointees pointers', async () => {
const res = await middleware.getAccountPointees(presetAccount1Address);
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Pointee>(
{
data: [
{
Expand Down Expand Up @@ -656,7 +676,7 @@ describe('Middleware API', () => {

it('gets auctions', async () => {
const res = await middleware.getNamesAuctions();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Auction>(
{
data: [
{
Expand Down Expand Up @@ -710,7 +730,7 @@ describe('Middleware API', () => {
describe('oracles', () => {
it('gets oracles', async () => {
const res = await middleware.getOracles();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Oracle>(
{
data: [
{
Expand Down Expand Up @@ -824,7 +844,7 @@ describe('Middleware API', () => {
describe('channels', () => {
it('gets channels', async () => {
const res = await middleware.getChannels();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Channel>(
{
data: [
{
Expand Down Expand Up @@ -899,7 +919,7 @@ describe('Middleware API', () => {

it('gets delta', async () => {
const res = await middleware.getDeltaStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<DeltaStat>(
{
data: [
{
Expand Down Expand Up @@ -932,7 +952,7 @@ describe('Middleware API', () => {

it('gets total', async () => {
const res = await middleware.getTotalStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<TotalStat>(
{
data: [
{
Expand Down Expand Up @@ -964,7 +984,7 @@ describe('Middleware API', () => {

it('gets miner', async () => {
const res = await middleware.getMinerStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Miner>(
{ data: [], next: null, prev: null },
middleware,
);
Expand All @@ -973,7 +993,7 @@ describe('Middleware API', () => {

it('gets blocks', async () => {
const res = await middleware.getBlocksStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Stat>(
{
data: [{ count: 24, endDate, startDate }],
next: null,
Expand All @@ -986,7 +1006,7 @@ describe('Middleware API', () => {

it('gets transactions', async () => {
const res = await middleware.getTransactionsStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Stat>(
{
data: [{ count: 11, endDate, startDate }],
next: null,
Expand All @@ -999,7 +1019,7 @@ describe('Middleware API', () => {

it('gets names', async () => {
const res = await middleware.getNamesStats();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Stat>(
{
data: [{ count: 0, endDate, startDate }],
next: null,
Expand Down Expand Up @@ -1037,7 +1057,7 @@ describe('Middleware API', () => {
const res = await middleware.requestByPath<MiddlewarePage<Activity>>(
`/v3/accounts/${presetAccount1Address}/activities?limit=1`,
);
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Activity>(
{
data: (await middleware.getAccountActivities(presetAccount1Address)).data.slice(0, 1),
next: `/v3/accounts/${presetAccount1Address}/activities?cursor=3-3-1&limit=1`,
Expand All @@ -1052,7 +1072,7 @@ describe('Middleware API', () => {
const res = await middleware.requestByPath<MiddlewarePage<Activity>>(
`/v3/accounts/${presetAccount1Address}/activities?cursor=3-3-1&limit=1`,
);
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Activity>(
{
data: (await middleware.getAccountActivities(presetAccount1Address)).data.slice(1, 2),
next: `/v3/accounts/${presetAccount1Address}/activities?cursor=3-3-0&limit=1`,
Expand All @@ -1068,7 +1088,7 @@ describe('Middleware API', () => {
it('nevigates to the next page', async () => {
const first = await middleware.getTransactions({ limit: 1 });
const res = await first.next();
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Transaction>(
{
data: (await middleware.getTransactions()).data.slice(1, 2),
next: '/v3/transactions?cursor=8&limit=1',
Expand All @@ -1085,7 +1105,7 @@ describe('Middleware API', () => {
const res = await second.prev();
expect(res).to.be.eql(first);
expect(res.prevPath).to.be.eql(null);
const expectedRes: typeof res = new MiddlewarePage(
const expectedRes: typeof res = new MiddlewarePage<Transaction>(
{
data: (await middleware.getTransactions()).data.slice(0, 1),
next: '/v3/transactions?cursor=9&limit=1',
Expand Down

0 comments on commit e96d7b7

Please sign in to comment.