kopia lustrzana https://github.com/bugout-dev/dao
tests wip
rodzic
4c4b0cf223
commit
9d4267f1d0
|
@ -12,6 +12,7 @@ pragma solidity ^0.8.9;
|
|||
import "@openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol";
|
||||
import "@openzeppelin-contracts/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol";
|
||||
import "../diamond/libraries/LibDiamond.sol";
|
||||
import "./IERC1155Enumerable.sol";
|
||||
import "./LibTerminus.sol";
|
||||
|
||||
contract TerminusInitializer {
|
||||
|
@ -19,7 +20,7 @@ contract TerminusInitializer {
|
|||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
|
||||
ds.supportedInterfaces[type(IERC1155).interfaceId] = true;
|
||||
ds.supportedInterfaces[type(IERC1155MetadataURI).interfaceId] = true;
|
||||
ds.supportedInterfaces[type(IERC1155MetadataURI).interfaceId] = true;
|
||||
ds.supportedInterfaces[type(IERC1155Enumerable).interfaceId] = true;
|
||||
|
||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||
ts.controller = msg.sender;
|
||||
|
|
|
@ -10,18 +10,22 @@
|
|||
pragma solidity ^0.8.9;
|
||||
|
||||
import "../LibTerminus.sol";
|
||||
import "../../diamond/libraries/LibDiamond.sol";
|
||||
import "../IERC1155Enumerable.sol";
|
||||
|
||||
contract PoolControllerEnumeration {
|
||||
function init() external {
|
||||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
|
||||
ds.supportedInterfaces[type(IERC1155Enumerable).interfaceId] = true;
|
||||
|
||||
LibTerminus.TerminusStorage storage ts = LibTerminus.terminusStorage();
|
||||
|
||||
for(uint256 i = 0; i < ts.currentPoolID; i++)
|
||||
{
|
||||
for (uint256 i = 0; i < ts.currentPoolID; i++) {
|
||||
address poolController = ts.poolController[i];
|
||||
ts.controlledPools[poolController][ts.controllerPoolsNumber[poolController]] = i;
|
||||
ts.controlledPools[poolController][
|
||||
ts.controllerPoolsNumber[poolController]
|
||||
] = i;
|
||||
ts.controllerPoolsNumber[poolController]++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
12
dao/core.py
12
dao/core.py
|
@ -21,6 +21,10 @@ from . import (
|
|||
TerminusFacet,
|
||||
TerminusInitializer,
|
||||
)
|
||||
from .fixtures import (
|
||||
TerminusFacetFixture,
|
||||
TerminusInitializerFixture,
|
||||
)
|
||||
|
||||
FACETS: Dict[str, Any] = {
|
||||
"DiamondCutFacet": DiamondCutFacet,
|
||||
|
@ -28,6 +32,7 @@ FACETS: Dict[str, Any] = {
|
|||
"ERC20Facet": ERC20Facet,
|
||||
"OwnershipFacet": OwnershipFacet,
|
||||
"TerminusFacet": TerminusFacet,
|
||||
"TerminusFacetFixture": TerminusFacetFixture,
|
||||
}
|
||||
|
||||
FACET_PRECEDENCE: List[str] = [
|
||||
|
@ -36,6 +41,7 @@ FACET_PRECEDENCE: List[str] = [
|
|||
"DiamondLoupeFacet",
|
||||
"ERC20Facet",
|
||||
"TerminusFacet",
|
||||
"TerminusFacetFixture",
|
||||
]
|
||||
|
||||
FACET_ACTIONS: Dict[str, int] = {"add": 0, "replace": 1, "remove": 2}
|
||||
|
@ -117,6 +123,12 @@ def facet_cut(
|
|||
initializer_address
|
||||
)
|
||||
calldata = terminus_initializer.contract.init.encode_input()
|
||||
elif facet_name == "TerminusFacetFixture":
|
||||
if initializer_address != ZERO_ADDRESS and action != "remove":
|
||||
terminus_initializer = TerminusInitializerFixture.TerminusInitializerFixture(
|
||||
initializer_address
|
||||
)
|
||||
calldata = terminus_initializer.contract.init.encode_input()
|
||||
|
||||
diamond = DiamondCutFacet.DiamondCutFacet(diamond_address)
|
||||
transaction = diamond.diamond_cut(
|
||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
|||
from eth_typing.evm import ChecksumAddress
|
||||
|
||||
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
|||
from eth_typing.evm import ChecksumAddress
|
||||
|
||||
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
|||
from eth_typing.evm import ChecksumAddress
|
||||
|
||||
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ from brownie.network.contract import ContractContainer
|
|||
from eth_typing.evm import ChecksumAddress
|
||||
|
||||
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
PROJECT_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
|
||||
BUILD_DIRECTORY = os.path.join(PROJECT_DIRECTORY, "build", "contracts")
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ class TestPoolControllerEnumerationMigration(MoonstreamDAOSingleContractTestCase
|
|||
fixture_terminus_facet.deploy({"from": accounts[0]})
|
||||
|
||||
# deploy, intialize, setup and test new diamond contract
|
||||
|
||||
|
||||
# facet_cut fixtures onto newly created diamond
|
||||
|
||||
|
|
|
@ -6,7 +6,8 @@ from .core import facet_cut, gogogo
|
|||
from .ERC20Facet import ERC20Facet
|
||||
from .ERC20Initializer import ERC20Initializer
|
||||
from . import TerminusFacet
|
||||
from . import TerminusInitializer
|
||||
from . import TerminusInitializer, PoolControllerEnumeration
|
||||
from .fixtures import TerminusFacetFixture, TerminusInitializerFixture
|
||||
|
||||
|
||||
class MoonstreamDAOSingleContractTestCase(unittest.TestCase):
|
||||
|
@ -73,6 +74,35 @@ class TerminusTestCase(MoonstreamTokenTestCase):
|
|||
cls.terminus_facet = terminus_facet.address
|
||||
|
||||
|
||||
class TerminusFixtureTestCase(MoonstreamTokenTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
super().setUpClass()
|
||||
|
||||
cls.terminus_fixture_contracts = gogogo(accounts[0], {"from": accounts[0]})
|
||||
|
||||
# Deploy Terminus
|
||||
fixture_initializer = TerminusInitializerFixture.TerminusInitializerFixture(None)
|
||||
fixture_initializer.deploy({"from": accounts[0]})
|
||||
|
||||
terminus_fixture_facet = TerminusFacetFixture.TerminusFacetFixture(None)
|
||||
terminus_fixture_facet.deploy({"from": accounts[0]})
|
||||
|
||||
diamond_fixture_address = cls.terminus_fixture_contracts["Diamond"]
|
||||
|
||||
facet_cut(
|
||||
diamond_fixture_address,
|
||||
"TerminusFacetFixture",
|
||||
terminus_fixture_facet.address,
|
||||
"add",
|
||||
{"from": accounts[0]},
|
||||
fixture_initializer.address,
|
||||
)
|
||||
|
||||
cls.terminus_fixture_initializer = fixture_initializer.address
|
||||
cls.terminus_fixture_facet = terminus_fixture_facet.address
|
||||
|
||||
|
||||
class TestCoreDeployment(MoonstreamDAOSingleContractTestCase):
|
||||
def test_gogogo(self):
|
||||
self.assertIn("DiamondCutFacet", self.contracts)
|
||||
|
|
|
@ -4,9 +4,11 @@ import unittest
|
|||
from brownie import accounts
|
||||
from brownie.exceptions import VirtualMachineError
|
||||
|
||||
|
||||
from . import ERC20Facet, TerminusFacet, TerminusInitializer
|
||||
from .core import facet_cut
|
||||
from .test_core import MoonstreamDAOSingleContractTestCase, TerminusTestCase
|
||||
from .test_core import MoonstreamDAOSingleContractTestCase, TerminusTestCase, TerminusFixtureTestCase, PoolControllerEnumeration
|
||||
from .fixtures import TerminusFacetFixture, TerminusInitializerFixture
|
||||
|
||||
|
||||
class TestDeployment(MoonstreamDAOSingleContractTestCase):
|
||||
|
@ -742,6 +744,111 @@ class TestCreatePoolV1(TestPoolOperations):
|
|||
self.assertEqual(final_pool_supply, initial_pool_supply)
|
||||
self.assertEqual(final_owner_balance, initial_owner_balance)
|
||||
|
||||
class TestPoolControllerEnumerationMigration(TerminusFixtureTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
super().setUpClass()
|
||||
moonstream_diamond_address = cls.contracts["Diamond"]
|
||||
diamond_moonstream = ERC20Facet.ERC20Facet(moonstream_diamond_address)
|
||||
terminus_diamond_fixture_address = cls.terminus_fixture_contracts["Diamond"]
|
||||
diamond_terminus_fixture = TerminusFacetFixture.TerminusFacetFixture(terminus_diamond_fixture_address)
|
||||
diamond_terminus_fixture.set_payment_token(
|
||||
moonstream_diamond_address, {"from": accounts[0]}
|
||||
)
|
||||
diamond_terminus_fixture.set_pool_base_price(1000, {"from": accounts[0]})
|
||||
diamond_moonstream.mint(accounts[1], 1000000, {"from": accounts[0]})
|
||||
diamond_moonstream.approve(
|
||||
terminus_diamond_fixture_address, 1000000, {"from": accounts[1]}
|
||||
)
|
||||
cls.diamond_terminus_fixture = diamond_terminus_fixture
|
||||
cls.diamond_moonstream = diamond_moonstream
|
||||
|
||||
cls.diamond_terminus_fixture.set_controller(accounts[1].address, {"from": accounts[0]})
|
||||
|
||||
cls.diamond_terminus_fixture.create_simple_pool(10, {"from": accounts[1]})
|
||||
|
||||
def test_migration_from_old_state(self):
|
||||
|
||||
|
||||
#test - create test pools and check that they are correctly saved
|
||||
#teardown - after test
|
||||
|
||||
diamond_fixture_address = self.terminus_fixture_contracts["Diamond"]
|
||||
terminus_fixture_facet = self.terminus_fixture_facet
|
||||
|
||||
terminus_facet = TerminusFacet.TerminusFacet(None)
|
||||
terminus_facet.deploy({"from": accounts[0]})
|
||||
|
||||
migration_initializer = PoolControllerEnumeration.PoolControllerEnumeration(None)
|
||||
migration_initializer.deploy({"from": accounts[0]})
|
||||
|
||||
facet_cut(
|
||||
diamond_fixture_address,
|
||||
"TerminusFacetFixture",
|
||||
terminus_fixture_facet,
|
||||
"remove",
|
||||
{"from": accounts[0]},
|
||||
)
|
||||
|
||||
facet_cut(
|
||||
diamond_fixture_address,
|
||||
"TerminusFacet",
|
||||
terminus_facet.address,
|
||||
"add",
|
||||
{"from": accounts[0]},
|
||||
migration_initializer.address,
|
||||
)
|
||||
|
||||
# final_total_pools = self.diamond_terminus_fixture.total_pools()
|
||||
# print("final_total_pools:", final_total_pools)
|
||||
# self.assertEqual(final_total_pools, initial_total_pools + 1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# def test_migration_from_old_state(self):
|
||||
|
||||
# # old state
|
||||
# fixture_initializer = TerminusInitializerFixture.TerminusInitializerFixture(None)
|
||||
# fixture_initializer.deploy({"from": accounts[0]})
|
||||
|
||||
# fixture_terminus_facet = TerminusFacetFixture.TerminusFacetFixture(None)
|
||||
# fixture_terminus_facet.deploy({"from": accounts[0]})
|
||||
|
||||
# # deploy, intialize, setup and test new diamond contract
|
||||
|
||||
|
||||
# # facet_cut fixtures onto newly created diamond
|
||||
|
||||
# # test that facets are fixtures
|
||||
|
||||
# # run standard facet tests
|
||||
|
||||
# # replace facet with PoolControllerEnumeration update
|
||||
|
||||
# initializer = PoolControllerEnumeration.PoolControllerEnumeration(None)
|
||||
# initializer.deploy({"from": accounts[0]})
|
||||
|
||||
# terminus_facet = TerminusFacet.TerminusFacet(None)
|
||||
# terminus_facet.deploy({"from": accounts[0]})
|
||||
|
||||
# diamond_address = self.contracts["Diamond"]
|
||||
# facet_cut(
|
||||
# diamond_address,
|
||||
# "TerminusFacet",
|
||||
# terminus_facet.address,
|
||||
# "add",
|
||||
# {"from": accounts[0]},
|
||||
# initializer.address,
|
||||
# )
|
||||
|
||||
# # test that pool enumeration migrated successfully
|
||||
# diamond_terminus = TerminusFacet.TerminusFacet(diamond_address)
|
||||
# for poolId in range(diamond_terminus.total_pools()):
|
||||
# controller = diamond_terminus.terminus_pool_controller(poolId)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Ładowanie…
Reference in New Issue