@@ -166,4 +166,77 @@ 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 flip pause state" , async function ( ) {
179
+ expect ( await tokenConverter . paused ( ) ) . to . be . false ;
180
+ await expect ( tokenConverter . connect ( owner ) . flipPauseState ( ) )
181
+ . to . emit ( tokenConverter , "Paused" )
182
+ . withArgs ( owner . address ) ;
183
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
184
+ await expect ( tokenConverter . connect ( owner ) . flipPauseState ( ) )
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 flip pause state" , async function ( ) {
191
+ await expect ( tokenConverter . connect ( user ) . flipPauseState ( ) )
192
+ . to . be . revertedWithCustomError ( tokenConverter , "OwnableUnauthorizedAccount" )
193
+ . withArgs ( user . address ) ;
194
+ } ) ;
195
+
196
+ it ( "convertTokens should revert when paused" , async function ( ) {
197
+ await tokenConverter . connect ( owner ) . flipPauseState ( ) ; // Pause the contract
198
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
199
+ await expect ( tokenConverter . connect ( user ) . convertTokens ( bigAtomicTestAmount ) )
200
+ . to . be . revertedWithCustomError ( tokenConverter , "EnforcedPause" ) ;
201
+ } ) ;
202
+
203
+ it ( "convertTokens should work when unpaused" , async function ( ) {
204
+ await tokenConverter . connect ( owner ) . flipPauseState ( ) ; // Pause
205
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
206
+ await tokenConverter . connect ( owner ) . flipPauseState ( ) ; // Unpause
207
+ expect ( await tokenConverter . paused ( ) ) . to . be . false ;
208
+
209
+ const initialTokenBBalance = await tokenBERC20 . balanceOf ( user . address ) ;
210
+ await tokenConverter . connect ( user ) . convertTokens ( bigAtomicTestAmount ) ;
211
+ const amountB = bigAtomicTestAmount * firstRate . numerator / firstRate . denominator ;
212
+ expect ( await tokenBERC20 . balanceOf ( user . address ) ) . to . equal ( initialTokenBBalance + amountB ) ;
213
+ } ) ;
214
+
215
+ it ( "depositTokenB should still work when paused" , async function ( ) {
216
+ await tokenConverter . connect ( owner ) . flipPauseState ( ) ; // Pause the contract
217
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
218
+
219
+ const depositAmount = ethers . parseUnits ( "100" , decimalsTokenB ) ;
220
+ const initialContractTokenBBalance = await tokenBERC20 . balanceOf ( tokenConverter . getAddress ( ) ) ;
221
+
222
+ await tokenBERC20 . connect ( owner ) . approve ( tokenConverter . getAddress ( ) , depositAmount ) ;
223
+ await expect ( tokenConverter . connect ( owner ) . depositTokenB ( depositAmount ) ) . to . not . be . reverted ;
224
+
225
+ expect ( await tokenBERC20 . balanceOf ( tokenConverter . getAddress ( ) ) ) . to . equal ( initialContractTokenBBalance + depositAmount ) ;
226
+ } ) ;
227
+
228
+ it ( "withdrawTokenB should still work when paused" , async function ( ) {
229
+ // Deposit some tokens first to withdraw
230
+ const depositAmount = ethers . parseUnits ( "100" , decimalsTokenB ) ;
231
+ await tokenBERC20 . connect ( owner ) . approve ( tokenConverter . getAddress ( ) , depositAmount ) ;
232
+ await tokenConverter . connect ( owner ) . depositTokenB ( depositAmount ) ;
233
+ const initialOwnerTokenBBalance = await tokenBERC20 . balanceOf ( owner . address ) ;
234
+
235
+ await tokenConverter . connect ( owner ) . flipPauseState ( ) ; // Pause the contract
236
+ expect ( await tokenConverter . paused ( ) ) . to . be . true ;
237
+
238
+ await expect ( tokenConverter . connect ( owner ) . withdrawTokenB ( depositAmount ) ) . to . not . be . reverted ;
239
+ expect ( await tokenBERC20 . balanceOf ( owner . address ) ) . to . equal ( initialOwnerTokenBBalance + depositAmount ) ;
240
+ } ) ;
241
+ } ) ;
169
242
} ) ;
0 commit comments