relayer-registry/test/relayerRegistry.test.js

116 lines
3.9 KiB
JavaScript

/* global artifacts, web3, contract */
require('chai').use(require('bn-chai')(web3.utils.BN)).use(require('chai-as-promised')).should()
const { takeSnapshot, revertSnapshot } = require('../scripts/ganacheHelper')
const { toBN } = require('web3-utils')
const Torn = artifacts.require('TornMock.sol')
const RelayerRegistry = artifacts.require('RelayerRegistryMock.sol')
contract('RelayerRegistry', (accounts) => {
let registry
let torn
let snapshotId
const relayer1 = accounts[5]
before(async () => {
torn = await Torn.new()
await torn.transfer(accounts[5], '1000')
registry = await RelayerRegistry.new(accounts[0], torn.address)
snapshotId = await takeSnapshot()
})
describe('#add', () => {
it('should work', async () => {
const { logs } = await registry.add(relayer1)
logs[0].event.should.be.equal('RelayerAdded')
logs[0].args.relayer.should.be.equal((relayer1 + '000000000000000000000000').toLowerCase())
})
it('should prevent double add', async () => {
await registry.add(relayer1)
await registry.add(relayer1).should.be.rejectedWith('The relayer already exists')
})
it('should allow readd', async () => {
await registry.add(relayer1)
await registry.remove(relayer1)
await registry.add(relayer1)
})
it('should charge tokens', async () => {
const relayerBalanceBefore = await torn.balanceOf(relayer1)
relayerBalanceBefore.should.eq.BN(toBN(1000))
const registryBalanceBefore = await torn.balanceOf(registry.address)
registryBalanceBefore.should.eq.BN(toBN(0))
const stake = toBN(1000)
await torn.approve(registry.address, stake, { from: relayer1 })
await registry.setStake(stake)
await registry.add(relayer1)
const relayerBalanceAfter = await torn.balanceOf(relayer1)
relayerBalanceAfter.should.eq.BN(toBN(0))
const registryBalanceAfter = await torn.balanceOf(registry.address)
registryBalanceAfter.should.eq.BN(toBN(1000))
})
it('should fail when can not charge tokens', async () => {
await registry.setStake(toBN(1000))
await registry.add(relayer1).should.be.rejectedWith('ERC20: transfer amount exceeds allowance.')
})
it('should prevent unauthorized access', async () => {
await registry.add(relayer1, { from: accounts[1] }).should.be.rejectedWith('unauthorized')
})
})
describe('#remove', () => {
it('should work', async () => {
await registry.add(relayer1)
const { logs } = await registry.remove(relayer1)
logs[0].event.should.be.equal('RelayerRemoved')
logs[0].args.relayer.should.be.equal((relayer1 + '000000000000000000000000').toLowerCase())
})
it('should prevent remove not existing', async () => {
await registry.remove(relayer1).should.be.rejectedWith('The relayer does not exist')
})
it('should return tokens')
it('should return correct token amount after stake change')
it('should allow relayer to initiate exit')
it('should prevent unauthorized access', async () => {
await registry.add(relayer1)
await registry.remove(relayer1, { from: accounts[1] }).should.be.rejectedWith('unauthorized')
})
})
describe('#setStake', () => {
it('should work', async () => {
const stakeBefore = await registry.stake()
stakeBefore.should.eq.BN(0)
const { logs } = await registry.setStake(toBN(1000))
logs[0].event.should.be.equal('StakeChanged')
logs[0].args.stake.should.be.eq.BN(toBN(1000))
const stakeAfter = await registry.stake()
stakeAfter.should.eq.BN(toBN(1000))
})
it('should prevent unauthorized access', async () => {
await registry.setStake('1', { from: accounts[1] }).should.be.rejectedWith('unauthorized')
})
})
afterEach(async () => {
await revertSnapshot(snapshotId.result)
// eslint-disable-next-line require-atomic-updates
snapshotId = await takeSnapshot()
})
})