package Ġru . ot us . spring . k ush ch enko . hw 6 . repository Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify No More Interactions Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġorg . assertj . core . api . Assertions Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġru . ot us . spring . k ush ch enko . hw 6 . entity . Book Ċ import Ġru . ot us . spring . k ush ch enko . hw 6 . entity . User Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠÐķ Ð»ÐµÐ½ Ð° Ġon ĠÐĲ Ð² Ð³ ., Ġ 2 0 1 8 Ċ Ġ*/ Ċ class ĠLibrary Dao Impl Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbook Repository : ĠBook Repository Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġlibrary Dao Ġ= ĠLibrary Dao Impl ( book Repository , Ġuser Repository ) ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ DisplayName (" Tests Ġfor Ġtake Book Ġmethod ") ĊĠĠĠ Ġinner Ġclass ĠTake Book Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġshould Pass Successfully () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( id Ġ= Ġbook Id , Ġname Ġ= Ġ" Book 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( id Ġ= ĠuserId , Ġname Ġ= Ġ" User 1 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtaken Book Ġ= Ġbook . copy ( user Ġ= Ġuser ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . get ( book Id )). thenReturn ( book ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( user Repository . get ( userId )). thenReturn ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . update ( book Id , Ġtaken Book )). thenReturn ( taken Book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Dao . take Book ( book Id , ĠuserId ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). get ( book Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( user Repository ). get ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). update ( book Id , Ġtaken Book ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( book Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġshould Fall When Book Is Already Taken () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( id Ġ= Ġ 1 , Ġname Ġ= Ġ" User 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( id Ġ= Ġbook Id , Ġname Ġ= Ġ" Book 1 ", Ġuser Ġ= Ġuser ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . get ( book Id )). thenReturn ( book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat Thrown By Ġ{ Ġlibrary Dao . take Book ( book Id , ĠuserId ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( IllegalStateException :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). get ( book Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( book Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ DisplayName (" Tests Ġfor Ġreturn Book Ġmethod ") ĊĠĠĠ Ġinner Ġclass ĠReturn Book Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġshould Pass Successfully () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( id Ġ= ĠuserId , Ġname Ġ= Ġ" User 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( id Ġ= Ġbook Id , Ġname Ġ= Ġ" Book 1 ", Ġuser Ġ= Ġuser ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfree Book Ġ= Ġbook . copy ( user Ġ= Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . get ( book Id )). thenReturn ( book ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( user Repository . get ( userId )). thenReturn ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . update ( book Id , Ġfree Book )). thenReturn ( free Book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Dao . return Book ( book Id , ĠuserId ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). get ( book Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( user Repository ). get ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). update ( book Id , Ġfree Book ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( book Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġshould Fall When Book Is Already Free () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= ĠBook ( id Ġ= Ġbook Id , Ġname Ġ= Ġ" Book 1 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( book Repository . get ( book Id )). thenReturn ( book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertThat Thrown By Ġ{ Ġlibrary Dao . return Book ( book Id , ĠuserId ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( IllegalStateException :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( book Repository ). get ( book Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( book Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify No More Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }