Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Improve BasicToken test coverage
  • Loading branch information
facuspagnuolo committed Jan 28, 2018
commit 0945c8206dd6f8bfcb7da89ed6504b54d323a26e
89 changes: 69 additions & 20 deletions test/token/BasicToken.test.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,82 @@
import assertRevert from '../helpers/assertRevert';
const BasicToken = artifacts.require('BasicTokenMock');

var BasicTokenMock = artifacts.require('BasicTokenMock');
contract('StandardToken', function ([_, owner, recipient, anotherAccount]) {
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';

contract('BasicToken', function (accounts) {
it('should return the correct totalSupply after construction', async function () {
let token = await BasicTokenMock.new(accounts[0], 100);
let totalSupply = await token.totalSupply();
beforeEach(async function () {
this.token = await BasicToken.new(owner, 100);
});

describe('total supply', function () {
it('returns the total amount of tokens', async function () {
const totalSupply = await this.token.totalSupply();

assert.equal(totalSupply, 100);
assert.equal(totalSupply, 100);
});
});

it('should return correct balances after transfer', async function () {
let token = await BasicTokenMock.new(accounts[0], 100);
await token.transfer(accounts[1], 100);
describe('balanceOf', function () {
describe('when the requested account has no tokens', function () {
it('returns zero', async function () {
const balance = await this.token.balanceOf(anotherAccount);

let firstAccountBalance = await token.balanceOf(accounts[0]);
assert.equal(firstAccountBalance, 0);
assert.equal(balance, 0);
});
});

let secondAccountBalance = await token.balanceOf(accounts[1]);
assert.equal(secondAccountBalance, 100);
});
describe('when the requested account has some tokens', function () {
it('returns the total amount of tokens', async function () {
const balance = await this.token.balanceOf(owner);

it('should throw an error when trying to transfer more than balance', async function () {
let token = await BasicTokenMock.new(accounts[0], 100);
await assertRevert(token.transfer(accounts[1], 101));
assert.equal(balance, 100);
});
});
});

it('should throw an error when trying to transfer to 0x0', async function () {
let token = await BasicTokenMock.new(accounts[0], 100);
await assertRevert(token.transfer(0x0, 100));
describe('transfer', function () {
describe('when the recipient is not the zero address', function () {
const to = recipient;

describe('when the sender does not have enough balance', function () {
const amount = 101;

it('reverts', async function () {
await assertRevert(this.token.transfer(to, amount, { from: owner }));
});
});

describe('when the sender has enough balance', function () {
const amount = 100;

it('transfer the requested amount', async function () {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be transfers instead of transfer

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice catch! thx @gertjanleemans

await this.token.transfer(to, amount, { from: owner });

const senderBalance = await this.token.balanceOf(owner);
assert.equal(senderBalance, 0);

const recipientBalance = await this.token.balanceOf(to);
assert.equal(recipientBalance, amount);
});

it('emits a transfer event', async function () {
const { logs } = await this.token.transfer(to, amount, { from: owner });

assert.equal(logs.length, 1);
assert.equal(logs[0].event, 'Transfer');
assert.equal(logs[0].args.from, owner);
assert.equal(logs[0].args.to, to);
assert(logs[0].args.value.eq(amount));
});
});
});

describe('when the recipient is the zero address', function () {
const to = ZERO_ADDRESS;

it('reverts', async function () {
await assertRevert(this.token.transfer(to, 100, { from: owner }));
});
});
});
});