Basic tests

This commit is contained in:
Aleksandr Kraiz
2022-04-22 17:43:44 +04:00
parent a56c4f0e11
commit d2e17cd0e3
10 changed files with 783 additions and 2803 deletions

View File

@@ -1,5 +1,6 @@
module.exports = {
ignorePatterns: ['.eslintrc.js'],
include: ['jest.config.ts'],
env: {
browser: true,
es2021: true,

27
jest.config.ts Normal file
View File

@@ -0,0 +1,27 @@
import type { Config } from '@jest/types';
const config: Config.InitialOptions = {
verbose: true,
preset: 'ts-jest',
testRegex: "src/.*\\.test\\.ts$",
moduleFileExtensions: [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
testEnvironment: 'node',
transform: {
"^.+\\.tsx?$": "ts-jest"
},
rootDir: ".",
globals: {
"ts-jest": {
"tsconfig": "tsconfig.json"
}
},
setupFiles: ["dotenv/config"]
};
export default config;

3384
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -8,10 +8,10 @@
"start": "npm run build-ts && node lib/index.js",
"develop": "concurrently -i -k -p \"[{name}]\" -n \"Node,TypeScript\" -c \"yellow.bold,cyan.bold\" \"yarn watch-js\" \"yarn watch-ts\"",
"clean": "rimraf lib/*",
"build-ts": "npm run typechain:generate-types && tsc --skipLibCheck",
"build-ts": "npm run typechain:generate-types && tsc -p tsconfig.build.json --skipLibCheck",
"watch-ts": "npm run typechain:generate-types && tsc -w --skipLibCheck",
"watch-js": "nodemon lib/index.js",
"test": "exit 0",
"test": "jest",
"coverage": "jest --coverage",
"lint:eslint": "eslint ./src --ext .ts,.js,.tsx,.jsx",
"lint:eslint:fix": "eslint ./src --ext .ts,.js,.tsx,.jsx --fix",
@@ -37,6 +37,7 @@
"devDependencies": {
"@typechain/ethers-v5": "^10.0.0",
"@types/csprng": "^0.1.2",
"@types/jest": "^27.4.1",
"@types/node": "^17.0.23",
"@types/node-fetch": "^2.6.1",
"@types/socket.io-client": "1.4.33",
@@ -45,11 +46,14 @@
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.16.0",
"concurrently": "^7.0.0",
"dotenv": "^16.0.0",
"eslint": "^8.12.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.25.4",
"husky": "^7.0.4",
"jest": "^27.5.1",
"ts-jest": "^27.1.4",
"ts-node": "^10.7.0",
"typechain": "^8.0.0",
"typescript": "^4.5.3"
},
@@ -73,4 +77,4 @@
"files": [
"lib/**/*"
]
}
}

View File

@@ -0,0 +1,46 @@
import { Wallet } from 'ethers';
import initOrionUnit from '../initOrionUnit';
import OrionUnit from '../OrionUnit';
import crypto from "crypto";
let wallet: Wallet;
let orionUnit: OrionUnit;
jest.setTimeout(15000);
beforeAll(() => {
orionUnit = initOrionUnit('0x61', 'testing');
if(!process.env.PRIVATE_KEY) throw new Error('PRIVATE_KEY env variable is not defined');
wallet = new Wallet(process.env.PRIVATE_KEY)
});
describe('Deposit', () => {
test('Deposit 0.00000001 ORN', () => {
return expect(orionUnit.exchange.deposit({
amount: 0.00000001,
asset: 'ORN',
signer: wallet,
})).resolves.toBeUndefined();
});
test('Deposit -3 ORN', () => {
const amount = -3;
return expect(orionUnit.exchange.deposit({
amount,
asset: 'ORN',
signer: wallet,
})).rejects.toThrowError(`Amount '${amount.toString()}' should be greater than 0`);
});
test('Deposit unknown asset', () => {
const random = crypto.randomBytes(10).toString('hex').toUpperCase();
console.log(random);
return expect(orionUnit.exchange.deposit({
amount: 0.00000001,
asset: random,
signer: wallet,
})).rejects.toThrowError(`Asset '${random}' not found`);
});
});
export {};

View File

@@ -0,0 +1,17 @@
import initOrionUnit from '../initOrionUnit';
import OrionUnit from '../OrionUnit';
describe('OrionUnit', () => {
test('OrionUnit init is defined', () => {
const orionUnit = initOrionUnit('0x61', 'testing');
expect(orionUnit).toBeDefined();
});
test('OrionUnit is instance of OrionUnit', () => {
const orionUnit = initOrionUnit('0x61', 'testing');
expect(orionUnit).toBeInstanceOf(OrionUnit);
});
});
export {};

View File

@@ -0,0 +1,55 @@
import { Wallet } from 'ethers';
import initOrionUnit from '../initOrionUnit';
import OrionUnit from '../OrionUnit';
let wallet: Wallet;
let orionUnit: OrionUnit;
jest.setTimeout(15000);
beforeAll(() => {
orionUnit = initOrionUnit('0x61', 'testing');
if(!process.env.PRIVATE_KEY) throw new Error('PRIVATE_KEY env variable is not defined');
wallet = new Wallet(process.env.PRIVATE_KEY)
});
describe('Swap market', () => {
test('Too low amount', async () => {
expect(orionUnit.exchange.swapMarket({
amount: 0.00001,
signer: wallet,
type: 'exactReceive',
assetIn: 'ORN',
assetOut: 'USDT',
feeAsset: 'USDT',
slippagePercent: 1
})).rejects.toThrowError(/^Amount is too low/);
});
test('Swap STEVE -> JOBS', async () => {
const swap = await orionUnit.exchange.swapMarket({
amount: 100,
signer: wallet,
type: 'exactReceive',
assetIn: 'STEVE',
assetOut: 'JOBS',
feeAsset: 'USDT',
slippagePercent: 1
});
expect(swap).toBeDefined();
});
test('Swap empty assetIn', async () => {
return expect(orionUnit.exchange.swapMarket({
amount: 100,
signer: wallet,
type: 'exactReceive',
assetIn: '',
assetOut: 'JOBS',
feeAsset: 'USDT',
slippagePercent: 1
})).rejects.toThrowError('AssetIn can not be empty');
});
});
export {};

View File

@@ -0,0 +1,27 @@
import { Wallet } from 'ethers';
import initOrionUnit from '../initOrionUnit';
import OrionUnit from '../OrionUnit';
let wallet: Wallet;
let orionUnit: OrionUnit;
jest.setTimeout(15000);
beforeAll(() => {
orionUnit = initOrionUnit('0x61', 'testing');
if(!process.env.PRIVATE_KEY) throw new Error('PRIVATE_KEY env variable is not defined');
wallet = new Wallet(process.env.PRIVATE_KEY)
});
describe('Withdraw', () => {
test('Withdraw 0.00001 ORN', () => {
return expect(orionUnit.exchange.withdraw({
amount: 0.00001,
asset: 'ORN',
signer: wallet,
})).resolves.toBeUndefined();
});
});
export {};

8
tsconfig.build.json Normal file
View File

@@ -0,0 +1,8 @@
{
"extends": "./tsconfig",
"exclude": [
"**/*.test.*",
"**/__mocks__/*",
"**/__tests__/*"
]
}

View File

@@ -1,10 +1,9 @@
{
"include": [
"src"
"src",
],
"exclude": [
"node_modules",
"**/__tests__/*",
"lib"
],
"compilerOptions": {
@@ -32,11 +31,15 @@
"module": "CommonJS", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
"types": [
"node",
"jest"
],
/* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
"resolveJsonModule": true, /* Enable importing .json files */
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */