@@ -166,4 +166,80 @@ describe("TokenConverter Contract Tests", function () {
166
166
. to . be . revertedWith ( "Insufficient Token B in contract" ) ;
167
167
} ) ;
168
168
} ) ;
169
+
170
+ describe ( "Pausable functionality" , function ( ) {
171
+ beforeEach ( async function ( ) {
172
+ // Ensure contract is seeded with TokenB for conversion tests
173
+ let testAmountInContract = ethers . parseUnits ( "10000" , decimalsTokenB ) ;
174
+ await tokenBERC20 . approve ( tokenConverter , bigAtomicTestAmountInContract ) ;
175
+ await tokenConverter . depositTokenB ( bigAtomicTestAmountInContract ) ;
176
+ } ) ;
177
+
178
+ it ( "Should allow owner to pause and unpause" , async function ( ) {
179
+ expect ( await tokenConverter . paused ( ) ) . to . be . false ;
180
+ await expect ( tokenConverter . connect ( owner ) . pause ( ) )
181
+ . to . emit ( tokenConverter , "Paused" )
182
+ . withArgs ( owner . address ) ;
183
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
184
+ await expect ( tokenConverter . connect ( owner ) . unpause ( ) )
185
+ . to . emit ( tokenConverter , "Unpaused" )
186
+ . withArgs ( owner . address ) ;
187
+ expect ( await tokenConverter . paused ( ) ) . to . be . false ;
188
+ } ) ;
189
+
190
+ it ( "Should not allow non-owner to pause or unpause" , async function ( ) {
191
+ await expect ( tokenConverter . connect ( user ) . pause ( ) )
192
+ . to . be . revertedWithCustomError ( tokenConverter , "OwnableUnauthorizedAccount" )
193
+ . withArgs ( user . address ) ;
194
+ await expect ( tokenConverter . connect ( user ) . unpause ( ) )
195
+ . to . be . revertedWithCustomError ( tokenConverter , "OwnableUnauthorizedAccount" )
196
+ . withArgs ( user . address ) ;
197
+ } ) ;
198
+
199
+ it ( "convertTokens should revert when paused" , async function ( ) {
200
+ await tokenConverter . connect ( owner ) . pause ( ) ; // Pause the contract
201
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
202
+ await expect ( tokenConverter . connect ( user ) . convertTokens ( bigAtomicTestAmount ) )
203
+ . to . be . revertedWithCustomError ( tokenConverter , "EnforcedPause" ) ;
204
+ } ) ;
205
+
206
+ it ( "convertTokens should work when unpaused" , async function ( ) {
207
+ await tokenConverter . connect ( owner ) . pause ( ) ; // Pause
208
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
209
+ await tokenConverter . connect ( owner ) . unpause ( ) ; // Unpause
210
+ expect ( await tokenConverter . paused ( ) ) . to . be . false ;
211
+
212
+ const initialTokenBBalance = await tokenBERC20 . balanceOf ( user . address ) ;
213
+ await tokenConverter . connect ( user ) . convertTokens ( bigAtomicTestAmount ) ;
214
+ const amountB = bigAtomicTestAmount * firstRate . numerator / firstRate . denominator ;
215
+ expect ( await tokenBERC20 . balanceOf ( user . address ) ) . to . equal ( initialTokenBBalance + amountB ) ;
216
+ } ) ;
217
+
218
+ it ( "depositTokenB should still work when paused" , async function ( ) {
219
+ await tokenConverter . connect ( owner ) . pause ( ) ; // Pause the contract
220
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
221
+
222
+ const depositAmount = ethers . parseUnits ( "100" , decimalsTokenB ) ;
223
+ const initialContractTokenBBalance = await tokenBERC20 . balanceOf ( tokenConverter . getAddress ( ) ) ;
224
+
225
+ await tokenBERC20 . connect ( owner ) . approve ( tokenConverter . getAddress ( ) , depositAmount ) ;
226
+ await expect ( tokenConverter . connect ( owner ) . depositTokenB ( depositAmount ) ) . to . not . be . reverted ;
227
+
228
+ expect ( await tokenBERC20 . balanceOf ( tokenConverter . getAddress ( ) ) ) . to . equal ( initialContractTokenBBalance + depositAmount ) ;
229
+ } ) ;
230
+
231
+ it ( "withdrawTokenB should still work when paused" , async function ( ) {
232
+ // Deposit some tokens first to withdraw
233
+ const depositAmount = ethers . parseUnits ( "100" , decimalsTokenB ) ;
234
+ await tokenBERC20 . connect ( owner ) . approve ( tokenConverter . getAddress ( ) , depositAmount ) ;
235
+ await tokenConverter . connect ( owner ) . depositTokenB ( depositAmount ) ;
236
+ const initialOwnerTokenBBalance = await tokenBERC20 . balanceOf ( owner . address ) ;
237
+
238
+ await tokenConverter . connect ( owner ) . pause ( ) ; // Pause the contract
239
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
240
+
241
+ await expect ( tokenConverter . connect ( owner ) . withdrawTokenB ( depositAmount ) ) . to . not . be . reverted ;
242
+ expect ( await tokenBERC20 . balanceOf ( owner . address ) ) . to . equal ( initialOwnerTokenBBalance + depositAmount ) ;
243
+ } ) ;
244
+ } ) ;
169
245
} ) ;
0 commit comments