diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2018-08-24 01:52:09 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2018-08-24 01:52:09 +0800 |
commit | 7ad1a18a4aaa3da23fc013c55babea286a505f9d (patch) | |
tree | ae0e8267091b45dcdf661ec8cd76ce7699a82364 /packages/connect/test | |
parent | 572ad4615a3a0fa5649549cbd65eb912ea7a0e92 (diff) | |
parent | b013cf2e145825a9e250c61bc77825384b2af69e (diff) | |
download | dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar.gz dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar.bz2 dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar.lz dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar.xz dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.tar.zst dexon-sol-tools-7ad1a18a4aaa3da23fc013c55babea286a505f9d.zip |
Merge branch 'development' into feature/forwarder-helper/init
* development: (31 commits)
Update CI config to check development instead of v2-prototype branch
fix: Make non-interactive npm login for publish tests more robust
Run prettier
Remove comment in updates json-schemas doc
Add documentation for json-schemas
Fix typo
Remove artifacts
Update variable names, make release candidate
Update more names in docs
Improve documentation
Pin sra-report to 0xproject/connect v1.0.4
Run prettier
lint everything
Update websocket for SRA v2
Remove default query parameters
Add networkId request param option
Rename websocket files and types
Use uuid as string for requestId
Update changelogs
Add fee recipients test
...
Diffstat (limited to 'packages/connect/test')
27 files changed, 518 insertions, 483 deletions
diff --git a/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.json b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.json new file mode 100644 index 000000000..603e9f67e --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.json @@ -0,0 +1,21 @@ +{ + "total": 43, + "page": 1, + "perPage": 100, + "records": [ + { + "assetDataA": { + "minAmount": "0", + "maxAmount": "10000000000000000000", + "precision": 5, + "assetData": "0xf47261b04c32345ced77393b3530b1eed0f346429d" + }, + "assetDataB": { + "minAmount": "0", + "maxAmount": "50000000000000000000", + "precision": 5, + "assetData": "0x0257179264389b814a946f3e92105513705ca6b990" + } + } + ] +} diff --git a/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts new file mode 100644 index 000000000..5ce703317 --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/asset_pairs.ts @@ -0,0 +1,25 @@ +import { BigNumber } from '@0xproject/utils'; + +import { AssetPairsResponse } from '../../../src/types'; + +export const assetDataPairsResponse: AssetPairsResponse = { + total: 43, + page: 1, + perPage: 100, + records: [ + { + assetDataA: { + minAmount: new BigNumber('0'), + maxAmount: new BigNumber('10000000000000000000'), + precision: 5, + assetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + }, + assetDataB: { + minAmount: new BigNumber('0'), + maxAmount: new BigNumber('50000000000000000000'), + precision: 5, + assetData: '0x0257179264389b814a946f3e92105513705ca6b990', + }, + }, + ], +}; diff --git a/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.json b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.json new file mode 100644 index 000000000..b1d570b03 --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.json @@ -0,0 +1,10 @@ +{ + "total": 3, + "page": 1, + "perPage": 10, + "records": [ + "0x6ec92694ea172ebc430c30fa31de87620967a082", + "0x9e56625509c2f60af937f23b7b532600390e8c8b", + "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32" + ] +} diff --git a/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts new file mode 100644 index 000000000..e17ffe7a8 --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/fee_recipients.ts @@ -0,0 +1,12 @@ +import { FeeRecipientsResponse } from '../../../src/types'; + +export const feeRecipientsResponse: FeeRecipientsResponse = { + total: 3, + page: 1, + perPage: 10, + records: [ + '0x6ec92694ea172ebc430c30fa31de87620967a082', + '0x9e56625509c2f60af937f23b7b532600390e8c8b', + '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + ], +}; diff --git a/packages/connect/test/fixtures/standard_relayer_api/fees.json b/packages/connect/test/fixtures/standard_relayer_api/fees.json deleted file mode 100644 index 483a74254..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/fees.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "feeRecipient": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "makerFee": "10000000000000000", - "takerFee": "30000000000000000" -} diff --git a/packages/connect/test/fixtures/standard_relayer_api/fees.ts b/packages/connect/test/fixtures/standard_relayer_api/fees.ts deleted file mode 100644 index fecbaacff..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/fees.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { BigNumber } from '@0xproject/utils'; - -import { FeesResponse } from '../../../src/types'; - -export const feesResponse: FeesResponse = { - feeRecipient: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - makerFee: new BigNumber('10000000000000000'), - takerFee: new BigNumber('30000000000000000'), -}; diff --git a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json index e84954b0d..8d2cdd8ed 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json +++ b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json @@ -1,19 +1,19 @@ { - "maker": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", - "makerFee": "100000000000000", - "takerFee": "200000000000000", - "makerTokenAmount": "10000000000000000", - "takerTokenAmount": "20000000000000000", - "makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990", - "salt": "256", - "feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da", - "exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093", - "expirationUnixTimestampSec": "42", - "ecSignature": { - "v": 27, - "r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33", - "s": "0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254" - } + "order": { + "makerAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b", + "takerAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "feeRecipientAddress": "0xb046140686d052fff581f63f8136cce132e857da", + "senderAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "makerAssetAmount": "10000000000000000", + "takerAssetAmount": "20000000000000000", + "makerFee": "100000000000000", + "takerFee": "200000000000000", + "expirationTimeSeconds": "1532560590", + "salt": "1532559225", + "makerAssetData": "0xf47261b04c32345ced77393b3530b1eed0f346429d", + "takerAssetData": "0x0257179264389b814a946f3e92105513705ca6b990", + "exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093", + "signature": "0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33" + }, + "metaData": {} } diff --git a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts index 5a03a2ff6..c8a669b3b 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.ts @@ -1,21 +1,21 @@ import { BigNumber } from '@0xproject/utils'; export const orderResponse = { - maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', - makerFee: new BigNumber('100000000000000'), - takerFee: new BigNumber('200000000000000'), - makerTokenAmount: new BigNumber('10000000000000000'), - takerTokenAmount: new BigNumber('20000000000000000'), - makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - salt: new BigNumber('256'), - feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da', - exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093', - expirationUnixTimestampSec: new BigNumber('42'), - ecSignature: { - v: 27, - r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', - s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', + order: { + makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', + takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da', + senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + makerAssetAmount: new BigNumber('10000000000000000'), + takerAssetAmount: new BigNumber('20000000000000000'), + makerFee: new BigNumber('100000000000000'), + takerFee: new BigNumber('200000000000000'), + expirationTimeSeconds: new BigNumber('1532560590'), + salt: new BigNumber('1532559225'), + makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990', + exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', + signature: '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', }, + metaData: {}, }; diff --git a/packages/connect/test/fixtures/standard_relayer_api/order_config.json b/packages/connect/test/fixtures/standard_relayer_api/order_config.json new file mode 100644 index 000000000..39da91e6d --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/order_config.json @@ -0,0 +1,6 @@ +{ + "senderAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "feeRecipientAddress": "0xb046140686d052fff581f63f8136cce132e857da", + "makerFee": "100000000000000", + "takerFee": "200000000000000" +} diff --git a/packages/connect/test/fixtures/standard_relayer_api/order_config.ts b/packages/connect/test/fixtures/standard_relayer_api/order_config.ts new file mode 100644 index 000000000..36f01a009 --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/order_config.ts @@ -0,0 +1,10 @@ +import { BigNumber } from '@0xproject/utils'; + +import { OrderConfigResponse } from '../../../src/types'; + +export const orderConfigResponse: OrderConfigResponse = { + senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da', + makerFee: new BigNumber('100000000000000'), + takerFee: new BigNumber('200000000000000'), +}; diff --git a/packages/connect/test/fixtures/standard_relayer_api/orderbook.json b/packages/connect/test/fixtures/standard_relayer_api/orderbook.json index 825be34c2..5206c2217 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orderbook.json +++ b/packages/connect/test/fixtures/standard_relayer_api/orderbook.json @@ -1,44 +1,54 @@ { - "bids": [ - { - "maker": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", - "makerFee": "100000000000000", - "takerFee": "200000000000000", - "makerTokenAmount": "10000000000000000", - "takerTokenAmount": "20000000000000000", - "makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990", - "salt": "256", - "feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da", - "exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093", - "expirationUnixTimestampSec": "42", - "ecSignature": { - "v": 27, - "r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33", - "s": "0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254" + "bids": { + "total": 325, + "page": 2, + "perPage": 100, + "records": [ + { + "order": { + "makerAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b", + "takerAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "feeRecipientAddress": "0xb046140686d052fff581f63f8136cce132e857da", + "senderAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "makerAssetAmount": "10000000000000000", + "takerAssetAmount": "20000000000000000", + "makerFee": "100000000000000", + "takerFee": "200000000000000", + "expirationTimeSeconds": "1532560590", + "salt": "1532559225", + "makerAssetData": "0xf47261b04c32345ced77393b3530b1eed0f346429d", + "takerAssetData": "0x0257179264389b814a946f3e92105513705ca6b990", + "exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093", + "signature": "0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33" + }, + "metaData": {} } - } - ], - "asks": [ - { - "maker": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", - "makerFee": "100000000000000", - "takerFee": "200000000000000", - "makerTokenAmount": "10000000000000000", - "takerTokenAmount": "20000000000000000", - "makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990", - "salt": "256", - "feeRecipient": "0xb046140686d052fff581f63f8136cce132e857da", - "exchangeContractAddress": "0x12459c951127e0c374ff9105dda097662a027093", - "expirationUnixTimestampSec": "42", - "ecSignature": { - "v": 27, - "r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33", - "s": "0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254" + ] + }, + "asks": { + "total": 500, + "page": 2, + "perPage": 100, + "records": [ + { + "order": { + "makerAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "takerAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b", + "feeRecipientAddress": "0xb046140686d052fff581f63f8136cce132e857da", + "senderAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "makerAssetAmount": "20000000000000000", + "takerAssetAmount": "10000000000000000", + "makerFee": "200000000000000", + "takerFee": "100000000000000", + "expirationTimeSeconds": "1532560590", + "salt": "1532559225", + "makerAssetData": "0x0257179264389b814a946f3e92105513705ca6b990", + "takerAssetData": "0xf47261b04c32345ced77393b3530b1eed0f346429d", + "exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093", + "signature": "0x013842a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b3518891" + }, + "metaData": {} } - } - ] + ] + } } diff --git a/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts b/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts index 6684ac2e5..d5f39a51f 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/orderbook.ts @@ -1,46 +1,58 @@ import { BigNumber } from '@0xproject/utils'; -export const orderbookResponse = { - bids: [ - { - maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', - makerFee: new BigNumber('100000000000000'), - takerFee: new BigNumber('200000000000000'), - makerTokenAmount: new BigNumber('10000000000000000'), - takerTokenAmount: new BigNumber('20000000000000000'), - makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - salt: new BigNumber('256'), - feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da', - exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093', - expirationUnixTimestampSec: new BigNumber('42'), - ecSignature: { - v: 27, - r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', - s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', +import { OrderbookResponse } from '../../../src/types'; + +export const orderbookResponse: OrderbookResponse = { + bids: { + total: 325, + page: 2, + perPage: 100, + records: [ + { + order: { + makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', + takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da', + senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + makerAssetAmount: new BigNumber('10000000000000000'), + takerAssetAmount: new BigNumber('20000000000000000'), + makerFee: new BigNumber('100000000000000'), + takerFee: new BigNumber('200000000000000'), + expirationTimeSeconds: new BigNumber('1532560590'), + salt: new BigNumber('1532559225'), + makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990', + exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', + signature: '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', + }, + metaData: {}, }, - }, - ], - asks: [ - { - maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', - makerFee: new BigNumber('100000000000000'), - takerFee: new BigNumber('200000000000000'), - makerTokenAmount: new BigNumber('10000000000000000'), - takerTokenAmount: new BigNumber('20000000000000000'), - makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - salt: new BigNumber('256'), - feeRecipient: '0xb046140686d052fff581f63f8136cce132e857da', - exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093', - expirationUnixTimestampSec: new BigNumber('42'), - ecSignature: { - v: 27, - r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', - s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', + ], + }, + asks: { + total: 500, + page: 2, + perPage: 100, + records: [ + { + order: { + makerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + takerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', + feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da', + senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + makerAssetAmount: new BigNumber('20000000000000000'), + takerAssetAmount: new BigNumber('10000000000000000'), + makerFee: new BigNumber('200000000000000'), + takerFee: new BigNumber('100000000000000'), + expirationTimeSeconds: new BigNumber('1532560590'), + salt: new BigNumber('1532559225'), + makerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990', + takerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', + signature: '0x013842a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b3518891', + }, + metaData: {}, }, - }, - ], + ], + }, }; diff --git a/packages/connect/test/fixtures/standard_relayer_api/orders.json b/packages/connect/test/fixtures/standard_relayer_api/orders.json index cfa780dc4..683612071 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orders.json +++ b/packages/connect/test/fixtures/standard_relayer_api/orders.json @@ -1,21 +1,26 @@ -[ - { - "maker": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "taker": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", - "makerFee": "100000000000000", - "takerFee": "200000000000000", - "makerTokenAmount": "10000000000000000", - "takerTokenAmount": "20000000000000000", - "makerTokenAddress": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "takerTokenAddress": "0xef7fff64389b814a946f3e92105513705ca6b990", - "salt": "256", - "feeRecipient": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "exchangeContractAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b", - "expirationUnixTimestampSec": "42", - "ecSignature": { - "v": 27, - "r": "0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33", - "s": "0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254" +{ + "total": 984, + "page": 1, + "perPage": 100, + "records": [ + { + "order": { + "makerAddress": "0x9e56625509c2f60af937f23b7b532600390e8c8b", + "takerAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "feeRecipientAddress": "0xb046140686d052fff581f63f8136cce132e857da", + "senderAddress": "0xa2b31dacf30a9c50ca473337c01d8a201ae33e32", + "makerAssetAmount": "10000000000000000", + "takerAssetAmount": "20000000000000000", + "makerFee": "100000000000000", + "takerFee": "200000000000000", + "expirationTimeSeconds": "1532560590", + "salt": "1532559225", + "makerAssetData": "0xf47261b04c32345ced77393b3530b1eed0f346429d", + "takerAssetData": "0x0257179264389b814a946f3e92105513705ca6b990", + "exchangeAddress": "0x12459c951127e0c374ff9105dda097662a027093", + "signature": "0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33" + }, + "metaData": {} } - } -] + ] +} diff --git a/packages/connect/test/fixtures/standard_relayer_api/orders.ts b/packages/connect/test/fixtures/standard_relayer_api/orders.ts index 5044777bd..01f8974b8 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/orders.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/orders.ts @@ -1,23 +1,30 @@ import { BigNumber } from '@0xproject/utils'; -export const ordersResponse = [ - { - maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', - makerFee: new BigNumber('100000000000000'), - takerFee: new BigNumber('200000000000000'), - makerTokenAmount: new BigNumber('10000000000000000'), - takerTokenAmount: new BigNumber('20000000000000000'), - makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - salt: new BigNumber('256'), - feeRecipient: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - exchangeContractAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - expirationUnixTimestampSec: new BigNumber('42'), - ecSignature: { - v: 27, - r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', - s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', +import { OrdersResponse } from '../../../src/types'; + +export const ordersResponse: OrdersResponse = { + total: 984, + page: 1, + perPage: 100, + records: [ + { + order: { + makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', + takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + feeRecipientAddress: '0xb046140686d052fff581f63f8136cce132e857da', + senderAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + makerAssetAmount: new BigNumber('10000000000000000'), + takerAssetAmount: new BigNumber('20000000000000000'), + makerFee: new BigNumber('100000000000000'), + takerFee: new BigNumber('200000000000000'), + expirationTimeSeconds: new BigNumber('1532560590'), + salt: new BigNumber('1532559225'), + makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990', + exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', + signature: '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', + }, + metaData: {}, }, - }, -]; + ], +}; diff --git a/packages/connect/test/fixtures/standard_relayer_api/snapshot_orderbook_channel_message.ts b/packages/connect/test/fixtures/standard_relayer_api/snapshot_orderbook_channel_message.ts deleted file mode 100644 index 1d7e67055..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/snapshot_orderbook_channel_message.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as orderbookJSON from './orderbook.json'; - -const orderbookJsonString = JSON.stringify(orderbookJSON); - -export const snapshotOrderbookChannelMessage = `{ - "type": "snapshot", - "channel": "orderbook", - "requestId": 1, - "payload": ${orderbookJsonString} -}`; - -export const malformedSnapshotOrderbookChannelMessage = `{ - "type": "snapshot", - "channel": "orderbook", - "requestId": 1, - "payload": {} -}`; diff --git a/packages/connect/test/fixtures/standard_relayer_api/token_pairs.json b/packages/connect/test/fixtures/standard_relayer_api/token_pairs.json deleted file mode 100644 index 90f57a974..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/token_pairs.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "tokenA": { - "address": "0x323b5d4c32345ced77393b3530b1eed0f346429d", - "minAmount": "0", - "maxAmount": "10000000000000000000", - "precision": 5 - }, - "tokenB": { - "address": "0xef7fff64389b814a946f3e92105513705ca6b990", - "minAmount": "0", - "maxAmount": "50000000000000000000", - "precision": 5 - } - } -] diff --git a/packages/connect/test/fixtures/standard_relayer_api/token_pairs.ts b/packages/connect/test/fixtures/standard_relayer_api/token_pairs.ts deleted file mode 100644 index f48b1e877..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/token_pairs.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BigNumber } from '@0xproject/utils'; - -import { TokenPairsItem } from '../../../src/types'; - -export const tokenPairsResponse: TokenPairsItem[] = [ - { - tokenA: { - address: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - minAmount: new BigNumber(0), - maxAmount: new BigNumber('10000000000000000000'), - precision: 5, - }, - tokenB: { - address: '0xef7fff64389b814a946f3e92105513705ca6b990', - minAmount: new BigNumber(0), - maxAmount: new BigNumber('50000000000000000000'), - precision: 5, - }, - }, -]; diff --git a/packages/connect/test/fixtures/standard_relayer_api/unknown_orderbook_channel_message.ts b/packages/connect/test/fixtures/standard_relayer_api/unknown_orders_channel_message.ts index cbedff60e..b6c0cd50c 100644 --- a/packages/connect/test/fixtures/standard_relayer_api/unknown_orderbook_channel_message.ts +++ b/packages/connect/test/fixtures/standard_relayer_api/unknown_orders_channel_message.ts @@ -2,9 +2,9 @@ import * as orderResponseJSON from './order/0xabc67323774bdbd24d94f977fa9ac94a50 const orderJSONString = JSON.stringify(orderResponseJSON); -export const unknownOrderbookChannelMessage = `{ +export const unknownOrdersChannelMessage = `{ "type": "superGoodUpdate", "channel": "orderbook", - "requestId": 1, - "payload": ${orderJSONString} + "requestId": "6ce8c5a6-5c46-4027-a44a-51831c77b8a1", + "payload": [${orderJSONString}] }`; diff --git a/packages/connect/test/fixtures/standard_relayer_api/update_orderbook_channel_message.ts b/packages/connect/test/fixtures/standard_relayer_api/update_orderbook_channel_message.ts deleted file mode 100644 index 0e2c7523b..000000000 --- a/packages/connect/test/fixtures/standard_relayer_api/update_orderbook_channel_message.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as orderResponseJSON from './order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json'; - -const orderJSONString = JSON.stringify(orderResponseJSON); - -export const updateOrderbookChannelMessage = `{ - "type": "update", - "channel": "orderbook", - "requestId": 1, - "payload": ${orderJSONString} -}`; - -export const malformedUpdateOrderbookChannelMessage = `{ - "type": "update", - "channel": "orderbook", - "requestId": 1, - "payload": {} -}`; diff --git a/packages/connect/test/fixtures/standard_relayer_api/update_orders_channel_message.ts b/packages/connect/test/fixtures/standard_relayer_api/update_orders_channel_message.ts new file mode 100644 index 000000000..c18a2c789 --- /dev/null +++ b/packages/connect/test/fixtures/standard_relayer_api/update_orders_channel_message.ts @@ -0,0 +1,17 @@ +import * as apiOrderJSON from './order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json'; + +const apiOrderJSONString = JSON.stringify(apiOrderJSON); + +export const updateOrdersChannelMessage = `{ + "type": "update", + "channel": "orders", + "requestId": "5a1ce3a2-22b9-41e6-a615-68077512e9e2", + "payload": [${apiOrderJSONString}] +}`; + +export const malformedUpdateOrdersChannelMessage = `{ + "type": "update", + "channel": "orders", + "requestId": "4d8efcee-adde-4475-9601-f0b30962ca2b", + "payload": {} +}`; diff --git a/packages/connect/test/http_client_test.ts b/packages/connect/test/http_client_test.ts index 311dc96e6..5b564e97b 100644 --- a/packages/connect/test/http_client_test.ts +++ b/packages/connect/test/http_client_test.ts @@ -1,4 +1,3 @@ -import { BigNumber } from '@0xproject/utils'; import * as chai from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; import * as dirtyChai from 'dirty-chai'; @@ -7,16 +6,18 @@ import 'mocha'; import { HttpClient } from '../src/index'; -import { feesResponse } from './fixtures/standard_relayer_api/fees'; -import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json'; +import { assetDataPairsResponse } from './fixtures/standard_relayer_api/asset_pairs'; +import * as assetDataPairsResponseJSON from './fixtures/standard_relayer_api/asset_pairs.json'; +import { feeRecipientsResponse } from './fixtures/standard_relayer_api/fee_recipients'; +import * as feeRecipientsResponseJSON from './fixtures/standard_relayer_api/fee_recipients.json'; import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f'; import * as orderResponseJSON from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f.json'; +import { orderConfigResponse } from './fixtures/standard_relayer_api/order_config'; +import * as orderConfigResponseJSON from './fixtures/standard_relayer_api/order_config.json'; import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook'; import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json'; import { ordersResponse } from './fixtures/standard_relayer_api/orders'; import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json'; -import { tokenPairsResponse } from './fixtures/standard_relayer_api/token_pairs'; -import * as tokenPairsResponseJSON from './fixtures/standard_relayer_api/token_pairs.json'; chai.config.includeStack = true; chai.use(dirtyChai); @@ -26,7 +27,7 @@ const expect = chai.expect; describe('HttpClient', () => { const relayUrl = 'https://example.com'; const relayerClient = new HttpClient(relayUrl); - afterEach(() => { + beforeEach(() => { fetchMock.restore(); }); describe('#constructor', () => { @@ -38,47 +39,47 @@ describe('HttpClient', () => { expect(sanitizedUrl).to.be.deep.equal(urlWithoutTrailingSlash); }); }); - describe('#getTokenPairsAsync', () => { - const url = `${relayUrl}/token_pairs`; - it('gets token pairs with default options when none are provided', async () => { - const urlWithQuery = `${url}?page=1&per_page=100`; - fetchMock.get(urlWithQuery, tokenPairsResponseJSON); - const tokenPairs = await relayerClient.getTokenPairsAsync(); - expect(tokenPairs).to.be.deep.equal(tokenPairsResponse); - }); - it('gets token pairs with specified request options', async () => { - const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d'; - const tokenPairsRequestOpts = { - tokenA: tokenAddress, + describe('#getAssetPairsAsync', () => { + const url = `${relayUrl}/asset_pairs`; + it('gets assetData pairs with default options when none are provided', async () => { + fetchMock.get(url, assetDataPairsResponseJSON); + const assetDataPairs = await relayerClient.getAssetPairsAsync(); + expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse); + }); + it('gets assetData pairs with specified request options', async () => { + const assetData = '0xf47261b04c32345ced77393b3530b1eed0f346429d'; + const assetPairsRequestOpts = { + assetDataA: assetData, page: 3, perPage: 50, + networkdId: 42, }; - const urlWithQuery = `${url}?page=3&per_page=50&tokenA=${tokenAddress}`; - fetchMock.get(urlWithQuery, tokenPairsResponseJSON); - const tokenPairs = await relayerClient.getTokenPairsAsync(tokenPairsRequestOpts); - expect(tokenPairs).to.be.deep.equal(tokenPairsResponse); + const urlWithQuery = `${url}?assetDataA=${assetData}&networkdId=42&page=3&perPage=50`; + fetchMock.get(urlWithQuery, assetDataPairsResponseJSON); + const assetDataPairs = await relayerClient.getAssetPairsAsync(assetPairsRequestOpts); + expect(assetDataPairs).to.be.deep.equal(assetDataPairsResponse); }); it('throws an error for invalid JSON response', async () => { fetchMock.get(url, { test: 'dummy' }); - expect(relayerClient.getTokenPairsAsync()).to.be.rejected(); + expect(relayerClient.getAssetPairsAsync()).to.be.rejected(); }); }); describe('#getOrdersAsync', () => { const url = `${relayUrl}/orders`; it('gets orders with default options when none are provided', async () => { - const urlWithQuery = `${url}?page=1&per_page=100`; - fetchMock.get(urlWithQuery, ordersResponseJSON); + fetchMock.get(url, ordersResponseJSON); const orders = await relayerClient.getOrdersAsync(); expect(orders).to.be.deep.equal(ordersResponse); }); it('gets orders with specified request options', async () => { - const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d'; + const assetDataAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d'; const ordersRequest = { - tokenAddress, + assetDataAddress, page: 3, perPage: 50, + networkdId: 42, }; - const urlWithQuery = `${url}?page=3&per_page=50&tokenAddress=${tokenAddress}`; + const urlWithQuery = `${url}?assetDataAddress=${assetDataAddress}&networkdId=42&page=3&perPage=50`; fetchMock.get(urlWithQuery, ordersResponseJSON); const orders = await relayerClient.getOrdersAsync(ordersRequest); expect(orders).to.be.deep.equal(ordersResponse); @@ -103,26 +104,27 @@ describe('HttpClient', () => { }); describe('#getOrderBookAsync', () => { const request = { - baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + baseAssetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', + quoteAssetData: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', }; const url = `${relayUrl}/orderbook`; it('gets orderbook with default page options when none are provided', async () => { - const urlWithQuery = `${url}?baseTokenAddress=${ - request.baseTokenAddress - }&page=1&per_page=100"eTokenAddress=${request.quoteTokenAddress}`; + const urlWithQuery = `${url}?baseAssetData=${request.baseAssetData}"eAssetData=${ + request.quoteAssetData + }`; fetchMock.get(urlWithQuery, orderbookJSON); const orderbook = await relayerClient.getOrderbookAsync(request); expect(orderbook).to.be.deep.equal(orderbookResponse); }); it('gets orderbook with specified page options', async () => { - const urlWithQuery = `${url}?baseTokenAddress=${ - request.baseTokenAddress - }&page=3&per_page=50"eTokenAddress=${request.quoteTokenAddress}`; + const urlWithQuery = `${url}?baseAssetData=${ + request.baseAssetData + }&networkId=42&page=3&perPage=50"eAssetData=${request.quoteAssetData}`; fetchMock.get(urlWithQuery, orderbookJSON); const pagedRequestOptions = { page: 3, perPage: 50, + networkId: 42, }; const orderbook = await relayerClient.getOrderbookAsync(request, pagedRequestOptions); expect(orderbook).to.be.deep.equal(orderbookResponse); @@ -132,39 +134,59 @@ describe('HttpClient', () => { expect(relayerClient.getOrderbookAsync(request)).to.be.rejected(); }); }); - describe('#getFeesAsync', () => { + describe('#getOrderConfigAsync', () => { const request = { - exchangeContractAddress: '0x12459c951127e0c374ff9105dda097662a027093', - maker: '0x9e56625509c2f60af937f23b7b532600390e8c8b', - taker: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', - makerTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - takerTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - makerTokenAmount: new BigNumber('10000000000000000000'), - takerTokenAmount: new BigNumber('30000000000000000000'), - salt: new BigNumber('256'), - expirationUnixTimestampSec: new BigNumber('42'), + makerAddress: '0x9e56625509c2f60af937f23b7b532600390e8c8b', + takerAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32', + makerAssetAmount: '10000000000000000', + takerAssetAmount: '20000000000000000', + expirationTimeSeconds: '1532560590', + makerAssetData: '0xf47261b04c32345ced77393b3530b1eed0f346429d', + takerAssetData: '0x0257179264389b814a946f3e92105513705ca6b990', + exchangeAddress: '0x12459c951127e0c374ff9105dda097662a027093', }; - const url = `${relayUrl}/fees`; - it('gets fees', async () => { - fetchMock.post(url, feesResponseJSON); - const fees = await relayerClient.getFeesAsync(request); - expect(fees).to.be.deep.equal(feesResponse); + const url = `${relayUrl}/order_config`; + it('gets order config', async () => { + fetchMock.post(url, orderConfigResponseJSON); + const fees = await relayerClient.getOrderConfigAsync(request); + expect(fees).to.be.deep.equal(orderConfigResponse); }); it('does not mutate input', async () => { - fetchMock.post(url, feesResponseJSON); - const makerTokenAmountBefore = new BigNumber(request.makerTokenAmount); - const takerTokenAmountBefore = new BigNumber(request.takerTokenAmount); - const saltBefore = new BigNumber(request.salt); - const expirationUnixTimestampSecBefore = new BigNumber(request.expirationUnixTimestampSec); - await relayerClient.getFeesAsync(request); - expect(makerTokenAmountBefore).to.be.deep.equal(request.makerTokenAmount); - expect(takerTokenAmountBefore).to.be.deep.equal(request.takerTokenAmount); - expect(saltBefore).to.be.deep.equal(request.salt); - expect(expirationUnixTimestampSecBefore).to.be.deep.equal(request.expirationUnixTimestampSec); + fetchMock.post(url, orderConfigResponseJSON); + const makerAssetAmountBefore = request.makerAssetAmount; + const takerAssetAmountBefore = request.takerAssetAmount; + const expirationTimeSecondsBefore = request.expirationTimeSeconds; + await relayerClient.getOrderConfigAsync(request); + expect(makerAssetAmountBefore).to.be.deep.equal(request.makerAssetAmount); + expect(takerAssetAmountBefore).to.be.deep.equal(request.takerAssetAmount); + expect(expirationTimeSecondsBefore).to.be.deep.equal(request.expirationTimeSeconds); }); it('throws an error for invalid JSON response', async () => { fetchMock.post(url, { test: 'dummy' }); - expect(relayerClient.getFeesAsync(request)).to.be.rejected(); + expect(relayerClient.getOrderConfigAsync(request)).to.be.rejected(); + }); + }); + describe('#getFeeRecipientsAsync', () => { + const url = `${relayUrl}/fee_recipients`; + it('gets fee recipients with default page options when none are provided', async () => { + fetchMock.get(url, feeRecipientsResponseJSON); + const feeRecipients = await relayerClient.getFeeRecipientsAsync(); + expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse); + }); + it('gets fee recipient with specified page options', async () => { + const urlWithQuery = `${url}?networkId=42&page=3&perPage=50`; + fetchMock.get(urlWithQuery, feeRecipientsResponseJSON); + const pagedRequestOptions = { + page: 3, + perPage: 50, + networkId: 42, + }; + const feeRecipients = await relayerClient.getFeeRecipientsAsync(pagedRequestOptions); + expect(feeRecipients).to.be.deep.equal(feeRecipientsResponse); + }); + it('throws an error for invalid JSON response', async () => { + fetchMock.get(url, { test: 'dummy' }); + expect(relayerClient.getFeeRecipientsAsync()).to.be.rejected(); }); }); }); diff --git a/packages/connect/test/orderbook_channel_factory_test.ts b/packages/connect/test/orderbook_channel_factory_test.ts deleted file mode 100644 index 2ce361bd2..000000000 --- a/packages/connect/test/orderbook_channel_factory_test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import * as chai from 'chai'; -import * as dirtyChai from 'dirty-chai'; -import * as _ from 'lodash'; -import 'mocha'; - -import { orderbookChannelFactory } from '../src/orderbook_channel_factory'; - -chai.config.includeStack = true; -chai.use(dirtyChai); -const expect = chai.expect; -const emptyOrderbookChannelHandler = { - onSnapshot: () => { - _.noop(); - }, - onUpdate: () => { - _.noop(); - }, - onError: () => { - _.noop(); - }, - onClose: () => { - _.noop(); - }, -}; - -describe('orderbookChannelFactory', () => { - const websocketUrl = 'ws://localhost:8080'; - describe('#createWebSocketOrderbookChannelAsync', () => { - it('throws when input is not a url', () => { - const badUrlInput = 54; - expect( - orderbookChannelFactory.createWebSocketOrderbookChannelAsync( - badUrlInput as any, - emptyOrderbookChannelHandler, - ), - ).to.be.rejected(); - }); - it('throws when handler has the incorrect members', () => { - const badHandlerInput = {}; - expect( - orderbookChannelFactory.createWebSocketOrderbookChannelAsync(websocketUrl, badHandlerInput as any), - ).to.be.rejected(); - }); - }); -}); diff --git a/packages/connect/test/orderbook_channel_message_parsers_test.ts b/packages/connect/test/orderbook_channel_message_parsers_test.ts deleted file mode 100644 index 3e1f44384..000000000 --- a/packages/connect/test/orderbook_channel_message_parsers_test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import * as chai from 'chai'; -import * as dirtyChai from 'dirty-chai'; -import 'mocha'; - -import { orderbookChannelMessageParser } from '../src/utils/orderbook_channel_message_parser'; - -import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f'; -import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook'; -import { - malformedSnapshotOrderbookChannelMessage, - snapshotOrderbookChannelMessage, -} from './fixtures/standard_relayer_api/snapshot_orderbook_channel_message'; -import { unknownOrderbookChannelMessage } from './fixtures/standard_relayer_api/unknown_orderbook_channel_message'; -import { - malformedUpdateOrderbookChannelMessage, - updateOrderbookChannelMessage, -} from './fixtures/standard_relayer_api/update_orderbook_channel_message'; - -chai.config.includeStack = true; -chai.use(dirtyChai); -const expect = chai.expect; - -describe('orderbookChannelMessageParser', () => { - describe('#parser', () => { - it('parses snapshot messages', () => { - const snapshotMessage = orderbookChannelMessageParser.parse(snapshotOrderbookChannelMessage); - expect(snapshotMessage.type).to.be.equal('snapshot'); - expect(snapshotMessage.payload).to.be.deep.equal(orderbookResponse); - }); - it('parses update messages', () => { - const updateMessage = orderbookChannelMessageParser.parse(updateOrderbookChannelMessage); - expect(updateMessage.type).to.be.equal('update'); - expect(updateMessage.payload).to.be.deep.equal(orderResponse); - }); - it('returns unknown message for messages with unsupported types', () => { - const unknownMessage = orderbookChannelMessageParser.parse(unknownOrderbookChannelMessage); - expect(unknownMessage.type).to.be.equal('unknown'); - expect(unknownMessage.payload).to.be.undefined(); - }); - it('throws when message does not include a type', () => { - const typelessMessage = `{ - "channel": "orderbook", - "requestId": 1, - "payload": {} - }`; - const badCall = () => orderbookChannelMessageParser.parse(typelessMessage); - expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`); - }); - it('throws when type is not a string', () => { - const messageWithBadType = `{ - "type": 1, - "channel": "orderbook", - "requestId": 1, - "payload": {} - }`; - const badCall = () => orderbookChannelMessageParser.parse(messageWithBadType); - expect(badCall).throws('Expected type to be of type string, encountered: 1'); - }); - it('throws when snapshot message has malformed payload', () => { - const badCall = () => orderbookChannelMessageParser.parse(malformedSnapshotOrderbookChannelMessage); - // tslint:disable-next-line:max-line-length - const errMsg = - 'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"'; - expect(badCall).throws(errMsg); - }); - it('throws when update message has malformed payload', () => { - const badCall = () => orderbookChannelMessageParser.parse(malformedUpdateOrderbookChannelMessage); - expect(badCall).throws(/^Expected message to conform to schema/); - }); - it('throws when input message is not valid JSON', () => { - const nonJsonString = 'h93b{sdfs9fsd f'; - const badCall = () => orderbookChannelMessageParser.parse(nonJsonString); - expect(badCall).throws('Unexpected token h in JSON at position 0'); - }); - }); -}); diff --git a/packages/connect/test/orders_channel_factory_test.ts b/packages/connect/test/orders_channel_factory_test.ts new file mode 100644 index 000000000..29aa87c65 --- /dev/null +++ b/packages/connect/test/orders_channel_factory_test.ts @@ -0,0 +1,34 @@ +import * as chai from 'chai'; +import * as dirtyChai from 'dirty-chai'; +import * as _ from 'lodash'; + +import 'mocha'; + +import { ordersChannelFactory } from '../src/orders_channel_factory'; + +chai.config.includeStack = true; +chai.use(dirtyChai); +const expect = chai.expect; +const emptyOrdersChannelHandler = { + onUpdate: _.noop.bind(_), + onError: _.noop.bind(_), + onClose: _.noop.bind(_), +}; + +describe('ordersChannelFactory', () => { + const websocketUrl = 'ws://localhost:8080'; + describe('#createWebSocketOrdersChannelAsync', () => { + it('throws when input is not a url', () => { + const badUrlInput = 54; + expect( + ordersChannelFactory.createWebSocketOrdersChannelAsync(badUrlInput as any, emptyOrdersChannelHandler), + ).to.be.rejected(); + }); + it('throws when handler has the incorrect members', () => { + const badHandlerInput = {}; + expect( + ordersChannelFactory.createWebSocketOrdersChannelAsync(websocketUrl, badHandlerInput as any), + ).to.be.rejected(); + }); + }); +}); diff --git a/packages/connect/test/orders_channel_message_parsers_test.ts b/packages/connect/test/orders_channel_message_parsers_test.ts new file mode 100644 index 000000000..4d4a2d23f --- /dev/null +++ b/packages/connect/test/orders_channel_message_parsers_test.ts @@ -0,0 +1,59 @@ +import * as chai from 'chai'; +import * as dirtyChai from 'dirty-chai'; +import 'mocha'; + +import { ordersChannelMessageParser } from '../src/utils/orders_channel_message_parser'; + +import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f'; +import { unknownOrdersChannelMessage } from './fixtures/standard_relayer_api/unknown_orders_channel_message'; +import { + malformedUpdateOrdersChannelMessage, + updateOrdersChannelMessage, +} from './fixtures/standard_relayer_api/update_orders_channel_message'; + +chai.config.includeStack = true; +chai.use(dirtyChai); +const expect = chai.expect; + +describe('ordersChannelMessageParser', () => { + describe('#parser', () => { + it('parses update messages', () => { + const updateMessage = ordersChannelMessageParser.parse(updateOrdersChannelMessage); + expect(updateMessage.type).to.be.equal('update'); + expect(updateMessage.payload).to.be.deep.equal([orderResponse]); + }); + it('returns unknown message for messages with unsupported types', () => { + const unknownMessage = ordersChannelMessageParser.parse(unknownOrdersChannelMessage); + expect(unknownMessage.type).to.be.equal('unknown'); + expect(unknownMessage.payload).to.be.undefined(); + }); + it('throws when message does not include a type', () => { + const typelessMessage = `{ + "channel": "orders", + "requestId": "4d8efcee-adde-4475-9601-f0b30962ca2b", + "payload": [] + }`; + const badCall = () => ordersChannelMessageParser.parse(typelessMessage); + expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`); + }); + it('throws when type is not a string', () => { + const messageWithBadType = `{ + "type": 1, + "channel": "orders", + "requestId": "4d8efcee-adde-4475-9601-f0b30962ca2b", + "payload": [] + }`; + const badCall = () => ordersChannelMessageParser.parse(messageWithBadType); + expect(badCall).throws('Expected type to be of type string, encountered: 1'); + }); + it('throws when update message has malformed payload', () => { + const badCall = () => ordersChannelMessageParser.parse(malformedUpdateOrdersChannelMessage); + expect(badCall).throws(/^Expected message to conform to schema/); + }); + it('throws when input message is not valid JSON', () => { + const nonJsonString = 'h93b{sdfs9fsd f'; + const badCall = () => ordersChannelMessageParser.parse(nonJsonString); + expect(badCall).throws('Unexpected token h in JSON at position 0'); + }); + }); +}); diff --git a/packages/connect/test/ws_orderbook_channel_test.ts b/packages/connect/test/ws_orderbook_channel_test.ts deleted file mode 100644 index 5a63cbdcc..000000000 --- a/packages/connect/test/ws_orderbook_channel_test.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as chai from 'chai'; -import * as dirtyChai from 'dirty-chai'; -import * as _ from 'lodash'; -import 'mocha'; -import * as Sinon from 'sinon'; -import * as WebSocket from 'websocket'; - -import { WebSocketOrderbookChannel } from '../src/ws_orderbook_channel'; - -chai.config.includeStack = true; -chai.use(dirtyChai); -const expect = chai.expect; -const emptyOrderbookChannelHandler = { - onSnapshot: () => { - _.noop(); - }, - onUpdate: () => { - _.noop(); - }, - onError: () => { - _.noop(); - }, - onClose: () => { - _.noop(); - }, -}; - -describe('WebSocketOrderbookChannel', () => { - const websocketUrl = 'ws://localhost:8080'; - const openClient = new WebSocket.w3cwebsocket(websocketUrl); - Sinon.stub(openClient, 'readyState').get(() => WebSocket.w3cwebsocket.OPEN); - Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_)); - const openOrderbookChannel = new WebSocketOrderbookChannel(openClient, emptyOrderbookChannelHandler); - const subscriptionOpts = { - baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d', - quoteTokenAddress: '0xef7fff64389b814a946f3e92105513705ca6b990', - snapshot: true, - limit: 100, - }; - describe('#subscribe', () => { - it('throws when subscriptionOpts does not conform to schema', () => { - const badSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, {}); - expect(badSubscribeCall).throws( - 'Expected subscriptionOpts to conform to schema /RelayerApiOrderbookChannelSubscribePayload\nEncountered: {}\nValidation errors: instance requires property "baseTokenAddress", instance requires property "quoteTokenAddress"', - ); - }); - it('does not throw when inputs are of correct types', () => { - const goodSubscribeCall = openOrderbookChannel.subscribe.bind(openOrderbookChannel, subscriptionOpts); - expect(goodSubscribeCall).to.not.throw(); - }); - it('throws when client is closed', () => { - const closedClient = new WebSocket.w3cwebsocket(websocketUrl); - Sinon.stub(closedClient, 'readyState').get(() => WebSocket.w3cwebsocket.CLOSED); - const closedOrderbookChannel = new WebSocketOrderbookChannel(closedClient, emptyOrderbookChannelHandler); - const badSubscribeCall = closedOrderbookChannel.subscribe.bind(closedOrderbookChannel, subscriptionOpts); - expect(badSubscribeCall).throws('WebSocket connection is closed'); - }); - }); -}); diff --git a/packages/connect/test/ws_orders_channel_test.ts b/packages/connect/test/ws_orders_channel_test.ts new file mode 100644 index 000000000..df30bc41d --- /dev/null +++ b/packages/connect/test/ws_orders_channel_test.ts @@ -0,0 +1,49 @@ +import * as chai from 'chai'; +import * as dirtyChai from 'dirty-chai'; +import * as _ from 'lodash'; +import 'mocha'; +import * as Sinon from 'sinon'; +import * as WebSocket from 'websocket'; + +import { WebSocketOrdersChannel } from '../src/ws_orders_channel'; + +chai.config.includeStack = true; +chai.use(dirtyChai); +const expect = chai.expect; +const emptyOrdersChannelHandler = { + onUpdate: _.noop.bind(_), + onError: _.noop.bind(_), + onClose: _.noop.bind(_), +}; + +describe('WebSocketOrdersChannel', () => { + const websocketUrl = 'ws://localhost:8080'; + const openClient = new WebSocket.w3cwebsocket(websocketUrl); + Sinon.stub(openClient, 'readyState').get(() => WebSocket.w3cwebsocket.OPEN); + Sinon.stub(openClient, 'send').callsFake(_.noop.bind(_)); + const openOrdersChannel = new WebSocketOrdersChannel(openClient, emptyOrdersChannelHandler); + const subscriptionOpts = { + baseAssetData: '0x323b5d4c32345ced77393b3530b1eed0f346429d', + quoteAssetData: '0xef7fff64389b814a946f3e92105513705ca6b990', + limit: 100, + }; + describe('#subscribe', () => { + it('throws when subscriptionOpts does not conform to schema', () => { + const badSubscribeCall = openOrdersChannel.subscribe.bind(openOrdersChannel, { + makerAssetData: 5, + }); + expect(badSubscribeCall).throws(); + }); + it('does not throw when inputs are of correct types', () => { + const goodSubscribeCall = openOrdersChannel.subscribe.bind(openOrdersChannel, subscriptionOpts); + expect(goodSubscribeCall).to.not.throw(); + }); + it('throws when client is closed', () => { + const closedClient = new WebSocket.w3cwebsocket(websocketUrl); + Sinon.stub(closedClient, 'readyState').get(() => WebSocket.w3cwebsocket.CLOSED); + const closedOrdersChannel = new WebSocketOrdersChannel(closedClient, emptyOrdersChannelHandler); + const badSubscribeCall = closedOrdersChannel.subscribe.bind(closedOrdersChannel, subscriptionOpts); + expect(badSubscribeCall).throws('WebSocket connection is closed'); + }); + }); +}); |