package Ġcom . s achin r ana . nag p . eb ro ker . e Broker . unit Ċ Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . dto . request . Buy Equ ity Request Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . dto . request . Sell Equ ity Request Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . entity . Equ ity Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . entity . Equ ity Transaction Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . entity . Tr ader Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . entity . Tr ader Equ ity Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . repository . Equ ity Repository Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . repository . Equ ity Transaction Repository Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . repository . Tr ader Equ ity Repository Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . repository . Tr ader Repository Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . service . impl . Trading ServiceImpl Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . util . Transaction Type Ċ import Ġcom . s achin r ana . nag p . eb ro ker . e Broker . util . Util Ċ import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Inject Mock Ks Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assert Throws Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* ĊĊ Ċ internal Ġclass ĠTr ading ServiceImpl Test Ġ{ ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġtr ader Repository : ĠTr ader Repository ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġequ ity Repository : ĠEqu ity Repository ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġtr ader Equ ity Repository : ĠTr ader Equ ity Repository ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġequ ity Transaction Repository : ĠEqu ity Transaction Repository ĊĊĠĠĠ Ġ@ Inject Mock Ks ĊĠĠĠ Ġlateinit Ġvar Ġtrading Service : ĠTr ading ServiceImpl ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ Ġmock k Object ( Util ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġable Ġto Ġbuy Ġequ ity Ġwhen Ġfund Ġis Ġins ufficient `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtr ader Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġequ ity Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠUtil . isValid Trading Time () Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . findById ( tr ader Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . findById ( equ ity Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTr ader Equ ity ( tr ader Id Ġ= Ġtr ader Id , Ġequ ity Id Ġ= Ġequ ity Id , Ġquantity Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġtr ader Equ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġtr ader Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġequ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġequ ity Transaction Repository . save And Flush ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows ( Exception :: class . java ) Ġ{ Ġtrading Service . buy Equ ity ( Buy Equ ity Request ( tr ader Id , Ġequ ity Id , Ġ 3 )) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" Ins ufficient Ġfunds ", Ġex . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġable Ġto Ġbuy Ġequ ity Ġquantity Ġis Ġnot Ġavailable `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtr ader Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġequ ity Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠUtil . isValid Trading Time () Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . findById ( tr ader Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . findById ( equ ity Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTr ader Equ ity ( tr ader Id Ġ= Ġtr ader Id , Ġequ ity Id Ġ= Ġequ ity Id , Ġquantity Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġtr ader Equ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġtr ader Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġequ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġequ ity Transaction Repository . save And Flush ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows ( Exception :: class . java ) Ġ{ Ġtrading Service . buy Equ ity ( Buy Equ ity Request ( tr ader Id , Ġequ ity Id , Ġ 1 1 )) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 1 Ġquantity Ġnot Ġavailable , Ġcurrent Ġavailable Ġquantity Ġis Ġ 1 0 Ġ", Ġex . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġable Ġto Ġbuy Ġequ ity Ġwhen Ġquantity Ġis Ġavailable Ġand Ġtr ader Ġhas Ġsufficient Ġbalance `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtr ader Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġequ ity Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠUtil . isValid Trading Time () Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . findById ( tr ader Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . findById ( equ ity Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTr ader Equ ity ( tr ader Id Ġ= Ġtr ader Id , Ġequ ity Id Ġ= Ġequ ity Id , Ġquantity Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Equ ity Repository . save And Flush ( any ()) Ġ} Ġreturns ĠTr ader Equ ity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . save And Flush ( any ()) Ġ} Ġreturns ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 3 0 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . save And Flush ( any ()) Ġ} Ġreturns ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Transaction Repository . save ( any ()) Ġ} Ġreturns ĠEqu ity Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Type Ġ= ĠTransaction Type . BU Y ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtrading Service . buy Equ ity ( Buy Equ ity Request ( tr ader Id , Ġequ ity Id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtr ader Equ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġable Ġto Ġsell Ġequ ity Ġwhen Ġsell ing Ġquantity Ġis Ġgreater Ġthan Ġtr ader Ġhold `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtr ader Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġequ ity Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠUtil . isValid Trading Time () Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . findById ( tr ader Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . findById ( equ ity Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTr ader Equ ity ( tr ader Id Ġ= Ġtr ader Id , Ġequ ity Id Ġ= Ġequ ity Id , Ġquantity Ġ= Ġ 1 ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows ( Exception :: class . java ) Ġ{ Ġtrading Service . sell Equ ity ( Sell Equ ity Request ( tr ader Id , Ġequ ity Id , Ġ 2 )) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" You Ġcan Ġnot Ġsell Ġquantity Ġmore Ġthan Ġyou Ġhold . Ġ", Ġex . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġable Ġto Ġsell ing Ġequ ity Ġwhen Ġsell ing Ġquantity Ġis Ġequal Ġor Ġless Ġthan Ġtr ader Ġhold `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtr ader Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġval Ġequ ity Id Ġ= Ġ 1 . to Long () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠUtil . isValid Trading Time () Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . findById ( tr ader Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 5 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . findById ( equ ity Id ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠTr ader Equ ity ( id Ġ= Ġ 1 , Ġtr ader Id Ġ= Ġtr ader Id , Ġequ ity Id Ġ= Ġequ ity Id , Ġquantity Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Equ ity Repository . delete ById ( 1 ) Ġ} Ġreturns ĠUnit ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtr ader Repository . save And Flush ( any ()) Ġ} Ġreturns ĠTr ader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġtr ader Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" s achin @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmobile Ġ= Ġ" 3 2 4 3 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunds Ġ= Ġ 3 0 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Repository . save And Flush ( any ()) Ġ} Ġreturns ĠEqu ity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Equ ity ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 9 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġequ ity Transaction Repository . save ( any ()) Ġ} Ġreturns ĠEqu ity Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġequ ity Id Ġ= Ġequ ity Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquantity Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprice Ġ= Ġ 2 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Type Ġ= ĠTransaction Type . BU Y ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġtrading Service . sell Equ ity ( Sell Equ ity Request ( tr ader Id , Ġequ ity Id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtr ader Equ ity Repository . findBy Tr ader Id And Equ ity Id ( any (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtr ader Equ ity Repository . delete ById ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġequ ity Repository . save And Flush ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġequ ity Transaction Repository . save ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }