package Ġcom . github . ek ame kas . k oin . transaction . domain . use _ case . transaction _ category Ċ Ċ import Ġcom . github . ek ame kas . b aha . core . domain . entity . Result Ċ import Ġcom . github . ek ame kas . k oin . transaction . Coroutine Test Rule Ċ import Ġcom . github . ek ame kas . k oin . transaction . domain . entity . Transaction Category Ċ import Ġcom . github . ek ame kas . k oin . transaction . domain . repository . IT rans action Repository Ċ import Ġcom . github . ek ame kas . k oin . transaction . domain . use _ case . IT rans action UseCase Ċ import Ġcom . github . ek ame kas . k oin . transaction . domain . validator . IT rans action Validator Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ /** Ċ Ġ* ĠTesting Ġsuite Ġfor Ġ[ Put Single Transaction Category UseCase ] Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ class ĠPut Single Transaction Category UseCase Test Ġ{ ĊĊĠĠĠ Ġ@ get : ĠRule ĊĠĠĠ Ġval Ġcoroutine Rule Ġ= ĠCor outine Test Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġtransaction Category Repository : ĠI Transaction Repository . Transaction Category ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġtransaction Category Validator : ĠI Transaction Validator . Transaction Category ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuse Case : ĠI Transaction UseCase . Transaction Category . Put Single Transaction Category UseCase ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġuse Case Ġ= ĠPut Single Transaction Category UseCase ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Ġ= Ġcoroutine Rule . dispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Category Repository Ġ= Ġtransaction Category Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Category Validator Ġ= Ġtransaction Category Validator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrun _ when _ validator Return Error _ then _ return Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Ġ= ĠI Transaction UseCase . Transaction Category . Put Single Transaction Category UseCase . Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( transaction Category Validator . validate ( param . transaction Category )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Result . Error ( RuntimeException (" expected Ġerror "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . invoke ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( result Ġis ĠResult . Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrun _ when _ validator Return Success And Repository Return Error _ then _ return Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Ġ= ĠI Transaction UseCase . Transaction Category . Put Single Transaction Category UseCase . Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( transaction Category Validator . validate ( param . transaction Category )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Result . Success ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( transaction Category Repository . put Transaction Category ( param . transaction Category )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Result . Error ( RuntimeException (" expected Ġerror "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . invoke ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( result Ġis ĠResult . Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrun _ when _ validator Return Success And Repository Return Success _ then _ return Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Ġ= ĠI Transaction UseCase . Transaction Category . Put Single Transaction Category UseCase . Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Category ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( transaction Category Validator . validate ( param . transaction Category )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Result . Success ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito .` when `( transaction Category Repository . put Transaction Category ( param . transaction Category )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Result . Success ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . invoke ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( result Ġis ĠResult . Success ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠNotImplementedError :: class ) ĊĠĠĠ Ġfun Ġcancel _ then _ throw NotImplemented Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġact ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġassert ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }