@@ -156,4 +156,67 @@ contract HokuTest is Test {
156156 vm.prank (user);
157157 token.transfer (address (0x456 ), 100 );
158158 }
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 (
177+ abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " ,
178+ pauser,
179+ adminRole
180+ )
181+ );
182+ token.unpause ();
183+
184+ // Random address cannot pause
185+ vm.prank (user);
186+ vm.expectRevert (
187+ abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " ,
188+ user,
189+ pauserRole
190+ )
191+ );
192+ token.pause ();
193+
194+ // Admin can unpause
195+ vm.prank (TESTER);
196+ token.unpause ();
197+ assertFalse (token.paused ());
198+ }
199+
200+ function testRemoveAdminPauserRole () public {
201+ bytes32 pauserRole = token.PAUSER_ROLE ();
202+
203+ // Initially admin can pause
204+ vm.prank (TESTER);
205+ token.pause ();
206+ assertTrue (token.paused ());
207+
208+ // Remove PAUSER_ROLE from admin
209+ vm.prank (TESTER);
210+ token.revokeRole (pauserRole, TESTER);
211+
212+ // Admin can no longer pause after role removal
213+ vm.prank (TESTER);
214+ vm.expectRevert (
215+ abi.encodeWithSignature ("AccessControlUnauthorizedAccount(address,bytes32) " ,
216+ TESTER,
217+ pauserRole
218+ )
219+ );
220+ token.pause ();
221+ }
159222}
0 commit comments