Skip to content

Commit 7488bbc

Browse files
committed
ADD tests for utility functions
1 parent 0b2bfdb commit 7488bbc

File tree

2 files changed

+153
-1
lines changed

2 files changed

+153
-1
lines changed

test/v4/fees.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ethers } from 'ethers';
1+
import { BigNumber, ethers } from 'ethers';
22
import { NftSwapV4 } from '../../src/sdk/v4/NftSwapV4';
33

44
import { SwappableAssetV4 } from '../../src/sdk/v4/types';
@@ -95,6 +95,16 @@ describe('NFTSwapV4', () => {
9595
expect(signedOrder.fees[0].recipient).toEqual(
9696
'0xaaa1388cD71e88Ae3D8432f16bed3c603a58aD34'.toLowerCase()
9797
);
98+
99+
// Ensure getErc20TotalIncludingFees helper function works properly w/ fees.
100+
const total = nftSwapperMaker
101+
.getErc20TotalIncludingFees(signedOrder)
102+
.toString();
103+
const handCountedTotal = BigNumber.from(signedOrder.erc20TokenAmount).add(
104+
BigNumber.from(signedOrder.fees[0].amount)
105+
);
106+
expect(total).toBe(handCountedTotal.toString());
107+
98108
// console.log('erc721 signatuee', signedOrder.signature);
99109
// expect(signedOrder.signature.signatureType.toString()).toEqual('2');
100110

test/v4/utils.test.ts

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import { BigNumber, ethers } from 'ethers';
2+
import { NftSwapV4 } from '../../src/sdk/v4/NftSwapV4';
3+
4+
import {
5+
SignedERC721OrderStruct,
6+
SwappableAssetV4,
7+
} from '../../src/sdk/v4/types';
8+
9+
jest.setTimeout(120 * 1000);
10+
11+
const MAKER_WALLET_ADDRESS = '0xabc23F70Df4F45dD3Df4EC6DA6827CB05853eC9b';
12+
const MAKER_PRIVATE_KEY =
13+
'fc5db508b0a52da8fbcac3ab698088715595f8de9cccf2467d51952eec564ec9';
14+
// NOTE(johnrjj) - NEVER use these private keys for anything of value, testnets only!
15+
16+
const DAI_TOKEN_ADDRESS_TESTNET = '0x31f42841c2db5173425b5223809cf3a38fede360';
17+
const TEST_NFT_CONTRACT_ADDRESS = '0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b'; // https://ropsten.etherscan.io/token/0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b?a=0xabc23F70Df4F45dD3Df4EC6DA6827CB05853eC9b
18+
19+
const RPC_TESTNET =
20+
'https://eth-ropsten.alchemyapi.io/v2/is1WqyAFM1nNFFx2aCozhTep7IxHVNGo';
21+
22+
const MAKER_WALLET = new ethers.Wallet(MAKER_PRIVATE_KEY);
23+
// const TAKER_WALLET = new ethers.Wallet(TAKER_PRIVATE_KEY);
24+
25+
const PROVIDER = new ethers.providers.StaticJsonRpcProvider(RPC_TESTNET);
26+
27+
const MAKER_SIGNER = MAKER_WALLET.connect(PROVIDER);
28+
// const TAKER_PROVIDER = TAKER_WALLET.connect(PROVIDER);
29+
30+
const ROPSTEN_CHAIN_ID = 3;
31+
32+
const nftSwapperMaker = new NftSwapV4(
33+
MAKER_SIGNER as any,
34+
MAKER_SIGNER,
35+
ROPSTEN_CHAIN_ID
36+
);
37+
// const nftSwapperTaker = new NftSwap(TAKER_PROVIDER as any, 4);
38+
39+
const ERC20_ASSET: SwappableAssetV4 = {
40+
type: 'ERC20',
41+
tokenAddress: DAI_TOKEN_ADDRESS_TESTNET,
42+
amount: '100000000000', // 1 USDC
43+
};
44+
const NFT_ASSET: SwappableAssetV4 = {
45+
type: 'ERC721',
46+
tokenAddress: TEST_NFT_CONTRACT_ADDRESS,
47+
tokenId: '11045',
48+
};
49+
50+
describe('NFTSwapV4', () => {
51+
it('utility functions on class work properly with erc721 sell order', async () => {
52+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
53+
const v4Erc721Order = nftSwapperMaker.buildOrder(
54+
NFT_ASSET,
55+
ERC20_ASSET,
56+
MAKER_WALLET_ADDRESS,
57+
{
58+
fees: [
59+
{
60+
amount: '6900000000000',
61+
recipient: '0xaaa1388cD71e88Ae3D8432f16bed3c603a58aD34',
62+
},
63+
],
64+
}
65+
);
66+
67+
const v4Erc721SignedOrder = await nftSwapperMaker.signOrder(v4Erc721Order);
68+
69+
// Ensure getErc20TotalIncludingFees helper function works properly w/ fees.
70+
const total = nftSwapperMaker
71+
.getErc20TotalIncludingFees(v4Erc721SignedOrder)
72+
.toString();
73+
const handCountedTotal = BigNumber.from(
74+
v4Erc721SignedOrder.erc20TokenAmount
75+
).add(BigNumber.from(v4Erc721SignedOrder.fees[0].amount));
76+
expect(total).toBe(handCountedTotal.toString());
77+
78+
const makerAsset = nftSwapperMaker.getMakerAsset(v4Erc721SignedOrder);
79+
expect(makerAsset).toEqual(NFT_ASSET);
80+
81+
const takerAsset = nftSwapperMaker.getTakerAsset(v4Erc721SignedOrder);
82+
expect(takerAsset).toEqual(ERC20_ASSET);
83+
84+
const makerBalance = await nftSwapperMaker.fetchBalanceForAsset(
85+
makerAsset,
86+
v4Erc721SignedOrder.maker
87+
);
88+
expect(makerBalance.gt(0)).toBe(true);
89+
90+
const makerApprovalStatus = await nftSwapperMaker.loadApprovalStatus(
91+
makerAsset,
92+
v4Erc721SignedOrder.maker
93+
);
94+
expect(makerApprovalStatus.contractApproved).toBe(true);
95+
});
96+
97+
it('utility functions on class work properly with erc721 buy order', async () => {
98+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
99+
const v4Erc721Order = nftSwapperMaker.buildOrder(
100+
ERC20_ASSET,
101+
NFT_ASSET,
102+
MAKER_WALLET_ADDRESS,
103+
{
104+
fees: [
105+
{
106+
amount: '6900000000000',
107+
recipient: '0xaaa1388cD71e88Ae3D8432f16bed3c603a58aD34',
108+
},
109+
],
110+
}
111+
);
112+
113+
const v4Erc721SignedOrder = await nftSwapperMaker.signOrder(v4Erc721Order);
114+
115+
// Ensure getErc20TotalIncludingFees helper function works properly w/ fees.
116+
const total = nftSwapperMaker
117+
.getErc20TotalIncludingFees(v4Erc721SignedOrder)
118+
.toString();
119+
const handCountedTotal = BigNumber.from(
120+
v4Erc721SignedOrder.erc20TokenAmount
121+
).add(BigNumber.from(v4Erc721SignedOrder.fees[0].amount));
122+
expect(total).toBe(handCountedTotal.toString());
123+
124+
const makerAsset = nftSwapperMaker.getMakerAsset(v4Erc721SignedOrder);
125+
expect(makerAsset).toEqual(ERC20_ASSET);
126+
127+
const takerAsset = nftSwapperMaker.getTakerAsset(v4Erc721SignedOrder);
128+
expect(takerAsset).toEqual(NFT_ASSET);
129+
130+
const makerBalance = await nftSwapperMaker.fetchBalanceForAsset(
131+
makerAsset,
132+
v4Erc721SignedOrder.maker
133+
);
134+
expect(makerBalance.gt(0)).toBe(true);
135+
136+
const makerApprovalStatus = await nftSwapperMaker.loadApprovalStatus(
137+
makerAsset,
138+
v4Erc721SignedOrder.maker
139+
);
140+
expect(makerApprovalStatus.contractApproved).toBe(true);
141+
});
142+
});

0 commit comments

Comments
 (0)