feat(#3): implement initial public API tests
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# bybit-api
|
||||
[](https://circleci.com/gh/tiagosiebler/bybit-api)
|
||||
[][1] [][1] [][1]
|
||||
[][1]
|
||||
[](https://www.codefactor.io/repository/github/tiagosiebler/bybit-api)
|
||||
|
||||
27
jest.config.js
Normal file
27
jest.config.js
Normal file
@@ -0,0 +1,27 @@
|
||||
// jest.config.js
|
||||
module.exports = {
|
||||
rootDir: './',
|
||||
globals: {
|
||||
__DEV__: true,
|
||||
__PROD__: false
|
||||
},
|
||||
testEnvironment: 'node',
|
||||
preset: "ts-jest",
|
||||
verbose: true, // report individual test
|
||||
bail: false, // enable to stop test when an error occur,
|
||||
moduleDirectories: ['node_modules', 'src', 'test'],
|
||||
testMatch: ['**/test/**/*.test.ts?(x)'],
|
||||
testPathIgnorePatterns: ['node_modules/', 'dist/', '.json'],
|
||||
collectCoverageFrom: [
|
||||
'src/**/*.ts'
|
||||
],
|
||||
coverageThreshold: {
|
||||
// coverage strategy
|
||||
global: {
|
||||
branches: 80,
|
||||
functions: 80,
|
||||
lines: 50,
|
||||
statements: -10
|
||||
}
|
||||
}
|
||||
};
|
||||
3795
package-lock.json
generated
3795
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,8 @@
|
||||
"index.js"
|
||||
],
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"test": "jest",
|
||||
"test:watch": "jest --watch",
|
||||
"clean": "rm -rf lib dist",
|
||||
"build": "tsc",
|
||||
"build:clean": "npm run clean && npm run build",
|
||||
@@ -28,9 +29,12 @@
|
||||
"ws": "^7.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^26.0.23",
|
||||
"@types/node": "^14.14.7",
|
||||
"eslint": "^7.10.0",
|
||||
"jest": "^27.0.4",
|
||||
"source-map-loader": "^2.0.0",
|
||||
"ts-jest": "^27.0.3",
|
||||
"ts-loader": "^8.0.11",
|
||||
"typescript": "^4.0.5",
|
||||
"webpack": "^5.4.0",
|
||||
|
||||
@@ -22,7 +22,8 @@ export class InverseClient extends SharedEndpoints {
|
||||
restClientOptions: RestClientOptions = {},
|
||||
requestOptions: AxiosRequestConfig = {}
|
||||
) {
|
||||
super()
|
||||
super();
|
||||
|
||||
this.requestWrapper = new RequestWrapper(
|
||||
key,
|
||||
secret,
|
||||
@@ -53,9 +54,9 @@ export class InverseClient extends SharedEndpoints {
|
||||
*/
|
||||
getLatestInformation(params?: {
|
||||
symbol?: string;
|
||||
}): GenericAPIResponse {
|
||||
}): GenericAPIResponse {
|
||||
return this.getTickers(params);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use getTrades() instead
|
||||
|
||||
70
test/inverse/public.test.ts
Normal file
70
test/inverse/public.test.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import { InverseClient } from "../../src/inverse-client";
|
||||
import { successResponseList, successResponseObject } from "../response.util";
|
||||
|
||||
describe('Public Inverse REST API Endpoints', () => {
|
||||
const useLivenet = true;
|
||||
const api = new InverseClient(undefined, undefined, useLivenet);
|
||||
|
||||
const symbol = 'BTCUSD';
|
||||
const interval = '15';
|
||||
const timestampOneHourAgo = (new Date().getTime() / 1000) - (1000 * 60 * 60);
|
||||
const from = Number(timestampOneHourAgo.toFixed(0));
|
||||
|
||||
describe('Inverse only endpoints', () => {
|
||||
it('should throw for unauthenticated private calls', async () => {
|
||||
expect(() => api.getPosition()).rejects.toMatchObject(new Error('Private endpoints require api and private keys set'));
|
||||
});
|
||||
|
||||
it('getKline()', async () => {
|
||||
expect(
|
||||
await api.getKline({ symbol, interval, from })
|
||||
).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getTrades()', async () => {
|
||||
expect(await api.getTrades({ symbol })).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getIndexPriceKline()', async () => {
|
||||
expect(await api.getIndexPriceKline({ symbol, interval, from })).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getPremiumIndexKline()', async () => {
|
||||
expect(await api.getPremiumIndexKline({ symbol, interval, from })).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getLastFundingRate()', async () => {
|
||||
expect(await api.getLastFundingRate({ symbol })).toMatchObject(successResponseObject());
|
||||
});
|
||||
});
|
||||
|
||||
describe('Shared endpoints', () => {
|
||||
it('should throw for unauthenticated private calls', async () => {
|
||||
expect(() => api.getApiKeyInfo()).rejects.toMatchObject(new Error('Private endpoints require api and private keys set'));
|
||||
});
|
||||
|
||||
it('getOrderBook()', async () => {
|
||||
expect(await api.getOrderBook({ symbol })).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getTickers()', async () => {
|
||||
expect(await api.getTickers()).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getSymbols()', async () => {
|
||||
expect(await api.getSymbols()).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getLiquidations()', async () => {
|
||||
expect(await api.getLiquidations({ symbol })).toMatchObject(successResponseList());
|
||||
});
|
||||
|
||||
it('getServerTime()', async () => {
|
||||
expect(await api.getServerTime()).toMatchObject(successResponseObject());
|
||||
});
|
||||
|
||||
it('getApiAnnouncements()', async () => {
|
||||
expect(await api.getApiAnnouncements()).toMatchObject(successResponseList());
|
||||
});
|
||||
});
|
||||
});
|
||||
22
test/response.util.ts
Normal file
22
test/response.util.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
export function successResponseList() {
|
||||
return {
|
||||
"ext_code": "",
|
||||
"ext_info": "",
|
||||
"result": expect.any(Array),
|
||||
"ret_code": 0,
|
||||
"ret_msg": "OK",
|
||||
"time_now": expect.any(String),
|
||||
};
|
||||
};
|
||||
|
||||
export function successResponseObject() {
|
||||
return {
|
||||
"ext_code": "",
|
||||
"ext_info": "",
|
||||
"result": expect.any(Object),
|
||||
"ret_code": 0,
|
||||
"ret_msg": "OK",
|
||||
"time_now": expect.any(String),
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user