// package Ġio . horizontal systems . bitcoin core . managers Ċ // Ċ // import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ // import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ // import Ġio . horizontal systems . bitcoin core . core . I Initial Sync Api Ċ // import Ġio . horizontal systems . bitcoin core . extensions . to Re versed Hex Ċ // import Ġio . horizontal systems . bitcoin core . models . PublicKey Ċ // import Ġorg . junit . Assert Ċ // import Ġorg . mockito . Mockito Ċ // import Ġorg . spe k framework . spe k 2 . Spe k Ċ // import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ // Ċ // object ĠBlock Hash Fetcher Test Ġ: ĠSpe k ({ Ċ // Ċ // ĠĠĠ Ġval Ġrestore Key Converter Ġ= ĠMockito . mock ( I Restore Key Converter :: class . java ) Ċ // ĠĠĠ Ġval Ġinitial Sync Api Ġ= ĠMockito . mock ( I Initial Sync Api :: class . java ) Ċ // ĠĠĠ Ġval Ġhelper Ġ= ĠMockito . mock ( Block Hash Fetcher Helper :: class . java ) Ċ // Ċ // ĠĠĠ Ġval Ġblock Hash Fetcher Ġ= ĠBlock Hash Fetcher ( restore Key Converter , Ġinitial Sync Api , Ġhelper ) Ċ // Ċ // ĠĠĠ Ġdescribe ("# getBlock Hashes ") Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġit (" gets Ġempty ĠBlock Hash 's ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 0 Ġ= Ġmock < PublicKey >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 1 Ġ= Ġmock < PublicKey >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 2 Ġ= Ġmock < PublicKey >() Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 0 Ġ= ĠlistOf (" 0 _ 0 ", Ġ" 0 _ 1 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 1 Ġ= ĠlistOf (" 1 _ 0 ", Ġ" 1 _ 1 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 2 Ġ= ĠlistOf (" 2 _ 0 ", Ġ" 2 _ 1 ") Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= Ġaddresses 0 Ġ+ Ġaddresses 1 Ġ+ Ġaddresses 2 Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 0 )). thenReturn ( addresses 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 1 )). thenReturn ( addresses 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 2 )). thenReturn ( addresses 2 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( initial Sync Api . get Transactions ( addresses )). thenReturn ( listOf ()) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( block Hashes , Ġlast Used Index ) Ġ= Ġblock Hash Fetcher . getBlock Hashes ( listOf ( publicKey 0 , ĠpublicKey 1 , ĠpublicKey 2 )) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( block Hashes . isEmpty ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 , Ġlast Used Index ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġit (" gets Ġnon Ġempty ĠBlock Hash 's ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 0 Ġ= Ġmock < PublicKey >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 1 Ġ= Ġmock < PublicKey >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey 2 Ġ= Ġmock < PublicKey >() Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 0 Ġ= ĠlistOf (" 0 _ 0 ", Ġ" 0 _ 1 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 1 Ġ= ĠlistOf (" 1 _ 0 ", Ġ" 1 _ 1 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses 2 Ġ= ĠlistOf (" 2 _ 0 ", Ġ" 2 _ 1 ") Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddresses Ġ= Ġaddresses 0 Ġ+ Ġaddresses 1 Ġ+ Ġaddresses 2 Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 0 )). thenReturn ( addresses 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 1 )). thenReturn ( addresses 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( restore Key Converter . keys For Api Restore ( publicKey 2 )). thenReturn ( addresses 2 ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Response 0 Ġ= Ġmock < Transaction Item >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 0 . block Height ). thenReturn ( 1 2 3 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 0 . block Hash ). thenReturn (" 1 2 3 4 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 0 . tx Outputs ). thenReturn ( listOf ()) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Response 1 Ġ= Ġmock < Transaction Item >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 1 . block Height ). thenReturn ( 5 6 7 8 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 1 . block Hash ). thenReturn (" 5 6 7 8 ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transaction Response 1 . tx Outputs ). thenReturn ( listOf ()) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( initial Sync Api . get Transactions ( addresses )). thenReturn ( listOf ( transaction Response 0 , Ġtransaction Response 1 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Used Index Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( helper . last Used Index ( listOf ( addresses 0 , Ġaddresses 1 , Ġaddresses 2 ), ĠlistOf ())). thenReturn ( last Used Index ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( block Hashes , Ġactual Last Used Index ) Ġ= Ġblock Hash Fetcher . getBlock Hashes ( listOf ( publicKey 0 , ĠpublicKey 1 , ĠpublicKey 2 )) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( last Used Index , Ġactual Last Used Index ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġblock Hashes . size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 1 2 3 4 ", Ġblock Hashes . first (). header Hash . to Re versed Hex ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 2 3 4 , Ġblock Hashes . first (). height ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 5 6 7 8 ", Ġblock Hashes . last (). header Hash . to Re versed Hex ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 5 6 7 8 , Ġblock Hashes . last (). height ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // }) Ċ