Skip to content

Commit 10761da

Browse files
Merge pull request #123 from dev-protocol/add-migrate-test
add library migrate test
2 parents 2bc22f9 + fc3d987 commit 10761da

3 files changed

Lines changed: 135 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
pragma solidity =0.8.9;
3+
4+
import "@openzeppelin/contracts/utils/Counters.sol";
5+
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
6+
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
7+
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
8+
9+
contract UpgradeabilityLibraryV1 is OwnableUpgradeable, UUPSUpgradeable {
10+
uint256 public testValue;
11+
Counters.Counter private tokenIdCounter;
12+
EnumerableSet.UintSet private enumerableSet;
13+
14+
using Counters for Counters.Counter;
15+
using EnumerableSet for EnumerableSet.UintSet;
16+
17+
function initialize() external initializer {
18+
__Ownable_init();
19+
__UUPSUpgradeable_init();
20+
}
21+
22+
function upCounter() public {
23+
tokenIdCounter.increment();
24+
}
25+
26+
function getCounter() public view returns (uint256) {
27+
return tokenIdCounter.current();
28+
}
29+
30+
function addEnumerableSet(uint256 _value) public {
31+
enumerableSet.add(_value);
32+
}
33+
34+
function getEnumerableSet() public view returns (uint256[] memory) {
35+
return enumerableSet.values();
36+
}
37+
38+
function setTestValue(uint256 _value) public {
39+
testValue = _value;
40+
}
41+
42+
function _authorizeUpgrade(address) internal override onlyOwner {}
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
pragma solidity =0.8.9;
3+
4+
import "@openzeppelin/contracts/utils/Counters.sol";
5+
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
6+
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
7+
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
8+
9+
contract UpgradeabilityLibraryV2 is OwnableUpgradeable, UUPSUpgradeable {
10+
uint256 public testValue;
11+
Counters.Counter private tokenIdCounter;
12+
EnumerableSet.UintSet private enumerableSet;
13+
14+
using Counters for Counters.Counter;
15+
using EnumerableSet for EnumerableSet.UintSet;
16+
17+
function initialize() external initializer {
18+
__Ownable_init();
19+
__UUPSUpgradeable_init();
20+
}
21+
22+
function upCounter() public {
23+
tokenIdCounter.increment();
24+
}
25+
26+
function getCounter() public view returns (uint256) {
27+
return tokenIdCounter.current();
28+
}
29+
30+
function addEnumerableSet(uint256 _value) public {
31+
enumerableSet.add(_value);
32+
}
33+
34+
function getEnumerableSet() public view returns (uint256[] memory) {
35+
return enumerableSet.values();
36+
}
37+
38+
function setTestValue(uint256 _value) public {
39+
testValue = _value;
40+
}
41+
42+
function _authorizeUpgrade(address) internal override onlyOwner {}
43+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* eslint-disable @typescript-eslint/no-floating-promises */
2+
import { UpgradeabilityLibraryV1Instance } from '../../../types/truffle-contracts'
3+
import { deployProxy } from '../../test-lib/instance'
4+
import { getEventValue } from '../../test-lib/utils/event'
5+
6+
contract('UpgradeabilityLibrary ', ([deployer, address, user]) => {
7+
describe('Same data', () => {
8+
let contract: UpgradeabilityLibraryV1Instance
9+
10+
before(async () => {
11+
contract = await deployProxy(
12+
artifacts.require('UpgradeabilityLibraryV1'),
13+
deployer
14+
)
15+
await contract.initialize()
16+
})
17+
it('Store data', async () => {
18+
await Promise.all([
19+
contract.setTestValue(5),
20+
contract.upCounter(),
21+
contract.addEnumerableSet(10),
22+
contract.addEnumerableSet(20),
23+
])
24+
25+
expect((await contract.getCounter()).toString()).to.equal('1')
26+
const eSet = await contract.getEnumerableSet()
27+
expect(eSet.length).to.equal(2)
28+
const converted = eSet.map((v) => v.toNumber())
29+
expect(converted.includes(10)).to.equal(true)
30+
expect(converted.includes(20)).to.equal(true)
31+
expect((await contract.testValue()).toString()).to.equal('5')
32+
})
33+
it('Should data be upgradable', async () => {
34+
const newImpl = await artifacts.require('UpgradeabilityLibraryV2').new()
35+
contract.upgradeTo(newImpl.address)
36+
const [implementation] = await Promise.all([
37+
getEventValue(contract)('Upgraded', 'implementation'),
38+
])
39+
expect(implementation).to.equal(newImpl.address)
40+
expect((await contract.getCounter()).toString()).to.equal('1')
41+
const eSet = await contract.getEnumerableSet()
42+
expect(eSet.length).to.equal(2)
43+
const converted = eSet.map((v) => v.toNumber())
44+
expect(converted.includes(10)).to.equal(true)
45+
expect(converted.includes(20)).to.equal(true)
46+
expect((await contract.testValue()).toString()).to.equal('5')
47+
})
48+
})
49+
})

0 commit comments

Comments
 (0)