ccxt-rest
Version:
Open Source Unified REST API of 100+ Crypto Exchange Sites
84 lines (71 loc) • 3.96 kB
JavaScript
const parallelTest = require('../_common/parallel-test')
const ccxt = require('ccxt')
const path = require('path')
const exchangeConfig = require('../../api/config/exchange')
const ccxtRestTestExchangeDetails = process.env.CCXTREST_TEST_EXCHANGEDETAILS
if (!ccxtRestTestExchangeDetails) {
console.log('Skipping integration tests because there\'s no CCXTREST_TEST_EXCHANGEDETAILS environment variable found')
console.log('The format of CCXTREST_TEST_EXCHANGEDETAILS is:\n' +
'{\n' +
' "<exchangeName>" : {\n' +
' "creds" : {\n' +
' "id": "(optional) <any unique identifier>",\n' +
' "apiKey": "(required) <api key to the exchange>",\n' +
' "secret": "(required) <secret of the api key to the exchange>"\n' +
' },\n' +
' "knownCurrencyPairs" : ["<list of currency pairs>"], \n' +
' "targetCurrencyPair" : "<one of the currency pairs in knownCurrencyPairs>"\n' +
' }\n' +
'}\n'
);
return;
}
const exchangeDetailsMap = JSON.parse(ccxtRestTestExchangeDetails)
const SKIPPED_EXCHANGES = JSON.parse(process.env.SKIPPED_EXCHANGES || '[]')
let testDirectories = []
parallelTest.runParallelProcessTests(
exchangeConfig.exchanges
.filter(exchangeName => exchangeDetailsMap[exchangeName])
.filter(exchangeName => !SKIPPED_EXCHANGES.includes(exchangeName)),
`${__dirname}/../../test/generated`,
`${__dirname}/_template-test.js`,
(testContent, exchangeName) => {
var exchangeDetails = exchangeDetailsMap[exchangeName] || {};
const exchangeId = (exchangeDetails.creds && exchangeDetails.creds.id) || (exchangeName + new Date().getTime());
if (!exchangeDetails.creds.id) {
exchangeDetails.creds.id = exchangeId
}
const creds = JSON.stringify(exchangeDetails.creds)
const knownCurrencyPairs = JSON.stringify(exchangeDetails.knownCurrencyPairs)
const targetCurrencyPair = exchangeDetails.targetCurrencyPair
const exchange = new ccxt[exchangeName]()
const fetchClosedOrders = exchange.has.fetchClosedOrders ? 200 : 501;
const fetchOrders = exchange.has.fetchOrders ? 200 : 501;
const fetchMyTrades = exchange.has.fetchMyTrades ? 200 : 501;
const fetchTicker = exchange.has.fetchTicker ? 200 : 501;
const fetchTickers = exchange.has.fetchTickers ? 200 : 501;
return testContent
.replace(new RegExp('%%exchangeId%%', 'g'), exchangeId)
.replace(new RegExp('%%creds%%', 'g'), creds)
.replace(new RegExp('%%knownCurrencyPairs%%', 'g'), knownCurrencyPairs)
.replace(new RegExp('%%targetCurrencyPair%%', 'g'), targetCurrencyPair)
.replace(new RegExp("%%expectedStatusCodesFetchClosedOrders%%", 'g'), fetchClosedOrders)
.replace(new RegExp("%%expectedStatusCodesFetchOrders%%", 'g'), fetchOrders)
.replace(new RegExp("%%expectedStatusCodesFetchMyTrades%%", 'g'), fetchMyTrades)
.replace(new RegExp("%%expectedStatusCodesFetchTicker%%", 'g'), fetchTicker)
.replace(new RegExp("%%expectedStatusCodesFetchTickers%%", 'g'), fetchTickers)
;
},
(command) => {
const exchangeName = command.filter(candidate => candidate.endsWith('.js'))[0].split('/').reverse()[0].split('.')[0]
const title = `CCXT-REST ${exchangeName.toUpperCase()} Integration Tests Results`
const testDirectory = `./out/integration-tests/${exchangeName}`
testDirectories.push(path.resolve(testDirectory))
command = [...command, '--reporter', 'mochawesome', '--reporter-options', `reportDir=${testDirectory},reportTitle='${title}',reportPageTitle='${title}'`]
return command
},
() => {},
() => {
console.info(`Generated reports in:\n * ${testDirectories.join('\n * ')}\n`)
}
)