@@ -156,4 +156,54 @@ contract RecallTest is Test {
156
156
vm.prank (user);
157
157
token.transfer (address (0x456 ), 100 );
158
158
}
159
+
160
+ function testPauserRolePermissions () public {
161
+ address pauser = address (0x789 );
162
+ bytes32 pauserRole = token.PAUSER_ROLE ();
163
+ bytes32 adminRole = token.ADMIN_ROLE ();
164
+
165
+ // Grant PAUSER_ROLE to new address
166
+ vm.prank (TESTER);
167
+ token.grantRole (pauserRole, pauser);
168
+
169
+ // Pauser can pause
170
+ vm.prank (pauser);
171
+ token.pause ();
172
+ assertTrue (token.paused ());
173
+
174
+ // Pauser cannot unpause (only ADMIN can)
175
+ vm.prank (pauser);
176
+ vm.expectRevert (abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " , pauser, adminRole));
177
+ token.unpause ();
178
+
179
+ // Random address cannot pause
180
+ vm.prank (user);
181
+ vm.expectRevert (abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " , user, pauserRole));
182
+ token.pause ();
183
+
184
+ // Admin can unpause
185
+ vm.prank (TESTER);
186
+ token.unpause ();
187
+ assertFalse (token.paused ());
188
+ }
189
+
190
+ function testRemoveAdminPauserRole () public {
191
+ bytes32 pauserRole = token.PAUSER_ROLE ();
192
+
193
+ // Initially admin can pause
194
+ vm.prank (TESTER);
195
+ token.pause ();
196
+ assertTrue (token.paused ());
197
+
198
+ // Remove PAUSER_ROLE from admin
199
+ vm.prank (TESTER);
200
+ token.revokeRole (pauserRole, TESTER);
201
+
202
+ // Admin can no longer pause after role removal
203
+ vm.prank (TESTER);
204
+ vm.expectRevert (
205
+ abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " , TESTER, pauserRole)
206
+ );
207
+ token.pause ();
208
+ }
159
209
}
0 commit comments