Skip to content

Commit

Permalink
test: custom machers + event custom macher
Browse files Browse the repository at this point in the history
  • Loading branch information
tabaktoni committed Nov 27, 2024
1 parent 3a398ea commit 67fdf32
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 101 deletions.
53 changes: 7 additions & 46 deletions __tests__/cairo1v2.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fs from 'node:fs';
import path from 'node:path';

import {
Account,
BigNumberish,
Expand Down Expand Up @@ -872,14 +873,7 @@ describe('Cairo 1', () => {
];
const tx = await provider.waitForTransaction(transaction_hash);
const myEvents = eventContract.parseEvents(tx);
const event0 = myEvents[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
return expect([event0]).toStrictEqual(shouldBe);
expect(myEvents[0]).toMatchEventStructure(shouldBe[0]);
});

test('parse event returning a nested struct', async () => {
Expand All @@ -897,14 +891,7 @@ describe('Cairo 1', () => {
];
const tx = await provider.waitForTransaction(transaction_hash);
const myEvents = eventContract.parseEvents(tx);
const event0 = myEvents[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
return expect([event0]).toStrictEqual(shouldBe);
expect(myEvents[0]).toMatchEventStructure(shouldBe[0]);
});

test('parse tx returning multiple similar events', async () => {
Expand Down Expand Up @@ -950,21 +937,8 @@ describe('Cairo 1', () => {
const { transaction_hash } = await account.execute([callData1, callData2]);
const tx = await provider.waitForTransaction(transaction_hash);
const myEvents = eventContract.parseEvents(tx);
const event0 = myEvents[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
const event1 = myEvents[1];
expect(event1.block_hash).toBeDefined();
expect(event1.block_number).toBeDefined();
expect(event1.transaction_hash).toBeDefined();
delete event1.block_hash;
delete event1.block_number;
delete event1.transaction_hash;
return expect([event0, event1]).toStrictEqual(shouldBe);
expect(myEvents[0]).toMatchEventStructure(shouldBe[0]);
expect(myEvents[1]).toMatchEventStructure(shouldBe[1]);
});
test('parse tx returning multiple different events', async () => {
const shouldBe: types.ParsedEvents = [
Expand Down Expand Up @@ -1000,21 +974,8 @@ describe('Cairo 1', () => {
const { transaction_hash } = await account.execute([callData1, callData2]);
const tx = await provider.waitForTransaction(transaction_hash);
const myEvents = eventContract.parseEvents(tx);
const event0 = myEvents[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
const event1 = myEvents[1];
expect(event1.block_hash).toBeDefined();
expect(event1.block_number).toBeDefined();
expect(event1.transaction_hash).toBeDefined();
delete event1.block_hash;
delete event1.block_number;
delete event1.transaction_hash;
return expect([event0, event1]).toStrictEqual(shouldBe);
expect(myEvents[0]).toMatchEventStructure(shouldBe[0]);
expect(myEvents[1]).toMatchEventStructure(shouldBe[1]);
});

test('parsing nested events from Cairo components', () => {
Expand Down
52 changes: 6 additions & 46 deletions __tests__/cairo1v2_typed.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -815,14 +815,7 @@ describe('Cairo 1', () => {
];
const tx = await provider.waitForTransaction(transaction_hash);
const events = eventContract.parseEvents(tx);
const event0 = events[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
return expect([event0]).toStrictEqual(shouldBe);
expect(events[0]).toMatchEventStructure(shouldBe[0]);
});

test('parse event returning a nested struct', async () => {
Expand All @@ -840,14 +833,7 @@ describe('Cairo 1', () => {
];
const tx = await provider.waitForTransaction(transaction_hash);
const events = eventContract.parseEvents(tx);
const event0 = events[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
return expect([event0]).toStrictEqual(shouldBe);
expect(events[0]).toMatchEventStructure(shouldBe[0]);
});

test('parse tx returning multiple similar events', async () => {
Expand Down Expand Up @@ -893,21 +879,8 @@ describe('Cairo 1', () => {
const { transaction_hash } = await account.execute([callData1, callData2]);
const tx = await provider.waitForTransaction(transaction_hash);
const events = eventContract.parseEvents(tx);
const event0 = events[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
const event1 = events[1];
expect(event1.block_hash).toBeDefined();
expect(event1.block_number).toBeDefined();
expect(event1.transaction_hash).toBeDefined();
delete event1.block_hash;
delete event1.block_number;
delete event1.transaction_hash;
return expect([event0, event1]).toStrictEqual(shouldBe);
expect(events[0]).toMatchEventStructure(shouldBe[0]);
expect(events[1]).toMatchEventStructure(shouldBe[1]);
});
test('parse tx returning multiple different events', async () => {
const shouldBe: types.ParsedEvents = [
Expand Down Expand Up @@ -943,21 +916,8 @@ describe('Cairo 1', () => {
const { transaction_hash } = await account.execute([callData1, callData2]);
const tx = await provider.waitForTransaction(transaction_hash);
const events = eventContract.parseEvents(tx);
const event0 = events[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
const event1 = events[1];
expect(event1.block_hash).toBeDefined();
expect(event1.block_number).toBeDefined();
expect(event1.transaction_hash).toBeDefined();
delete event1.block_hash;
delete event1.block_number;
delete event1.transaction_hash;
return expect([event0, event1]).toStrictEqual(shouldBe);
expect(events[0]).toMatchEventStructure(shouldBe[0]);
expect(events[1]).toMatchEventStructure(shouldBe[1]);
});
});

Expand Down
32 changes: 32 additions & 0 deletions __tests__/config/customMatchers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// @ts-nocheck

declare global {
namespace jest {
interface Matchers<R> {
toMatchEventStructure(expected: any): R;
}
}
}

const customMatchers = {
toMatchEventStructure(received: any, expected: any): any {
const { block_hash, block_number, transaction_hash, ...eventData } = received;

// Check if required properties exist
const hasRequiredProps = block_hash && block_number && transaction_hash;

// Check if event data matches
const eventDataMatches = this.equals(eventData, expected);

return {
actual: received,
pass: hasRequiredProps && eventDataMatches,
message: () =>
`Expected event to match structure with dynamic properties.\n\n` +
`Expected: ${this.utils.printExpected(expected)}\n` +
`Received: ${this.utils.printReceived(eventData)}`,
};
},
};

export default customMatchers;
6 changes: 6 additions & 0 deletions __tests__/config/jest.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ import 'isomorphic-fetch';
/* eslint-disable no-console */
import { register } from 'fetch-intercept';

import customMatchers from './customMatchers';

beforeAll(() => {
expect.extend(customMatchers);
});

const util = require('util');

jest.setTimeout(50 * 60 * 1000);
Expand Down
11 changes: 2 additions & 9 deletions __tests__/contract.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import {
ContractFactory,
ParsedEvents,
RawArgs,
SuccessfulTransactionReceiptResponse,
json,
shortString,
stark,
SuccessfulTransactionReceiptResponse,
} from '../src';
import { CallData } from '../src/utils/calldata';
import { felt, isCairo1Abi, tuple, uint256 } from '../src/utils/calldata/cairo';
Expand Down Expand Up @@ -152,14 +152,7 @@ describe('contract module', () => {
},
},
];
const event0 = events[0];
expect(event0.block_hash).toBeDefined();
expect(event0.block_number).toBeDefined();
expect(event0.transaction_hash).toBeDefined();
delete event0.block_hash;
delete event0.block_number;
delete event0.transaction_hash;
return expect([event0]).toStrictEqual(shouldBe);
expect(events[0]).toMatchEventStructure(shouldBe[0]);
});
});

Expand Down

0 comments on commit 67fdf32

Please sign in to comment.