* Refactor event scraping and add support for scraping ERC20 approval events * Add tests for data_sources/contract-wrappers/utils
		
			
				
	
	
		
			99 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// tslint:disable:custom-no-magic-numbers
 | 
						|
import { BigNumber } from '@0x/utils';
 | 
						|
import * as chai from 'chai';
 | 
						|
import 'mocha';
 | 
						|
import * as R from 'ramda';
 | 
						|
 | 
						|
import { BLOXY_DEX_TRADES_URL, BloxyTrade } from '../../../src/data_sources/bloxy';
 | 
						|
import { DexTrade } from '../../../src/entities';
 | 
						|
import { _parseBloxyTrade } from '../../../src/parsers/bloxy';
 | 
						|
import { chaiSetup } from '../../utils/chai_setup';
 | 
						|
 | 
						|
chaiSetup.configure();
 | 
						|
const expect = chai.expect;
 | 
						|
 | 
						|
const baseInput: BloxyTrade = {
 | 
						|
    tx_hash: '0xb93a7faf92efbbb5405c9a73cd4efd99702fe27c03ff22baee1f1b1e37b3a0bf',
 | 
						|
    tx_time: '2018-11-21T09:06:28.000+00:00',
 | 
						|
    tx_date: '2018-11-21',
 | 
						|
    tx_sender: '0x00923b9a074762b93650716333b3e1473a15048e',
 | 
						|
    smart_contract_id: 7091917,
 | 
						|
    smart_contract_address: '0x818e6fecd516ecc3849daf6845e3ec868087b755',
 | 
						|
    contract_type: 'DEX/Kyber Network Proxy',
 | 
						|
    maker: '0x0000000000000000000000000000000000000001',
 | 
						|
    taker: '0x0000000000000000000000000000000000000002',
 | 
						|
    amountBuy: 1.011943163078103,
 | 
						|
    makerFee: 38.912083,
 | 
						|
    buyCurrencyId: 1,
 | 
						|
    buySymbol: 'ETH',
 | 
						|
    amountSell: 941.4997928436911,
 | 
						|
    takerFee: 100.39,
 | 
						|
    sellCurrencyId: 16610,
 | 
						|
    sellSymbol: 'ELF',
 | 
						|
    maker_annotation: 'random annotation',
 | 
						|
    taker_annotation: 'random other annotation',
 | 
						|
    protocol: 'Kyber Network Proxy',
 | 
						|
    buyAddress: '0xbf2179859fc6d5bee9bf9158632dc51678a4100d',
 | 
						|
    sellAddress: '0xbf2179859fc6d5bee9bf9158632dc51678a4100e',
 | 
						|
};
 | 
						|
 | 
						|
const baseExpected: DexTrade = {
 | 
						|
    sourceUrl: BLOXY_DEX_TRADES_URL,
 | 
						|
    txHash: '0xb93a7faf92efbbb5405c9a73cd4efd99702fe27c03ff22baee1f1b1e37b3a0bf',
 | 
						|
    txTimestamp: 1542791188000,
 | 
						|
    txDate: '2018-11-21',
 | 
						|
    txSender: '0x00923b9a074762b93650716333b3e1473a15048e',
 | 
						|
    smartContractId: 7091917,
 | 
						|
    smartContractAddress: '0x818e6fecd516ecc3849daf6845e3ec868087b755',
 | 
						|
    contractType: 'DEX/Kyber Network Proxy',
 | 
						|
    maker: '0x0000000000000000000000000000000000000001',
 | 
						|
    taker: '0x0000000000000000000000000000000000000002',
 | 
						|
    amountBuy: new BigNumber('1.011943163078103'),
 | 
						|
    makerFeeAmount: new BigNumber('38.912083'),
 | 
						|
    buyCurrencyId: 1,
 | 
						|
    buySymbol: 'ETH',
 | 
						|
    amountSell: new BigNumber('941.4997928436911'),
 | 
						|
    takerFeeAmount: new BigNumber('100.39'),
 | 
						|
    sellCurrencyId: 16610,
 | 
						|
    sellSymbol: 'ELF',
 | 
						|
    makerAnnotation: 'random annotation',
 | 
						|
    takerAnnotation: 'random other annotation',
 | 
						|
    protocol: 'Kyber Network Proxy',
 | 
						|
    buyAddress: '0xbf2179859fc6d5bee9bf9158632dc51678a4100d',
 | 
						|
    sellAddress: '0xbf2179859fc6d5bee9bf9158632dc51678a4100e',
 | 
						|
};
 | 
						|
 | 
						|
interface TestCase {
 | 
						|
    input: BloxyTrade;
 | 
						|
    expected: DexTrade;
 | 
						|
}
 | 
						|
 | 
						|
const testCases: TestCase[] = [
 | 
						|
    {
 | 
						|
        input: baseInput,
 | 
						|
        expected: baseExpected,
 | 
						|
    },
 | 
						|
    {
 | 
						|
        input: R.merge(baseInput, { buyAddress: null, sellAddress: null }),
 | 
						|
        expected: R.merge(baseExpected, { buyAddress: null, sellAddress: null }),
 | 
						|
    },
 | 
						|
    {
 | 
						|
        input: R.merge(baseInput, {
 | 
						|
            buySymbol:
 | 
						|
                'RING\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000',
 | 
						|
        }),
 | 
						|
        expected: R.merge(baseExpected, { buySymbol: 'RING' }),
 | 
						|
    },
 | 
						|
];
 | 
						|
 | 
						|
describe('bloxy', () => {
 | 
						|
    describe('_parseBloxyTrade', () => {
 | 
						|
        for (const [i, testCase] of testCases.entries()) {
 | 
						|
            it(`converts BloxyTrade to DexTrade entity (${i + 1}/${testCases.length})`, () => {
 | 
						|
                const actual = _parseBloxyTrade(testCase.input);
 | 
						|
                expect(actual).deep.equal(testCase.expected);
 | 
						|
            });
 | 
						|
        }
 | 
						|
    });
 | 
						|
});
 |