Commit 5caecf54 by Aniket Committed by Francisco Giordano

getter added for an array of tokens held by an owner (#1522)

* signing prefix added

* Minor improvement

* Tests changed

* Successfully tested

* Minor improvements

* Minor improvements

* Revert "Dangling commas are now required. (#1359)"

This reverts commit a6889776.

* updates

* fixes #1404

* approve failing test

* suggested changes done

* ISafeERC20 removed

* conflict fixes

* fixes #1512

* Update test/token/ERC721/ERC721Full.test.js

Co-Authored-By: Aniket-Engg <30843294+Aniket-Engg@users.noreply.github.com>
parent b7d56d54
...@@ -7,8 +7,8 @@ import "../token/ERC721/ERC721Burnable.sol"; ...@@ -7,8 +7,8 @@ import "../token/ERC721/ERC721Burnable.sol";
/** /**
* @title ERC721FullMock * @title ERC721FullMock
* This mock just provides a public mint and burn functions for testing purposes, * This mock just provides public functions for setting metadata URI, getting all tokens of an owner,
* and a public setter for metadata URI * checking token existence, removal of a token from an address
*/ */
contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable { contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable {
constructor (string name, string symbol) public ERC721Mintable() ERC721Full(name, symbol) {} constructor (string name, string symbol) public ERC721Mintable() ERC721Full(name, symbol) {}
...@@ -17,6 +17,10 @@ contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, E ...@@ -17,6 +17,10 @@ contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, E
return _exists(tokenId); return _exists(tokenId);
} }
function tokensOfOwner(address owner) public view returns (uint256[] memory) {
return _tokensOfOwner(owner);
}
function setTokenURI(uint256 tokenId, string uri) public { function setTokenURI(uint256 tokenId, string uri) public {
_setTokenURI(tokenId, uri); _setTokenURI(tokenId, uri);
} }
......
...@@ -144,4 +144,13 @@ contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable { ...@@ -144,4 +144,13 @@ contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
_allTokensIndex[tokenId] = 0; _allTokensIndex[tokenId] = 0;
_allTokensIndex[lastToken] = tokenIndex; _allTokensIndex[lastToken] = tokenIndex;
} }
/**
* @dev Gets the list of token IDs of the requested owner
* @param owner address owning the tokens
* @return uint256[] List of token IDs owned by the requested address
*/
function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
return _ownedTokens[owner];
}
} }
...@@ -138,6 +138,15 @@ contract('ERC721Full', function ([ ...@@ -138,6 +138,15 @@ contract('ERC721Full', function ([
}); });
}); });
describe('tokensOfOwner', function () {
it('returns total tokens of owner', async function () {
const tokenIds = await this.token.tokensOfOwner(owner);
tokenIds.length.should.equal(2);
tokenIds[0].should.be.bignumber.equal(firstTokenId);
tokenIds[1].should.be.bignumber.equal(secondTokenId);
});
});
describe('totalSupply', function () { describe('totalSupply', function () {
it('returns total token supply', async function () { it('returns total token supply', async function () {
(await this.token.totalSupply()).should.be.bignumber.equal(2); (await this.token.totalSupply()).should.be.bignumber.equal(2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment