Skip to content

Commit 589f1ed

Browse files
committed
ADDS unit tests for invalid orders attempting to post to orderbook
1 parent 284db99 commit 589f1ed

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

test/v4/orderbook.test.ts

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
searchOrderbook,
88
} from '../../src/sdk/v4/orderbook';
99
import { SwappableAssetV4 } from '../../src/sdk';
10+
import getUnixTime from 'date-fns/getUnixTime';
11+
import sub from 'date-fns/sub';
1012

1113
jest.setTimeout(90 * 1000);
1214

@@ -90,4 +92,104 @@ describe('NFTSwapV4', () => {
9092
// const txReceipt = await fillTx.wait();
9193
// console.log(`Swapped on Ropsten (txHAsh: ${txReceipt.transactionIndex})`);
9294
});
95+
96+
it('v4 orderbook rejects invalid order (maker token address on non-existant token)', async () => {
97+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
98+
const invalidOrder = nftSwapperMaker.buildOrder(
99+
// Has 'invalid' erc721 token address
100+
{
101+
...MAKER_ASSET,
102+
tokenAddress: '0x5Af0D9827E0c53E4799BB226655A1de152A425a5',
103+
},
104+
TAKER_ASSET,
105+
MAKER_WALLET_ADDRESS
106+
);
107+
108+
const invalidSignedOrder = await nftSwapperMaker.signOrder(invalidOrder);
109+
110+
const testMetadata = { testData: 'unit-test' };
111+
112+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
113+
invalidSignedOrder,
114+
ROPSTEN_CHAIN_ID.toString(10),
115+
testMetadata
116+
);
117+
try {
118+
await postOrderPromiseThatShouldFail;
119+
expect('this line to never be hit').toBeFalsy();
120+
} catch (e) {
121+
expect(e).toEqual({
122+
errorCode: 'ERROR_FETCHING_ORDER_DATA',
123+
errorMessage:
124+
'Error looking up maker balance and approval data. Order may be using incorrect/bad token 0x5af0d9827e0c53e4799bb226655a1de152a425a5, chainId: 3.',
125+
});
126+
}
127+
});
128+
129+
it('v4 orderbook rejects invalid order (signature invalid)', async () => {
130+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
131+
const validOrder = nftSwapperMaker.buildOrder(
132+
// Has 'invalid' erc721 token address
133+
{
134+
...MAKER_ASSET,
135+
tokenAddress: '0x5Af0D9827E0c53E4799BB226655A1de152A425a5',
136+
},
137+
TAKER_ASSET,
138+
MAKER_WALLET_ADDRESS
139+
);
140+
141+
const signedValidOrder = await nftSwapperMaker.signOrder(validOrder);
142+
143+
const invalidSignedOrder = { ...signedValidOrder };
144+
// intentionally invalidate (otherwise valid) signature
145+
invalidSignedOrder.signature.r =
146+
'0xe071f804c045fa2065c188151192ce1239ec03c2252ffebb2ef57fa72ecad822';
147+
148+
const testMetadata = { testData: 'unit-test' };
149+
150+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
151+
invalidSignedOrder,
152+
ROPSTEN_CHAIN_ID.toString(10),
153+
testMetadata
154+
);
155+
try {
156+
await postOrderPromiseThatShouldFail;
157+
expect('this line to never be hit').toBeFalsy();
158+
} catch (e) {
159+
expect(e).toEqual({
160+
errorCode: 'INVALID_ORDER_SIGNATURE',
161+
errorMessage: 'Signature on signed order is invalid',
162+
});
163+
}
164+
});
165+
166+
it('v4 orderbook rejects invalid order (order expired)', async () => {
167+
// NOTE(johnrjj) - Assumes USDC and DAI are already approved w/ the ExchangeProxy
168+
const expiredOrder = nftSwapperMaker.buildOrder(
169+
// Has 'invalid' erc721 token address
170+
MAKER_ASSET,
171+
TAKER_ASSET,
172+
MAKER_WALLET_ADDRESS,
173+
{
174+
// Make expire yesterday
175+
expiry: getUnixTime(sub(new Date(), { days: 1 })),
176+
}
177+
);
178+
179+
const signedExpiredOrder = await nftSwapperMaker.signOrder(expiredOrder);
180+
181+
const testMetadata = { testData: 'unit-test' };
182+
183+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
184+
signedExpiredOrder,
185+
ROPSTEN_CHAIN_ID.toString(10),
186+
testMetadata
187+
);
188+
try {
189+
await postOrderPromiseThatShouldFail;
190+
expect('this line to never be hit').toBeFalsy();
191+
} catch (e: any) {
192+
expect(e.errorCode).toBe('ORDER_EXPIRED');
193+
}
194+
});
93195
});

0 commit comments

Comments
 (0)