mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { evmRevert, evmSnapshot, DRE } from '../../helpers/misc-utils';
 | |
| import { Signer } from 'ethers';
 | |
| import {
 | |
|   getLendingPool,
 | |
|   getLendingPoolAddressesProvider,
 | |
|   getAaveProtocolDataProvider,
 | |
|   getAToken,
 | |
|   getMintableERC20,
 | |
|   getLendingPoolConfiguratorProxy,
 | |
|   getPriceOracle,
 | |
|   getLendingPoolAddressesProviderRegistry,
 | |
|   getWETHMocked,
 | |
|   getWETHGateway,
 | |
| } from '../../helpers/contracts-getters';
 | |
| import { eEthereumNetwork, tEthereumAddress } from '../../helpers/types';
 | |
| import { LendingPool } from '../../types/LendingPool';
 | |
| import { AaveProtocolDataProvider } from '../../types/AaveProtocolDataProvider';
 | |
| import { MintableERC20 } from '../../types/MintableERC20';
 | |
| import { AToken } from '../../types/AToken';
 | |
| import { LendingPoolConfigurator } from '../../types/LendingPoolConfigurator';
 | |
| 
 | |
| import chai from 'chai';
 | |
| // @ts-ignore
 | |
| import bignumberChai from 'chai-bignumber';
 | |
| import { almostEqual } from './almost-equal';
 | |
| import { PriceOracle } from '../../types/PriceOracle';
 | |
| import { LendingPoolAddressesProvider } from '../../types/LendingPoolAddressesProvider';
 | |
| import { LendingPoolAddressesProviderRegistry } from '../../types/LendingPoolAddressesProviderRegistry';
 | |
| import { getEthersSigners, getParamPerNetwork } from '../../helpers/contracts-helpers';
 | |
| import { WETH9Mocked } from '../../types/WETH9Mocked';
 | |
| import { WETHGateway } from '../../types/WETHGateway';
 | |
| import { solidity } from 'ethereum-waffle';
 | |
| import { AaveConfig } from '../../markets/aave';
 | |
| 
 | |
| chai.use(bignumberChai());
 | |
| chai.use(almostEqual());
 | |
| chai.use(solidity);
 | |
| 
 | |
| export interface SignerWithAddress {
 | |
|   signer: Signer;
 | |
|   address: tEthereumAddress;
 | |
| }
 | |
| export interface TestEnv {
 | |
|   deployer: SignerWithAddress;
 | |
|   users: SignerWithAddress[];
 | |
|   pool: LendingPool;
 | |
|   configurator: LendingPoolConfigurator;
 | |
|   oracle: PriceOracle;
 | |
|   helpersContract: AaveProtocolDataProvider;
 | |
|   weth: WETH9Mocked;
 | |
|   aWETH: AToken;
 | |
|   dai: MintableERC20;
 | |
|   aDai: AToken;
 | |
|   usdc: MintableERC20;
 | |
|   aave: MintableERC20;
 | |
|   addressesProvider: LendingPoolAddressesProvider;
 | |
|   registry: LendingPoolAddressesProviderRegistry;
 | |
|   wethGateway: WETHGateway;
 | |
| }
 | |
| 
 | |
| let buidlerevmSnapshotId: string = '0x1';
 | |
| const setBuidlerevmSnapshotId = (id: string) => {
 | |
|   if (DRE.network.name === 'hardhat') {
 | |
|     buidlerevmSnapshotId = id;
 | |
|   }
 | |
| };
 | |
| 
 | |
| const testEnv: TestEnv = {
 | |
|   deployer: {} as SignerWithAddress,
 | |
|   users: [] as SignerWithAddress[],
 | |
|   pool: {} as LendingPool,
 | |
|   configurator: {} as LendingPoolConfigurator,
 | |
|   helpersContract: {} as AaveProtocolDataProvider,
 | |
|   oracle: {} as PriceOracle,
 | |
|   weth: {} as WETH9Mocked,
 | |
|   aWETH: {} as AToken,
 | |
|   dai: {} as MintableERC20,
 | |
|   aDai: {} as AToken,
 | |
|   usdc: {} as MintableERC20,
 | |
|   aave: {} as MintableERC20,
 | |
|   addressesProvider: {} as LendingPoolAddressesProvider,
 | |
|   registry: {} as LendingPoolAddressesProviderRegistry,
 | |
|   wethGateway: {} as WETHGateway,
 | |
| } as TestEnv;
 | |
| 
 | |
| export async function initializeMakeSuite() {
 | |
|   const [_deployer, ...restSigners] = await getEthersSigners();
 | |
|   const deployer: SignerWithAddress = {
 | |
|     address: await _deployer.getAddress(),
 | |
|     signer: _deployer,
 | |
|   };
 | |
| 
 | |
|   for (const signer of restSigners) {
 | |
|     testEnv.users.push({
 | |
|       signer,
 | |
|       address: await signer.getAddress(),
 | |
|     });
 | |
|   }
 | |
|   testEnv.deployer = deployer;
 | |
|   testEnv.pool = await getLendingPool();
 | |
| 
 | |
|   testEnv.configurator = await getLendingPoolConfiguratorProxy();
 | |
| 
 | |
|   testEnv.addressesProvider = await getLendingPoolAddressesProvider();
 | |
| 
 | |
|   if (process.env.MAINNET_FORK === 'true') {
 | |
|     testEnv.registry = await getLendingPoolAddressesProviderRegistry(
 | |
|       getParamPerNetwork(AaveConfig.ProviderRegistry, eEthereumNetwork.main)
 | |
|     );
 | |
|   } else {
 | |
|     testEnv.registry = await getLendingPoolAddressesProviderRegistry();
 | |
|     testEnv.oracle = await getPriceOracle();
 | |
|   }
 | |
| 
 | |
|   testEnv.helpersContract = await getAaveProtocolDataProvider();
 | |
| 
 | |
|   const allTokens = await testEnv.helpersContract.getAllATokens();
 | |
|   const aDaiAddress = allTokens.find((aToken) => aToken.symbol === 'aDAI')?.tokenAddress;
 | |
| 
 | |
|   const aWEthAddress = allTokens.find((aToken) => aToken.symbol === 'aWETH')?.tokenAddress;
 | |
| 
 | |
|   const reservesTokens = await testEnv.helpersContract.getAllReservesTokens();
 | |
| 
 | |
|   const daiAddress = reservesTokens.find((token) => token.symbol === 'DAI')?.tokenAddress;
 | |
|   const usdcAddress = reservesTokens.find((token) => token.symbol === 'USDC')?.tokenAddress;
 | |
|   const aaveAddress = reservesTokens.find((token) => token.symbol === 'AAVE')?.tokenAddress;
 | |
|   const wethAddress = reservesTokens.find((token) => token.symbol === 'WETH')?.tokenAddress;
 | |
| 
 | |
|   if (!aDaiAddress || !aWEthAddress) {
 | |
|     process.exit(1);
 | |
|   }
 | |
|   if (!daiAddress || !usdcAddress || !aaveAddress || !wethAddress) {
 | |
|     process.exit(1);
 | |
|   }
 | |
| 
 | |
|   testEnv.aDai = await getAToken(aDaiAddress);
 | |
|   testEnv.aWETH = await getAToken(aWEthAddress);
 | |
| 
 | |
|   testEnv.dai = await getMintableERC20(daiAddress);
 | |
|   testEnv.usdc = await getMintableERC20(usdcAddress);
 | |
|   testEnv.aave = await getMintableERC20(aaveAddress);
 | |
|   testEnv.weth = await getWETHMocked(wethAddress);
 | |
|   testEnv.wethGateway = await getWETHGateway();
 | |
| }
 | |
| 
 | |
| export function makeSuite(name: string, tests: (testEnv: TestEnv) => void) {
 | |
|   describe(name, () => {
 | |
|     before(async () => {
 | |
|       setBuidlerevmSnapshotId(await evmSnapshot());
 | |
|     });
 | |
|     tests(testEnv);
 | |
|     after(async () => {
 | |
|       await evmRevert(buidlerevmSnapshotId);
 | |
|     });
 | |
|   });
 | |
| }
 | 
