Skip to content

Commit df267e2

Browse files
authored
Merge pull request #53 from trader-xyz/tests/invalid-order-tests
Adds unit tests for invalid orders attempting to post to orderbook
2 parents 284db99 + 6c3c6d6 commit df267e2

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

test/v4/orderbook.test.ts

Lines changed: 94 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,96 @@ 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+
const invalidOrder = nftSwapperMaker.buildOrder(
98+
// Has 'invalid' erc721 token address
99+
{
100+
...MAKER_ASSET,
101+
tokenAddress: '0x5Af0D9827E0c53E4799BB226655A1de152A425a5',
102+
},
103+
TAKER_ASSET,
104+
MAKER_WALLET_ADDRESS
105+
);
106+
107+
const invalidSignedOrder = await nftSwapperMaker.signOrder(invalidOrder);
108+
109+
const testMetadata = { testData: 'unit-test' };
110+
111+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
112+
invalidSignedOrder,
113+
ROPSTEN_CHAIN_ID.toString(10),
114+
testMetadata
115+
);
116+
try {
117+
await postOrderPromiseThatShouldFail;
118+
expect('this line to never be hit').toBeFalsy();
119+
} catch (e) {
120+
expect(e).toEqual({
121+
errorCode: 'ERROR_FETCHING_ORDER_DATA',
122+
errorMessage:
123+
'Error looking up maker balance and approval data. Order may be using incorrect/bad token 0x5af0d9827e0c53e4799bb226655a1de152a425a5, chainId: 3.',
124+
});
125+
}
126+
});
127+
128+
it('v4 orderbook rejects invalid order (signature invalid)', async () => {
129+
const validOrder = nftSwapperMaker.buildOrder(
130+
MAKER_ASSET,
131+
TAKER_ASSET,
132+
MAKER_WALLET_ADDRESS
133+
);
134+
135+
const signedValidOrder = await nftSwapperMaker.signOrder(validOrder);
136+
137+
const invalidSignedOrder = { ...signedValidOrder };
138+
// intentionally invalidate (otherwise valid) signature
139+
invalidSignedOrder.signature.r =
140+
'0xe071f804c045fa2065c188151192ce1239ec03c2252ffebb2ef57fa72ecad822';
141+
142+
const testMetadata = { testData: 'unit-test' };
143+
144+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
145+
invalidSignedOrder,
146+
ROPSTEN_CHAIN_ID.toString(10),
147+
testMetadata
148+
);
149+
try {
150+
await postOrderPromiseThatShouldFail;
151+
expect('this line to never be hit').toBeFalsy();
152+
} catch (e) {
153+
expect(e).toEqual({
154+
errorCode: 'INVALID_ORDER_SIGNATURE',
155+
errorMessage: 'Signature on signed order is invalid',
156+
});
157+
}
158+
});
159+
160+
it('v4 orderbook rejects invalid order (order expired)', async () => {
161+
const expiredOrder = nftSwapperMaker.buildOrder(
162+
MAKER_ASSET,
163+
TAKER_ASSET,
164+
MAKER_WALLET_ADDRESS,
165+
{
166+
// Make order expire yesterday
167+
expiry: getUnixTime(sub(new Date(), { days: 1 })),
168+
}
169+
);
170+
171+
const signedExpiredOrder = await nftSwapperMaker.signOrder(expiredOrder);
172+
173+
const testMetadata = { testData: 'unit-test' };
174+
175+
const postOrderPromiseThatShouldFail = nftSwapperMaker.postOrder(
176+
signedExpiredOrder,
177+
ROPSTEN_CHAIN_ID.toString(10),
178+
testMetadata
179+
);
180+
try {
181+
await postOrderPromiseThatShouldFail;
182+
expect('this line to never be hit').toBeFalsy();
183+
} catch (e: any) {
184+
expect(e.errorCode).toBe('ORDER_EXPIRED');
185+
}
186+
});
93187
});

0 commit comments

Comments
 (0)