/
OwnerFunctions.ft.sol
122 lines (95 loc) · 4.69 KB
/
OwnerFunctions.ft.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// SPDX-License-Identifier: GPL-2.0-or-later
import "forge-std/Test.sol";
import {IUniswapV3Factory} from "v3-core/contracts/interfaces/IUniswapV3Factory.sol";
import {IUniswapV3Pool} from "v3-core/contracts/interfaces/IUniswapV3Pool.sol";
import {PaprController} from "../../src/PaprController.sol";
import {IPaprController} from "../../src/interfaces/IPaprController.sol";
import {PaprToken} from "../../src/PaprToken.sol";
import {TestERC721} from "../mocks/TestERC721.sol";
import {TestERC20} from "../mocks/TestERC20.sol";
import {MainnetForking} from "../base/MainnetForking.sol";
import {UniswapForking} from "../base/UniswapForking.sol";
contract OwnerFunctionsTest is MainnetForking, UniswapForking {
TestERC721 nft = new TestERC721();
TestERC20 underlying = new TestERC20();
PaprController controller;
function setUp() public {
controller = new PaprController("PUNKs Loans", "PL", 0.1e18, 2e18, 0.8e18, underlying, address(1));
}
function testSetAllowedCollateralFailsIfNotOwner() public {
IPaprController.CollateralAllowedConfig[] memory args = new IPaprController.CollateralAllowedConfig[](1);
args[0] = IPaprController.CollateralAllowedConfig(address(nft), true);
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.setAllowedCollateral(args);
}
function testSetAllowedCollateralRevertsIfCollateralZeroAddress() public {
IPaprController.CollateralAllowedConfig[] memory args = new IPaprController.CollateralAllowedConfig[](1);
args[0] = IPaprController.CollateralAllowedConfig(address(0), true);
vm.expectRevert(IPaprController.InvalidCollateral.selector);
controller.setAllowedCollateral(args);
}
function testSetAllowedCollateralWorksIfOwner() public {
IPaprController.CollateralAllowedConfig[] memory args = new IPaprController.CollateralAllowedConfig[](1);
args[0] = IPaprController.CollateralAllowedConfig(address(nft), true);
controller.setAllowedCollateral(args);
assertTrue(controller.isAllowed(address(nft)));
}
function testSetPoolRevertsIfNotOwner() public {
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.setPool(address(1));
}
function testSetFundingPeriodRevertsIfNotOwner() public {
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.setFundingPeriod(1);
}
function testSendPaprFromAuctionFeesWorksIfOwner() public {
PaprToken paprToken = PaprToken(address(controller.papr()));
vm.startPrank(address(controller));
paprToken.mint(address(controller), 1e18);
paprToken.approve(address(controller), 1e18);
vm.stopPrank();
assertEq(paprToken.balanceOf(address(controller)), 1e18);
controller.sendPaprFromAuctionFees(address(1), 1e18);
assertEq(paprToken.balanceOf(address(controller)), 0);
assertEq(paprToken.balanceOf(address(1)), 1e18);
}
function testSendPaprFromAuctionFeesRevertsIfNotOwner() public {
PaprToken paprToken = PaprToken(address(controller.papr()));
vm.startPrank(address(controller));
paprToken.mint(address(controller), 1e18);
paprToken.approve(address(controller), 1e18);
vm.stopPrank();
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.sendPaprFromAuctionFees(address(1), 1e18);
}
function testBurnPaprFromAuctionFeesWorksIfOwner() public {
PaprToken paprToken = PaprToken(address(controller.papr()));
vm.startPrank(address(controller));
paprToken.mint(address(controller), 1e18);
paprToken.approve(address(controller), 1e18);
vm.stopPrank();
assertEq(paprToken.balanceOf(address(controller)), 1e18);
assertEq(paprToken.totalSupply(), 1e18);
controller.burnPaprFromAuctionFees(1e18);
assertEq(paprToken.balanceOf(address(controller)), 0);
assertEq(paprToken.totalSupply(), 0);
}
function testBurnPaprFromAuctionFeesRevertsIfNotOwner() public {
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.burnPaprFromAuctionFees(1e18);
}
function testSetLiquidationsLockedUpdatesLiquidationsLocked() public {
controller.setLiquidationsLocked(true);
assertTrue(controller.liquidationsLocked());
}
function testSetLiquidationsLockedRevertsIfCallerNotOwner() public {
vm.startPrank(address(1));
vm.expectRevert("Ownable: caller is not the owner");
controller.setLiquidationsLocked(false);
}
}