Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ import Web3 from 'web3';
// eslint-disable-next-line import/no-extraneous-dependencies
import { Web3Account } from 'web3-eth-accounts';
import { GreeterBytecode, GreeterAbi } from '../../shared_fixtures/build/Greeter';
import { getSystemTestProvider, createLocalAccount, isWs } from '../../fixtures/system_test_utils';
import { getSystemTestProvider, createLocalAccount } from '../../fixtures/system_test_utils';
import { Contract } from '../../../src';
import { sleep } from '../../shared_fixtures/utils';

describe('contract', () => {
describe('deploy', () => {
Expand Down Expand Up @@ -118,23 +117,30 @@ describe('contract', () => {

it('should emit the "confirmation" event', async () => {
const confirmationHandler = jest.fn();

await contract
const promievent = contract
.deploy(deployOptions)
.send(sendOptions)
.on('confirmation', confirmationHandler);
.send(sendOptions);
const receiptPromise = new Promise<void>((resolve) => {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
promievent
.on('receipt', () => {
resolve()
})
})

// Wait for sometime to allow the transaction to be processed
await sleep(500);
const confirmationPRomise = new Promise<void>((resolve) => {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
promievent
.on('confirmation', () => {confirmationHandler(); resolve();})
})
await promievent;
await receiptPromise;

// Deploy once again to trigger block mining to trigger confirmation
// We can send any other transaction as well
await contract.deploy(deployOptions).send(sendOptions);

// Wait for some fraction of time to trigger the handler
// On http we use polling to get confirmation, so wait a bit longer
await sleep(isWs ? 500 : 2000);

await confirmationPRomise;
// eslint-disable-next-line jest/no-standalone-expect
expect(confirmationHandler).toHaveBeenCalled();
});
Expand Down
13 changes: 6 additions & 7 deletions packages/web3-eth/test/integration/subscription_logs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ describeIf(isSocket)('subscription', () => {

let count = 0;

const pr = new Promise((resolve: Resolve, reject) => {
const pr = new Promise((resolve: Resolve) => {
sub.on('data', (data: any) => {
count += 1;
const decodedData = decodeEventABI(
Expand All @@ -106,13 +106,12 @@ describeIf(isSocket)('subscription', () => {
resolve();
}
});
sub.on('error', reject);
});

makeFewTxToContract({
contract: contractDeployed,
sendOptions,
testDataString,
}).catch(e => reject(e));
await makeFewTxToContract({
contract: contractDeployed,
sendOptions,
testDataString,
});

await pr;
Expand Down
51 changes: 20 additions & 31 deletions packages/web3/test/integration/web3.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import HttpProvider from 'web3-providers-http';
import { IpcProvider } from 'web3-providers-ipc';
import WebSocketProvider from 'web3-providers-ws';
import { JsonRpcOptionalRequest, SupportedProviders, Web3BaseProvider } from 'web3-types';
import Web3 from '../../src/index';
import { Web3 } from '../../src/index';
import { BasicAbi } from '../shared_fixtures/Basic';
import { GreeterAbi, GreeterBytecode } from '../shared_fixtures/build/Greeter';
import { GreeterAbi } from '../shared_fixtures/build/Greeter';
import { validEncodeParametersData } from '../shared_fixtures/data';
import {
closeOpenConnection,
Expand All @@ -35,7 +35,7 @@ import {
isSocket,
isWs,
itIf,
waitForOpenConnection,
waitForOpenConnection
} from '../shared_fixtures/system_tests_utils';

/* eslint-disable jest/no-standalone-expect */
Expand All @@ -55,7 +55,11 @@ describe('Web3 instance', () => {
accounts = [acc1.address, acc2.address];
});
afterAll(async () => {
await closeOpenConnection(web3);
try {
await closeOpenConnection(web3);
} catch (e) {
console.warn("Failed to close open con", e)
}
});

beforeEach(() => {
Expand Down Expand Up @@ -303,25 +307,18 @@ describe('Web3 instance', () => {

describe('defaults', () => {
let contract: Contract<typeof GreeterAbi>;
let deployOptions: Record<string, unknown>;
let sendOptions: Record<string, unknown>;
let acc: { address: string; privateKey: string };

beforeAll(() => {
web3 = new Web3(provider);
});

beforeEach(async () => {
acc = await createTempAccount();

// todo import GreeterBytecode
deployOptions = {
data: GreeterBytecode,
arguments: ['My Greeting'],
};

sendOptions = { from: acc.address, gas: '1000000' };
});
afterAll(() => {
try {
web3.provider?.disconnect();
} catch (e) {
// ignored
}
})

it('should update defaults on contract instance', () => {
const hardfork = 'berlin';
Expand All @@ -334,20 +331,12 @@ describe('Web3 instance', () => {
web3.defaultHardfork = hardfork;

expect(contract.defaultHardfork).toBe(hardfork);
try {
contract.provider?.disconnect();
} catch (e) {
// ignored
}
});

it('should update defaults on deployed contract instance', async () => {
const hardfork = 'berlin';

contract = new web3.eth.Contract(GreeterAbi, undefined, {
provider: getSystemTestProvider(),
syncWithContext: true,
});
contract = await contract.deploy(deployOptions).send(sendOptions);

web3.defaultHardfork = hardfork;

expect(contract.defaultHardfork).toBe(hardfork);
});
});
});