Skip to content

Commit

Permalink
Merge pull request #92 from matter-labs/QA-535-cover-contract-api
Browse files Browse the repository at this point in the history
test: covering Contract API and Logs API endpoints
  • Loading branch information
abilevych authored Nov 21, 2023
2 parents f7ddfe6 + 1bc3563 commit 21737ce
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/integration-tests/src/entities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export enum Buffer {
L2 = "./buffer/L2.txt",
L2deposited = "./buffer/L2deposited.txt",
paymaster = "./buffer/paymaster.txt",
paymasterDeployTx = "./buffer/paymasterDeployTx.txt",
paymasterTx = "./buffer/paymasterTx.txt",
addressMultiTransferETH = "./buffer/multiTransferETH.txt",
txMultiTransferETH = "./buffer/txMultiTransferETH.txt",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export default async function (hre: HardhatRuntimeEnvironment) {

const deployTransaction = await paymaster.deployTransaction;
console.log(`Paymaster deploy transaction: ${deployTransaction.hash}`);
await fs.writeFile(Buffer.paymasterDeployTx, deployTransaction.hash);

await (
await deployer.zkWallet.sendTransaction({
Expand Down
60 changes: 60 additions & 0 deletions packages/integration-tests/tests/api/contracts.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import * as request from "supertest";

import { environment } from "../../src/config";
import { localConfig } from "../../src/config";
import { Buffer, Wallets } from "../../src/entities";
import { Helper } from "../../src/helper";
import { Playbook } from "../../src/playbook/playbook";

describe("Contracts API", () => {
jest.setTimeout(localConfig.standardTimeout);

const helper = new Helper();
const playbook = new Playbook();
const bufferFile = "src/playbook/";
let paymasterContract: string;
let paymasterTx: string;
let multicallCallerContract: string;
let multicallCallerTx: string;

describe("/api?module=contract&action=getcontractcreation", () => {
beforeAll(async () => {
await playbook.deployViaPaymaster();
await playbook.deployMultiCallContracts();
});

//@id1696
it("Verify the response via /api?module=contract&action=getcontractcreation&contractaddresses={address1},{address2}", async () => {
paymasterContract = await helper.getStringFromFile(bufferFile + Buffer.paymaster);
paymasterTx = await helper.getStringFromFile(bufferFile + Buffer.paymasterDeployTx);
multicallCallerContract = await helper.getStringFromFile(bufferFile + Buffer.addressMultiCallCaller);
multicallCallerTx = await helper.getStringFromFile(bufferFile + Buffer.txMultiCallCaller);
const apiRoute = `/api?module=contract&action=getcontractcreation&contractaddresses=${paymasterContract},${multicallCallerContract}`;
return request(environment.blockExplorerAPI)
.get(apiRoute)
.expect(200)
.expect((res) =>
expect(res.body.result[0]).toStrictEqual(expect.objectContaining({ contractAddress: paymasterContract }))
)
.expect((res) =>
expect(res.body.result[0]).toStrictEqual(
expect.objectContaining({ contractCreator: Wallets.richWalletAddress })
)
)
.expect((res) => expect(res.body.result[0]).toStrictEqual(expect.objectContaining({ txHash: paymasterTx })))
.expect((res) =>
expect(res.body.result[1]).toStrictEqual(
expect.objectContaining({ contractAddress: multicallCallerContract })
)
)
.expect((res) =>
expect(res.body.result[1]).toStrictEqual(
expect.objectContaining({ contractCreator: Wallets.richWalletAddress })
)
)
.expect((res) =>
expect(res.body.result[1]).toStrictEqual(expect.objectContaining({ txHash: multicallCallerTx }))
);
});
});
});
64 changes: 64 additions & 0 deletions packages/integration-tests/tests/api/logs.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import * as request from "supertest";

import { environment } from "../../src/config";
import { localConfig } from "../../src/config";
import { Buffer } from "../../src/entities";
import { Helper } from "../../src/helper";
import { Playbook } from "../../src/playbook/playbook";

describe("Logs API", () => {
jest.setTimeout(localConfig.standardTimeout); //works unstable without timeout
const helper = new Helper();
const bufferFile = "src/playbook/";
const playbook = new Playbook();
let contractAddress: string;
let txHash: string;

describe("/api?module=logs&action=getLogs", () => {
beforeAll(async () => {
await playbook.deployGreeterToL2();
await playbook.useGreeter();
});

//@id1808
it("Verify the response via /api?module=logs&action=getLogs&page={page}&offset={offset}0&toBlock={toBlock}&fromBlock={fromBlock}&address={address}", async () => {
contractAddress = await helper.getStringFromFile(bufferFile + Buffer.greeterL2);
txHash = await helper.getStringFromFile(bufferFile + Buffer.executeGreeterTx);

const apiRoute = `/api?module=logs&action=getLogs&page=1&offset=10&toBlock=10000&fromBlock=1&address=${contractAddress}`;

return request(environment.blockExplorerAPI)
.get(apiRoute)
.expect(200)
.expect((res) =>
expect(res.body.result[0]).toStrictEqual(expect.objectContaining({ address: contractAddress }))
)
.expect((res) => expect(Array.isArray(res.body.result[0].topics)).toStrictEqual(true))
.expect((res) => expect(typeof res.body.result[0].topics[0]).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].topics[0].startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].topics[0].length).toBe(66))
.expect((res) => expect(typeof res.body.result[0].data).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].data.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].data.length).toBe(194))
.expect((res) => expect(typeof res.body.result[0].blockNumber).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].blockNumber.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].blockNumber.length).toBe(5))
.expect((res) => expect(typeof res.body.result[0].timeStamp).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].timeStamp.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].timeStamp.length).toBe(10))
.expect((res) => expect(typeof res.body.result[0].gasPrice).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].gasPrice.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].gasPrice.length).toBe(9))
.expect((res) => expect(typeof res.body.result[0].gasUsed).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].gasUsed.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].gasUsed.length).toBe(7))
.expect((res) => expect(typeof res.body.result[0].logIndex).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].logIndex.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].logIndex.length).toBe(3))
.expect((res) => expect(res.body.result[0]).toStrictEqual(expect.objectContaining({ transactionHash: txHash })))
.expect((res) => expect(typeof res.body.result[0].transactionIndex).toStrictEqual("string"))
.expect((res) => expect(res.body.result[0].transactionIndex.startsWith("0x")).toBe(true))
.expect((res) => expect(res.body.result[0].transactionIndex.length).toBe(3));
});
});
});

0 comments on commit 21737ce

Please sign in to comment.