mirror of https://gitlab.com/ecentrics/drizzle
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.7 KiB
123 lines
3.7 KiB
4 years ago
|
import {
|
||
|
isGetterFunction,
|
||
|
isSetterFunction,
|
||
|
getAbi,
|
||
|
generateContractInitialState,
|
||
|
generateContractsInitialState
|
||
|
} from '../src/contractStateUtils'
|
||
|
import TestContractABI from './utils/data/TestContract-abi.json'
|
||
|
|
||
|
describe('Contract State Utilities', () => {
|
||
|
describe('isConstant', () => {
|
||
|
test('can identify a constant for solc v0.5.16 and below', () => {
|
||
|
const config = { type: 'function', constant: true }
|
||
|
expect(isGetterFunction(config)).toBe(true)
|
||
|
expect(isSetterFunction(config)).toBe(false)
|
||
|
})
|
||
|
|
||
|
test('can identify non constants for solc v0.5.16 and below', () => {
|
||
|
let config = { type: 'function', constant: false }
|
||
|
expect(isGetterFunction(config)).toBe(false)
|
||
|
expect(isSetterFunction(config)).toBe(true)
|
||
|
|
||
|
config = { type: 'event' }
|
||
|
expect(isGetterFunction(config)).toBe(false)
|
||
|
expect(isSetterFunction(config)).toBe(false)
|
||
|
})
|
||
|
|
||
|
test('can identify a constant for a pure or view func, for breaking changes from solc v0.6.0 and above', () => {
|
||
|
let config = { type: 'function', stateMutability: 'pure' }
|
||
|
expect(isGetterFunction(config)).toBe(true)
|
||
|
expect(isSetterFunction(config)).toBe(false)
|
||
|
|
||
|
config = { type: 'function', stateMutability: 'view' }
|
||
|
expect(isGetterFunction(config)).toBe(true)
|
||
|
expect(isSetterFunction(config)).toBe(false)
|
||
|
})
|
||
|
|
||
|
test('can identify non constants, for breaking changes from solc v0.6.0 and above', () => {
|
||
|
let config = { type: 'function', stateMutability: 'payable' }
|
||
|
expect(isGetterFunction(config)).toBe(false)
|
||
|
expect(isSetterFunction(config)).toBe(true)
|
||
|
|
||
|
config = { type: 'function', stateMutability: 'nonpayable' }
|
||
|
expect(isGetterFunction(config)).toBe(false)
|
||
|
expect(isSetterFunction(config)).toBe(true)
|
||
|
|
||
|
config = { type: 'event' }
|
||
|
expect(isGetterFunction(config)).toBe(false)
|
||
|
expect(isSetterFunction(config)).toBe(false)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('getAbi', () => {
|
||
|
test('can parse Web3 contract', () => {
|
||
|
const jsonInterface = {}
|
||
|
const web3Contract = { options: { jsonInterface } }
|
||
|
expect(getAbi({ web3Contract })).toEqual(jsonInterface)
|
||
|
})
|
||
|
|
||
|
test('can parse TruffleArtifact', () => {
|
||
|
const abi = {}
|
||
|
const artifact = { abi }
|
||
|
expect(getAbi(artifact)).toEqual(abi)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('generateContractinitialState', () => {
|
||
|
test('It generates correct state from truffleArtifact', () => {
|
||
|
const expectedState = {
|
||
|
initialized: false,
|
||
|
synced: false,
|
||
|
storedData: {}
|
||
|
}
|
||
|
|
||
|
const input = { abi: TestContractABI }
|
||
|
expect(generateContractInitialState(input)).toEqual(expectedState)
|
||
|
})
|
||
|
|
||
|
test('It generates correct state from Web3 Contract', () => {
|
||
|
const expectedState = {
|
||
|
initialized: false,
|
||
|
synced: false,
|
||
|
storedData: {}
|
||
|
}
|
||
|
|
||
|
const input = {
|
||
|
web3Contract: { options: { jsonInterface: TestContractABI } }
|
||
|
}
|
||
|
expect(generateContractInitialState(input)).toEqual(expectedState)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('generateContractsInitialState', () => {
|
||
|
test('it generates multi-contract initial state', () => {
|
||
|
const contracts = [
|
||
|
{ contractName: 'C1', abi: TestContractABI },
|
||
|
{ contractName: 'C2', abi: TestContractABI }
|
||
|
]
|
||
|
|
||
|
const expectedStates = {
|
||
|
C1: {
|
||
|
initialized: false,
|
||
|
synced: false,
|
||
|
storedData: {}
|
||
|
},
|
||
|
C2: {
|
||
|
initialized: false,
|
||
|
synced: false,
|
||
|
storedData: {}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
expect(generateContractsInitialState({ contracts })).toEqual(
|
||
|
expectedStates
|
||
|
)
|
||
|
})
|
||
|
|
||
|
test('it generates valid initial state with empty contracts', () => {
|
||
|
expect(generateContractsInitialState({})).toEqual({})
|
||
|
})
|
||
|
})
|
||
|
})
|