@@ -328,23 +328,109 @@ describe('EarnPage', () => {
328328 expect ( screen . getByText ( 'earn.alert_waiting_start_title' ) ) . toBeInTheDocument ( )
329329 } )
330330
331- it ( 'opens fidelity bond actions' , async ( ) => {
332- const user = userEvent . setup ( )
331+ it ( 'display debug output in developer mode' , ( ) => {
333332 mocks . developerMode = true
334333 mocks . walletInfo . fidelityBondSummary = { fbOutputs : [ expiredBond ] }
335334
336335 render ( < EarnPage walletFileName = "wallet.jmdat" /> )
337336
338- expect ( screen . getByText ( 'fidelity-bond:bond-tx:0' ) ) . toBeInTheDocument ( )
339337 expect ( screen . getByText ( / w a l l e t I n f o \. f i d e l i t y B o n d S u m m a r y \. f b O u t p u t s / u) ) . toBeInTheDocument ( )
338+ } )
339+
340+ it ( 'enables creating a fidelity bond' , async ( ) => {
341+ const user = userEvent . setup ( )
342+
343+ expect ( mocks . walletInfo . fidelityBondSummary . fbOutputs , 'sanity check' ) . toHaveLength ( 0 )
344+
345+ render ( < EarnPage walletFileName = "wallet.jmdat" /> )
346+
347+ expect ( screen . getByText ( 'create-bond-dialog:false' ) ) . toBeInTheDocument ( )
348+
349+ const createFidelityBondButton = screen . getByRole ( 'button' , {
350+ name : 'earn.fidelity_bond.create_form.button_create' ,
351+ } )
352+ expect ( createFidelityBondButton ) . toBeEnabled ( )
353+
354+ await user . click ( createFidelityBondButton )
355+ expect ( screen . getByText ( 'create-bond-dialog:true' ) ) . toBeInTheDocument ( )
356+ } )
357+
358+ it ( 'disables creating a fidelity bond while rescanning' , async ( ) => {
359+ const user = userEvent . setup ( )
360+ setSession ( {
361+ rescanning : true ,
362+ } )
363+
364+ expect ( mocks . walletInfo . fidelityBondSummary . fbOutputs , 'sanity check' ) . toHaveLength ( 0 )
365+
366+ render ( < EarnPage walletFileName = "wallet.jmdat" /> )
367+
368+ expect ( screen . getByText ( 'create-bond-dialog:false' ) ) . toBeInTheDocument ( )
369+
370+ const createFidelityBondButton = screen . getByRole ( 'button' , {
371+ name : 'earn.fidelity_bond.create_form.button_create' ,
372+ } )
373+ expect ( createFidelityBondButton ) . toBeDisabled ( )
374+
375+ await user . click ( createFidelityBondButton )
376+ expect ( screen . getByText ( 'create-bond-dialog:false' ) ) . toBeInTheDocument ( )
377+ } )
378+
379+ it ( 'enables fidelity bond actions on existing fidelity bond' , async ( ) => {
380+ const user = userEvent . setup ( )
381+ mocks . walletInfo . fidelityBondSummary = { fbOutputs : [ expiredBond ] }
382+
383+ render ( < EarnPage walletFileName = "wallet.jmdat" /> )
340384
341- await user . click ( screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ s p e n d / u } ) )
385+ expect ( screen . getByText ( 'fidelity-bond:bond-tx:0' ) ) . toBeInTheDocument ( )
386+
387+ expect ( screen . queryByText ( 'move-to-jar-dialog:false' ) ) . not . toBeInTheDocument ( )
388+ expect ( screen . queryByText ( 'move-to-jar-dialog:true' ) ) . not . toBeInTheDocument ( )
389+ expect ( screen . queryByText ( 'renew-bond-dialog:false' ) ) . not . toBeInTheDocument ( )
390+ expect ( screen . queryByText ( 'renew-bond-dialog:true' ) ) . not . toBeInTheDocument ( )
391+
392+ const moveToJarButton = screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ s p e n d / u } )
393+ expect ( moveToJarButton ) . toBeEnabled ( )
394+
395+ await user . click ( moveToJarButton )
342396 expect ( screen . getByText ( 'move-to-jar-dialog:true' ) ) . toBeInTheDocument ( )
343397
344- await user . click ( screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ r e n e w / u } ) )
398+ const renewButton = screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ r e n e w / u } )
399+ expect ( renewButton ) . toBeEnabled ( )
400+
401+ await user . click ( renewButton )
345402 expect ( screen . getByText ( 'renew-bond-dialog:true' ) ) . toBeInTheDocument ( )
346403 } )
347404
405+ it ( 'disables fidelity bond actions on existing fidelity bond when rescanning is active' , async ( ) => {
406+ const user = userEvent . setup ( )
407+ mocks . walletInfo . fidelityBondSummary = { fbOutputs : [ expiredBond ] }
408+ setSession ( {
409+ rescanning : true ,
410+ } )
411+
412+ render ( < EarnPage walletFileName = "wallet.jmdat" /> )
413+
414+ expect ( screen . queryByText ( 'move-to-jar-dialog:false' ) ) . not . toBeInTheDocument ( )
415+ expect ( screen . queryByText ( 'move-to-jar-dialog:true' ) ) . not . toBeInTheDocument ( )
416+ expect ( screen . queryByText ( 'renew-bond-dialog:false' ) ) . not . toBeInTheDocument ( )
417+ expect ( screen . queryByText ( 'renew-bond-dialog:true' ) ) . not . toBeInTheDocument ( )
418+
419+ const moveToJarButton = screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ s p e n d / u } )
420+ expect ( moveToJarButton ) . toBeDisabled ( )
421+
422+ await user . click ( moveToJarButton )
423+ expect ( screen . queryByText ( 'move-to-jar-dialog:false' ) ) . not . toBeInTheDocument ( )
424+ expect ( screen . queryByText ( 'move-to-jar-dialog:true' ) ) . not . toBeInTheDocument ( )
425+
426+ const renewButton = screen . getByRole ( 'button' , { name : / e a r n \. f i d e l i t y _ b o n d \. e x i s t i n g \. b u t t o n _ r e n e w / u } )
427+ expect ( renewButton ) . toBeDisabled ( )
428+
429+ await user . click ( renewButton )
430+ expect ( screen . queryByText ( 'renew-bond-dialog:false' ) ) . not . toBeInTheDocument ( )
431+ expect ( screen . queryByText ( 'renew-bond-dialog:true' ) ) . not . toBeInTheDocument ( )
432+ } )
433+
348434 it ( 'shows the coinjoin-in-progress alert' , ( ) => {
349435 setSession ( { coinjoin_in_process : true } )
350436 render ( < EarnPage walletFileName = "wallet.jmdat" /> )
0 commit comments