Skip to content

Commit

Permalink
test: update testing templates
Browse files Browse the repository at this point in the history
  • Loading branch information
Verisana committed Aug 26, 2022
1 parent 1bd7e2a commit 7be04f7
Show file tree
Hide file tree
Showing 4 changed files with 303 additions and 213 deletions.
163 changes: 95 additions & 68 deletions dex-template/__DexName__-e2e.test.ts.template
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import dotenv from 'dotenv';
dotenv.config();

import { testE2E } from '../../../tests/utils-e2e';
import { Tokens, Holders, NativeTokenSymbols } from '../../../tests/constants-e2e';
import {
Network,
ContractMethod,
SwapSide,
} from '../../constants';
Tokens,
Holders,
NativeTokenSymbols,
} from '../../../tests/constants-e2e';
import { Network, ContractMethod, SwapSide } from '../../constants';
import { StaticJsonRpcProvider } from '@ethersproject/providers';
import { generateConfig } from '../../config';

Expand Down Expand Up @@ -50,83 +50,110 @@ import { generateConfig } from '../../config';
(This comment should be removed from the final implementation)
*/

async function testForNetwork(
network: Network,
dexKey: string,
tokenASymbol: string,
tokenBSymbol: string,
tokenAAmount: string,
tokenBAmount: string,
nativeTokenAmount: string,
) {
const provider = new StaticJsonRpcProvider(
generateConfig(network).privateHttpProvider,
network,
);
const tokens = Tokens[network];
const holders = Holders[network];
const nativeTokenSymbol = NativeTokenSymbols[network];

// TODO: Add any direct swap contractMethod name if it exists
const sideToContractMethods = new Map([
[
SwapSide.SELL,
[
ContractMethod.simpleSwap,
ContractMethod.multiSwap,
ContractMethod.megaSwap,
],
],
// TODO: If buy is not supported remove the buy contract methods
[SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
]);

describe(`${network}`, () => {
sideToContractMethods.forEach((contractMethods, side) =>
describe(`${side}`, () => {
contractMethods.forEach((contractMethod: ContractMethod) => {
describe(`${contractMethod}`, () => {
it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
await testE2E(
tokens[nativeTokenSymbol],
tokens[tokenASymbol],
holders[nativeTokenSymbol],
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
await testE2E(
tokens[tokenASymbol],
tokens[nativeTokenSymbol],
holders[tokenASymbol],
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
await testE2E(
tokens[tokenASymbol],
tokens[tokenBSymbol],
holders[tokenASymbol],
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
});
});
}),
);
});
}

describe('__DexName__ E2E', () => {
const dexKey = '__DexName__';

describe('__DexName__ MAINNET', () => {
const network = Network.MAINNET;
const tokens = Tokens[network];
const holders = Holders[network];
const provider = new StaticJsonRpcProvider(generateConfig(network).privateHttpProvider, network);

// TODO: Modify the tokenASymbol, tokenBSymbol, tokenAAmount;
const tokenASymbol: string = 'tokenASymbol';
const tokenBSymbol: string = 'tokenBSymbol';
const nativeTokenSymbol = NativeTokenSymbols[network];

const tokenAAmount: string = 'tokenAAmount';
const tokenBAmount: string = 'tokenBAmount';
const nativeTokenAmount = '1000000000000000000';

// TODO: Add any direct swap contractMethod name if it exists
// TODO: If buy is not supported remove the buy contract methods

const sideToContractMethods = new Map([
[SwapSide.SELL, [
ContractMethod.simpleSwap,
ContractMethod.multiSwap,
ContractMethod.megaSwap,
]],
[SwapSide.BUY, [
ContractMethod.simpleBuy,
ContractMethod.buy
]],
]);

sideToContractMethods.forEach((contractMethods, side) =>
contractMethods.forEach((contractMethod: ContractMethod) => {
describe(`${contractMethod}`, () => {
it(nativeTokenSymbol + ' -> TOKEN', async () => {
await testE2E(
tokens[nativeTokenSymbol],
tokens[tokenASymbol],
holders[nativeTokenSymbol],
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
it('TOKEN -> ' + nativeTokenSymbol, async () => {
await testE2E(
tokens[tokenASymbol],
tokens[nativeTokenSymbol],
holders[tokenASymbol],
side === SwapSide.SELL ? tokenAAmount: nativeTokenAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
it('TOKEN -> TOKEN', async () => {
await testE2E(
tokens[tokenASymbol],
tokens[tokenBSymbol],
holders[tokenASymbol],
side === SwapSide.SELL ? tokenAAmount: tokenBAmount,
side,
dexKey,
contractMethod,
network,
provider,
);
});
});
}),
testForNetwork(
network,
dexKey,
tokenASymbol,
tokenBSymbol,
tokenAAmount,
tokenBAmount,
nativeTokenAmount,
);

// TODO: Add any additional test cases required to test __DexName__
Expand Down
84 changes: 53 additions & 31 deletions dex-template/__DexName__-events.test.ts.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ dotenv.config();
import { __DexName__EventPool } from './__DexNameParam__';
import { __DexName__Config } from './config';
import { Network } from '../../constants';
import { Address } from '../../types';
import { DummyDexHelper } from '../../dex-helper/index';
import { testEventSubscriber } from '../../../tests/utils-events';
import { PoolState } from './types';
Expand Down Expand Up @@ -42,9 +43,6 @@ import { PoolState } from './types';
*/

jest.setTimeout(50 * 1000);
const dexKey = '__DexName__';
const network = Network.MAINNET;
const config = __DexName__Config[dexKey][network];

async function fetchPoolState(
__DexNameCamel__Pools: __DexName__EventPool,
Expand All @@ -54,36 +52,60 @@ async function fetchPoolState(
// TODO: complete me!
}

describe('__DexName__ Event', function () {
const blockNumbers: { [eventName: string]: number[] } = {
// eventName -> blockNumbers
type EventMappings = Record<string, number[]>;

describe('__DexName__ EventPool Mainnet', function () {
const dexKey = '__DexName__';
const network = Network.MAINNET;
const dexHelper = new DummyDexHelper(network);
const logger = dexHelper.getLogger(dexKey);
let __DexNameCamel__Pool: __DexName__EventPool;

// poolAddress -> EventMappings
const eventsToTest: Record<Address, EventMappings> = {
// TODO: complete me!
};

describe('__DexName__EventPool', function () {
Object.keys(blockNumbers).forEach((event: string) => {
blockNumbers[event].forEach((blockNumber: number) => {
it(`Should return the correct state after the ${blockNumber}:${event}`, async function () {
const dexHelper = new DummyDexHelper(network);
const logger = dexHelper.getLogger(dexKey);

const __DexNameCamel__Pools = new __DexName__EventPool(
dexKey,
network,
dexHelper,
logger,
);

await testEventSubscriber(
__DexNameCamel__Pools,
__DexNameCamel__Pools.addressesSubscribed,
(_blockNumber: number) =>
fetchPoolState(__DexNameCamel__Pools, _blockNumber, poolAddress),
blockNumber,
`${dexKey}_${poolAddress}`,
dexHelper.provider,
);
});
});
});
let __DexNameCamel__: __DexName__EventPool;

beforeEach(async () => {
__DexNameCamel__Pool = new __DexName__EventPool(
dexKey,
network,
dexHelper,
logger,
/* TODO: Put here additional constructor arguments if needed */
);
});

Object.entries(eventsToTest).forEach(
([poolAddress, events]: [string, EventMappings]) => {
describe(`Events for ${poolAddress}`, () => {
Object.entries(events).forEach(
([eventName, blockNumbers]: [string, number[]]) => {
describe(`${eventName}`, () => {
blockNumbers.forEach((blockNumber: number) => {
it(`State after ${blockNumber}`, async function () {
await testEventSubscriber(
__DexNameCamel__Pool,
__DexNameCamel__Pool.addressesSubscribed,
(_blockNumber: number) =>
fetchPoolState(
__DexNameCamel__Pool,
_blockNumber,
poolAddress,
),
blockNumber,
`${dexKey}_${poolAddress}`,
dexHelper.provider,
);
});
});
});
},
);
});
},
);
});
Loading

0 comments on commit 7be04f7

Please sign in to comment.