@@ -3,26 +3,40 @@ pragma solidity ^0.8.11;
3
3
4
4
// Test imports
5
5
import "./utils/BaseTest.sol " ;
6
+ import "contracts/interfaces/ITWRegistry.sol " ;
6
7
import "contracts/TWRegistry.sol " ;
8
+ import "./mocks/MockThirdwebContract.sol " ;
7
9
8
10
interface ITWRegistryData {
9
- event Added (address indexed deployer , address indexed moduleAddress );
10
- event Deleted (address indexed deployer , address indexed moduleAddress );
11
+ event Added (address indexed deployer , address indexed moduleAddress , uint256 indexed chainid );
12
+ event Deleted (address indexed deployer , address indexed moduleAddress , uint256 indexed chainid );
11
13
}
12
14
13
15
contract TWRegistryTest is ITWRegistryData , BaseTest {
14
16
// Target contract
15
17
TWRegistry internal _registry;
16
18
17
19
// Test params
18
- address internal mockModuleAddress = address (0x42 );
19
- address internal actor;
20
+ uint256 [] internal chainIds;
21
+ address [] internal deploymentAddresses;
22
+ address internal deployer_;
23
+
24
+ uint256 total = 1000 ;
20
25
21
26
// ===== Set up =====
22
27
23
28
function setUp () public override {
24
29
super .setUp ();
25
- actor = getActor (0 );
30
+
31
+ deployer_ = getActor (100 );
32
+
33
+ for (uint256 i = 0 ; i < total; i += 1 ) {
34
+ chainIds.push (i);
35
+ vm.prank (deployer_);
36
+ address depl = address (new MockThirdwebContract ());
37
+ deploymentAddresses.push (depl);
38
+ }
39
+
26
40
_registry = TWRegistry (registry);
27
41
}
28
42
@@ -31,96 +45,135 @@ contract TWRegistryTest is ITWRegistryData, BaseTest {
31
45
/// @dev Test `add`
32
46
33
47
function test_addFromFactory () public {
34
- vm.prank (factory);
35
- _registry.add (actor, mockModuleAddress);
48
+ vm.startPrank (factory);
49
+ for (uint256 i = 0 ; i < total; i += 1 ) {
50
+ _registry.add (deployer_, deploymentAddresses[i], chainIds[i]);
51
+ }
52
+ vm.stopPrank ();
53
+
54
+ ITWRegistry.Deployment[] memory modules = _registry.getAll (deployer_);
55
+
56
+ assertEq (modules.length , total);
57
+ assertEq (_registry.count (deployer_), total);
36
58
37
- address [] memory modules = _registry. getAll (actor);
38
- assertEq (modules. length , 1 );
39
- assertEq (modules[0 ], mockModuleAddress );
40
- assertEq (_registry. count (actor), 1 );
59
+ for ( uint256 i = 0 ; i < total; i += 1 ) {
60
+ assertEq (modules[i].deploymentAddress, deploymentAddresses[i] );
61
+ assertEq (modules[i].chainId, chainIds[i] );
62
+ }
41
63
42
64
vm.prank (factory);
43
- _registry.add (actor , address (0x43 ));
65
+ _registry.add (deployer_ , address (0x43 ), 111 );
44
66
45
- modules = _registry.getAll (actor );
46
- assertEq (modules.length , 2 );
47
- assertEq (_registry.count (actor ), 2 );
67
+ modules = _registry.getAll (deployer_ );
68
+ assertEq (modules.length , total + 1 );
69
+ assertEq (_registry.count (deployer_ ), total + 1 );
48
70
}
49
71
50
72
function test_addFromSelf () public {
51
- vm.prank (actor);
52
- _registry.add (actor, mockModuleAddress);
73
+ vm.startPrank (deployer_);
74
+ for (uint256 i = 0 ; i < total; i += 1 ) {
75
+ _registry.add (deployer_, deploymentAddresses[i], chainIds[i]);
76
+ }
77
+ vm.stopPrank ();
78
+
79
+ ITWRegistry.Deployment[] memory modules = _registry.getAll (deployer_);
80
+
81
+ assertEq (modules.length , total);
82
+ assertEq (_registry.count (deployer_), total);
53
83
54
- address [] memory modules = _registry.getAll (actor);
84
+ for (uint256 i = 0 ; i < total; i += 1 ) {
85
+ assertEq (modules[i].deploymentAddress, deploymentAddresses[i]);
86
+ assertEq (modules[i].chainId, chainIds[i]);
87
+ }
55
88
56
- assertEq (modules.length , 1 );
57
- assertEq (modules[0 ], mockModuleAddress);
58
- assertEq (_registry.count (actor), 1 );
89
+ vm.prank (factory);
90
+ _registry.add (deployer_, address (0x43 ), 111 );
91
+
92
+ modules = _registry.getAll (deployer_);
93
+ assertEq (modules.length , total + 1 );
94
+ assertEq (_registry.count (deployer_), total + 1 );
59
95
}
60
96
61
97
function test_add_emit_Added () public {
62
- vm.expectEmit (true , true , false , true );
63
- emit Added (actor, mockModuleAddress );
98
+ vm.expectEmit (true , true , true , true );
99
+ emit Added (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
64
100
65
101
vm.prank (factory);
66
- _registry.add (actor, mockModuleAddress );
102
+ _registry.add (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
67
103
}
68
104
69
105
// Test `remove`
70
106
71
107
function setUp_remove () public {
72
- vm.prank (factory);
73
- _registry.add (actor, mockModuleAddress);
108
+ vm.startPrank (factory);
109
+ for (uint256 i = 0 ; i < total; i += 1 ) {
110
+ _registry.add (deployer_, deploymentAddresses[i], chainIds[i]);
111
+ }
112
+ vm.stopPrank ();
74
113
}
75
114
76
115
// ===== Functionality tests =====
77
116
function test_removeFromFactory () public {
78
117
setUp_remove ();
79
118
vm.prank (factory);
80
- _registry.remove (actor, mockModuleAddress );
119
+ _registry.remove (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
81
120
82
- address [] memory modules = _registry.getAll (actor);
83
- assertEq (modules.length , 0 );
121
+ ITWRegistry.Deployment[] memory modules = _registry.getAll (deployer_);
122
+ assertEq (modules.length , total - 1 );
123
+
124
+ for (uint256 i = 0 ; i < total - 1 ; i += 1 ) {
125
+ assertEq (modules[i].deploymentAddress, deploymentAddresses[i + 1 ]);
126
+ assertEq (modules[i].chainId, chainIds[i + 1 ]);
127
+ }
84
128
}
85
129
86
130
function test_removeFromSelf () public {
87
131
setUp_remove ();
88
- vm.prank (actor );
89
- _registry.remove (actor, mockModuleAddress );
132
+ vm.prank (factory );
133
+ _registry.remove (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
90
134
91
- address [] memory modules = _registry.getAll (actor );
92
- assertEq (modules.length , 0 );
135
+ ITWRegistry.Deployment [] memory modules = _registry.getAll (deployer_ );
136
+ assertEq (modules.length , total - 1 );
93
137
}
94
138
95
139
function test_remove_revert_invalidCaller () public {
96
140
setUp_remove ();
97
141
address invalidCaller = address (0x123 );
98
- assertTrue (invalidCaller != factory || invalidCaller != actor );
142
+ assertTrue (invalidCaller != factory || invalidCaller != deployer_ );
99
143
100
144
vm.expectRevert ("not operator or deployer. " );
101
145
102
146
vm.prank (invalidCaller);
103
- _registry.remove (actor, mockModuleAddress );
147
+ _registry.remove (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
104
148
}
105
149
106
150
function test_remove_revert_noModulesToRemove () public {
107
151
setUp_remove ();
108
- actor = getActor (1 );
109
- address [] memory modules = _registry.getAll (actor);
152
+ address actor = getActor (1 );
153
+ ITWRegistry.Deployment [] memory modules = _registry.getAll (actor);
110
154
assertEq (modules.length , 0 );
111
155
112
156
vm.expectRevert ("failed to remove " );
113
157
114
158
vm.prank (actor);
115
- _registry.remove (actor, mockModuleAddress);
159
+ _registry.remove (actor, deploymentAddresses[0 ], chainIds[0 ]);
160
+ }
161
+
162
+ function test_remove_revert_incorrectChainId () public {
163
+ setUp_remove ();
164
+
165
+ vm.expectRevert ("failed to remove " );
166
+
167
+ vm.prank (deployer_);
168
+ _registry.remove (deployer_, deploymentAddresses[0 ], 12345 );
116
169
}
117
170
118
171
function test_remove_emit_Deleted () public {
119
172
setUp_remove ();
120
- vm.expectEmit (true , true , false , true );
121
- emit Deleted (actor, mockModuleAddress );
173
+ vm.expectEmit (true , true , true , true );
174
+ emit Deleted (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
122
175
123
- vm.prank (actor );
124
- _registry.remove (actor, mockModuleAddress );
176
+ vm.prank (deployer_ );
177
+ _registry.remove (deployer_, deploymentAddresses[ 0 ], chainIds[ 0 ] );
125
178
}
126
179
}
0 commit comments