package Ġit . mail . service . external Ċ Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Ċ import Ġio . mock k . impl . annotations . Inject Mock Ks Ċ import Ġio . mock k . impl . annotations . Rel ax ed Mock K Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġio . mock k . slot Ċ import Ġit . mail . domain . Mail Message Ċ import Ġit . mail . domain . Mail Message Status . PENDING Ċ import Ġit . mail . domain . Mail MessageType Ċ import Ġit . mail . persistence . api . Mail Message Repository Ċ import Ġit . mail . persistence . api . Mail MessageType Repository Ċ import Ġit . mail . service . ValidationException Ċ import Ġit . mail . test . create Mail Message Ċ import Ġit . mail . test . create Mail MessageType Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Arguments Ċ import Ġorg . junit . jupiter . params . provider . Arguments . arguments Ċ import Ġorg . junit . jupiter . params . provider . Method Source Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ class ĠExternal Mail Message Service Test Ġ{ ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġlateinit Ġvar Ġmail Message Repository : ĠMail Message Repository ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġlateinit Ġvar Ġmail MessageType Repository : ĠMail MessageType Repository ĊĊĠĠĠ Ġ@ Inject Mock Ks ĊĠĠĠ Ġlateinit Ġvar Ġmail Message Service : ĠExternal Mail Message Service ĊĊĠĠĠ Ġval Ġmail Message Slot Ġ= Ġslot < Mail Message >() ĊĊĠĠĠ Ġlateinit Ġvar Ġmail Type : ĠMail MessageType ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġmail Type Ġ= Ġcreate Mail MessageType () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` createNew Mail Ġ- Ġwhen Ġeverything Ġis Ġcorrect Ġ- Ġcreates `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" Some Ġmessage " ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġ" subject " ĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġ" from @ gmail . com " ĊĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġ" to @ mail . com " ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmail MessageType Repository . findById ( mail Type . id ) Ġ}. returns ( mail Type ) ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmail Message Repository . create ( capture ( mail Message Slot )) Ġ}. returns ( create Mail Message ( mail Type )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġmail Message Service . createNew Mail ( text , Ġsubject , Ġfrom , Ġto , Ġmail Type . id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġmail Message Repository . create ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsaved Mail Message Ġ= Ġmail Message Slot . captured ĊĠĠĠĠĠĠĠ ĠassertEquals ( text , Ġsaved Mail Message . text ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( subject , Ġsaved Mail Message . subject ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( from , Ġsaved Mail Message . email From ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( to , Ġsaved Mail Message . email To ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( mail Type , Ġsaved Mail Message . type ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( PENDING , Ġsaved Mail Message . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` createNew Mail Ġ- Ġwhen Ġmessage Ġtype Ġis Ġinvalid Ġ- Ġthrows Ġexception `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmail TypeId Ġ= Ġ 1 2 L ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmail MessageType Repository . findById ( mail TypeId ) Ġ}. returns ( null ) ĊĊĠĠĠĠĠĠĠ ĠassertThrows < ValidationException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmail Message Service . createNew Mail (" 1 ", Ġ" sub ", Ġ" em @ gmail . com ", Ġ" aa @ gm . co ", Ġmail TypeId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmail Message Repository . create ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" invalid Data For Creation ") ĊĠĠĠ Ġfun Ġ` createNew Mail Ġ- Ġwith Ġinvalid Ġdata Ġ- Ġthrows Ġexception `( text : ĠString , Ġsubject : ĠString ?, Ġemail From : ĠString ?, Ġemail To : ĠString , Ġexpected Message : ĠString ) Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < ValidationException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmail Message Service . createNew Mail ( text , Ġsubject , Ġemail From , Ġemail To , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Message , Ġexception . message ) ĊĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġmail Message Repository . create ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinvalid Data For Creation (): ĠList < Arguments > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments ("", Ġ" subject ", Ġ" to - email @ gmail . com ", Ġ" email @ gmail . com ", Ġ" text Ġshouldn 't Ġbe Ġempty "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments (" text ", Ġ" subject ", Ġ" email . email . com ", Ġ" email @ gmail . com ", Ġ" email From Ġis Ġincorrect "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments (" text ", Ġ" subject ", Ġ" email @ email . com ", Ġ"", Ġ" email To Ġshouldn 't Ġbe Ġblank "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments (" text ", Ġ" subject ", Ġnull , Ġ" email . email . com ", Ġ" email To Ġis Ġincorrect "), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ