I am now having another issue with testing an ERC721 token. @abcoathup
I am trying to allow the initial EstateAgent
admin to mine Deed
tokens but when I call balanceOf
in the test, it returns 0. Is there something wrong with how they’re interacting with each other?
Or should I be using the test helpers to check events?
Also I read I should be using something like await this.deed.methods['initialize(address)'](admin);
for initialising the token but I’m not sure entirely where to place it as I can’t get it to work I think
Deed.sol
pragma solidity ^0.5.0;
import '@openzeppelin/upgrades/contracts/Initializable.sol';
import '@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721Full.sol';
import '@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721Mintable.sol';
import "@openzeppelin/contracts-ethereum-package/contracts/drafts/Counters.sol";
contract Deed is Initializable, ERC721Full, ERC721Mintable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
function initialize(address agent) public initializer {
ERC721.initialize();
ERC721Enumerable.initialize();
ERC721Metadata.initialize("Deed", "DEED");
ERC721Mintable.initialize(agent);
}
function createDeed(address to, string memory tokenURI) public returns (uint256){
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(to, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
EstateAgent.test.js
const { accounts, provider } = require('@openzeppelin/test-environment');
const { TestHelper } = require('@openzeppelin/cli');
const { Contracts, ZWeb3 } = require('@openzeppelin/upgrades');
const { BN, balance, ether } = require('@openzeppelin/test-helpers');
const { expect } = require('chai');
ZWeb3.initialize(provider);
const EstateAgent = Contracts.getFromLocal('EstateAgent');
const Deed = Contracts.getFromLocal('Deed');
describe('EstateAgent', function () {
const [admin, nonAdmin, ...otherAccounts] = accounts;
beforeEach(async function () {
this.project = await TestHelper();
this.agent = await this.project.createProxy(EstateAgent, { initMethod: 'initialize', initArgs: [admin] });
this.deed = await this.project.createProxy(Deed, { initMethod: 'initialize', initArgs: [admin] })
});
describe('Is admin', function () {
it('Should be admin', async function () {
expect(await this.agent.methods.isAdmin(admin).call()).to.be.true;
});
it('Should not be admin', async function () {
expect(await this.agent.methods.isAdmin(nonAdmin).call()).to.be.false;
});
it('should create deed', async function () {
await this.deed.methods.createDeed(admin, 'testurl').call()
expect(await this.deed.methods.balanceOf(admin).call()).to.be.true;
});
});
});