token-wizard/test/utils/processReservedTokens.spec.js

158 lines
5.7 KiB
JavaScript

import processReservedTokens from '../../src/utils/processReservedTokens'
describe('processReservedTokens function', () => {
it('should call the callback for each valid reserved tokens item', () => {
// Given
const rows = [
['0x1111111111111111111111111111111111111111', 'tokens', '10'],
['0x2222222222222222222222222222222222222222', 'tokens', '10'],
['0x2222222222222222222222222222222222222222', 'percentage', '10'],
['0x3333333333333333333333333333333333333333', 'tokens', '10']
]
const cb = jest.fn()
// When
processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(cb).toHaveBeenCalledTimes(4)
expect(cb.mock.calls[0]).toEqual([{ addr: rows[0][0], dim: rows[0][1], val: rows[0][2] }])
expect(cb.mock.calls[1]).toEqual([{ addr: rows[1][0], dim: rows[1][1], val: rows[1][2] }])
expect(cb.mock.calls[2]).toEqual([{ addr: rows[2][0], dim: rows[2][1], val: rows[2][2] }])
expect(cb.mock.calls[3]).toEqual([{ addr: rows[3][0], dim: rows[3][1], val: rows[3][2] }])
})
it('should ignore items that dont have 3 elements', () => {
// Given
const rows = [
['1', '10'],
['0x2222222222222222222222222222222222222222', '10'],
['0x3333333333333333333333333333333333333333', 'tokens'],
['0x4444444444444444444444444444444444444444'],
[],
['0x4444444444444444444444444444444444444444', 'percentage', '10', '100'],
['0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63', 'tokens', '10'] //valid parameters
]
const cb = jest.fn()
// When
processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(cb).toHaveBeenCalledTimes(1)
})
it('should return the number of times the callback was called', () => {
// Given
const rows = [
['0x1111111111111111111111111111111111111111', 'tokens', '10'],
['0x2222222222222222222222222222222222222222', 'tokens', '10'],
['0x2222222222222222222222222222222222222222', 'percentage', '10'],
['0x3333333333333333333333333333333333333333', 'tokens', '10']
]
const cb = jest.fn()
// When
const { called } = processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(called).toBe(4)
})
it('should ignore invalid numbers', () => {
// Given
const rows = [
['0x1111111111111111111111111111111111111111', 'tokens', 'foo'],
['0x2222222222222222222222222222222222222222', 'tokens', ''],
['0x2222222222222222222222222222222222222222', 'percentage', 'bar'],
['0x3333333333333333333333333333333333333333', 'percentage', ''],
['0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63', 'tokens', '10'] //valid parameters
]
const cb = jest.fn()
// When
const { called } = processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(called).toBe(1)
})
it('should ignore invalid addresses', () => {
// Given
const rows = [
['0x123456789012345678901234567890123456789', 'tokens', '10'], // 41 characters
['0x12345678901234567890123456789012345678901', 'tokens', '10'], // 43 characters
['0x90F8bf6A479f320ead074411a4B0e7944Ea8c9CG', 'tokens', '10'], // invalid character
['0x90F8bf6A479f320ead074411a4B0e7944Ea8c9c1', 'tokens', '10'], // invalid checksum
['0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63', 'tokens', '10'] //valid address
]
const cb = jest.fn()
// When
const { called } = processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(called).toBe(1)
})
it('should ignore invalid dimensions', () => {
// Given
const rows = [
['0x49d915966F1f2AdE697Ef7587615D2CF6A8A374e', 'tokenz', '10'],
['0x9F3cA66c22eAc286017b785ed63183859b4183DC', 'perzentage', '10'],
['0x871c98FFA5b44873aE2fa4BFD190Cd42F63907Da', 'units', '10'],
['0x6c8ca1fD00d18B69C2c14228ef3D2E4E1ce3316b', '', '10'],
['0x2589bd7D8A58Ac9A4aC01d68A7c63315ef184c63', 'tokens', '10'], //valid dimension
['0x9613130348aC610732A391063CD70b5a8c186EfC', 'percentage', '10'] //valid dimension
]
const cb = jest.fn()
// When
processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(cb).toHaveBeenCalledTimes(2)
})
it(`should ignore tokens with more decimals than specified`, () => {
// Given
const rows = [
['0x49d915966F1f2AdE697Ef7587615D2CF6A8A374e', 'tokens', '10.1'],
['0x9F3cA66c22eAc286017b785ed63183859b4183DC', 'tokens', '10'],
['0x871c98FFA5b44873aE2fa4BFD190Cd42F63907Da', 'tokens', '10.123'],
['0x6c8ca1fD00d18B69C2c14228ef3D2E4E1ce3316b', 'tokens', '10.12']
]
const cb = jest.fn()
// When
processReservedTokens({ rows, decimals: 2 }, cb)
// Then
expect(cb).toHaveBeenCalledTimes(3)
expect(cb.mock.calls[0]).toEqual([{ addr: rows[0][0], dim: rows[0][1], val: rows[0][2] }])
expect(cb.mock.calls[1]).toEqual([{ addr: rows[1][0], dim: rows[1][1], val: rows[1][2] }])
expect(cb.mock.calls[2]).toEqual([{ addr: rows[3][0], dim: rows[3][1], val: rows[3][2] }])
})
it(`should ignore percentage with invalid values`, () => {
// Given
const rows = [
['0x49d915966F1f2AdE697Ef7587615D2CF6A8A374e', 'percentage', '10'],
['0x9F3cA66c22eAc286017b785ed63183859b4183DC', 'percentage', '-10'],
['0x871c98FFA5b44873aE2fa4BFD190Cd42F63907Da', 'percentage', ''],
['0x6c8ca1fD00d18B69C2c14228ef3D2E4E1ce3316b', 'percentage', '0.12']
]
const cb = jest.fn()
// When
processReservedTokens({ rows, decimals:2 }, cb)
// Then
expect(cb).toHaveBeenCalledTimes(2)
expect(cb.mock.calls[0]).toEqual([{ addr: rows[0][0], dim: rows[0][1], val: rows[0][2] }])
expect(cb.mock.calls[1]).toEqual([{ addr: rows[3][0], dim: rows[3][1], val: rows[3][2] }])
})
})