Skip to content

[Add Test & Refactor] Std Functions #37

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
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
7 changes: 6 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Continuous Integration

Check warning on line 1 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / review-workflow-changes

1:1 [document-start] missing document start "---"

on:

Check warning on line 3 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / review-workflow-changes

3:1 [truthy] truthy value should be one of [false, true]
pull_request:
types:
- opened
Expand Down Expand Up @@ -56,12 +56,17 @@
run: |
git config --global user.email "github-actions@example.com"
git config --global user.name "GitHub Actions"
- name: Run forge install
- name: Run forge init with metacontract/template
run: |
mkdir /tmp/install-with-template-test
cd /tmp/install-with-template-test
forge init mc-example-project -t metacontract/template
forge test
- name: Run forge test
run: |
cd ./mc-example-project
forge init mc-example-project -t metacontract/template
forge test

# slither:
# runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion src/std/functions/internal/ProxyCreator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {Proxy} from "@ucs.mc/proxy/Proxy.sol";
*/
library ProxyCreator {
event ProxyCreated(address dictionary, address proxy);
function create(address dictionary, bytes calldata initData) internal returns(address proxy) {
function create(address dictionary, bytes memory initData) internal returns(address proxy) {
proxy = address(new Proxy(dictionary, initData));
emit ProxyCreated(dictionary, proxy);
}
Expand Down
2 changes: 1 addition & 1 deletion src/std/functions/protected/FeatureToggle.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity ^0.8.22;
// storage
import {Storage} from "../../storage/Storage.sol";

import {ProtectionBase} from "./utils/ProtectionBase.sol";
import {ProtectionBase} from "./protection/ProtectionBase.sol";

/**
< MC Standard Function >
Expand Down
12 changes: 6 additions & 6 deletions src/std/functions/protected/InitSetAdmin.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ pragma solidity ^0.8.24;
import {Storage} from "../../storage/Storage.sol";

// predicates
import {ProtectionBase} from "./utils/ProtectionBase.sol";
import {ProtectionBase} from "./protection/ProtectionBase.sol";

/**
< MC Standard Function >
@title InitSetAdmin
@custom:version 0.1.0
@custom:schema v0.1.0
/** < MC Standard Function >
* @title InitSetAdmin
* @custom:version v0.1.0
* @custom:schema v0.1.0
*/
contract InitSetAdmin is ProtectionBase {
/// DO NOT USE STORAGE DIRECTLY !!!

event AdminSet(address admin);

function initSetAdmin(address admin) external initializer {
Expand Down
2 changes: 1 addition & 1 deletion src/std/functions/protected/UpgradeDictionary.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity ^0.8.24;

import {ProxyUtils} from "@ucs.mc/proxy/ProxyUtils.sol";
import {ProtectionBase} from "./utils/ProtectionBase.sol";
import {ProtectionBase} from "./protection/ProtectionBase.sol";

/**
< MC Standard Function >
Expand Down
14 changes: 0 additions & 14 deletions test/std/functions/Propose.t.sol

This file was deleted.

22 changes: 22 additions & 0 deletions test/std/functions/internal/ProxyCreator.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;

import {MCStateFuzzingTest} from "devkit/MCTest.sol";

import {Dummy} from "test/utils/Dummy.sol";
import {ProxyCreator} from "mc-std/functions/internal/ProxyCreator.sol";
import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";

contract ProxyCreatorTest is MCStateFuzzingTest {

function test_create_Success() public {
address dictionary = Dummy.contractAddr();

vm.expectEmit(true, false, false, false, address(this));
emit ProxyCreator.ProxyCreated(dictionary, makeAddr("Proxy"));
address proxy = ProxyCreator.create(dictionary, "");

assertEq(ForgeHelper.getDictionaryAddress(proxy), dictionary);
}

}
26 changes: 26 additions & 0 deletions test/std/functions/protected/InitSetAdmin.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;

import {MCStateFuzzingTest} from "devkit/MCTest.sol";

import {InitSetAdmin} from "mc-std/functions/protected/InitSetAdmin.sol";
import {Initialization} from "mc-std/functions/protected/protection/Initialization.sol";
import {Storage} from "mc-std/storage/Storage.sol";

contract InitSetAdminTest is MCStateFuzzingTest {
function setUp() public {
_use(InitSetAdmin.initSetAdmin.selector, address(new InitSetAdmin()));
}

function test_InitSetAdmin_Success() public {
address admin = makeAddr("Admin");

vm.expectEmit(target);
emit InitSetAdmin.AdminSet(admin);
emit Initialization.Initialized(1);
InitSetAdmin(target).initSetAdmin(admin);

assertEq(Storage.Admin().admin, admin);
}

}
30 changes: 30 additions & 0 deletions test/std/functions/protected/protection/Initialization.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {Test} from "forge-std/Test.sol";

import {Initialization} from "mc-std/functions/protected/protection/Initialization.sol";
import {Storage} from "mc-std/storage/Storage.sol";

contract InitializationTest is Test {

function test_ShouldNotBeCompleted_Success() public {
Initialization.shouldNotBeCompleted();
}

function test_ShouldNotBeCompleted_RevertIf_VersionIsNotZero() public {
Storage.Initialization().initialized = 1;

vm.expectRevert(Initialization.InvalidInitialization.selector);
Initialization.shouldNotBeCompleted();
}

function test_WillBeCompleted_Success() public {
vm.expectEmit(address(this));
emit Initialization.Initialized(1);
Initialization.willBeCompleted();

assertEq(Storage.Initialization().initialized, 1);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ pragma solidity ^0.8.24;

import {Test} from "forge-std/Test.sol";

import {MsgSender} from "mc-std/functions/protected/utils/MsgSender.sol";
import {MsgSender} from "mc-std/functions/protected/protection/MsgSender.sol";

contract MsgSenderSpecTest is Test {
contract MsgSenderTest is Test {
function setUp() public {}

function test_MsgSender_RevertIf_SenderIsNotAdmin() public {
function test_ShouldBeAdmin_RevertIf_SenderIsNotAdmin() public {
vm.expectRevert(MsgSender.NotAdmin.selector);
MsgSender.shouldBeAdmin();
}
Expand Down
5 changes: 5 additions & 0 deletions test/utils/Dummy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ pragma solidity ^0.8.24;
import {MCDevKit} from "devkit/MCDevKit.sol";
import {DummyFunction} from "./DummyFunction.sol";
import {DummyFacade} from "./DummyFacade.sol";
import {DummyContract} from "test/utils/DummyContract.sol";
import {MCStateFuzzingTest} from "devkit/MCTest.sol";

library Dummy {
Expand All @@ -27,4 +28,8 @@ library Dummy {
return mc.createMockDictionary().addr;
}

function contractAddr() internal returns(address) {
return address(new DummyContract());
}

}
4 changes: 4 additions & 0 deletions test/utils/DummyContract.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract DummyContract {}
Loading