package Ġio . h oly gu ac am ole . bot . user Ċ Ċ import Ġassert k . assert Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġcom . n ha ar man . mockito _ kotlin . any Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Return Ċ 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 . wh enever Ċ import Ġio . h oly gu ac am ole . bot . Mock Slack Users . jer emy Slack Ċ import Ġio . h oly gu ac am ole . bot . Mock Users . eight rib Ċ import Ġio . h oly gu ac am ole . bot . Mock Users . fe en ey fe en ey bo been ey Ċ import Ġio . h oly gu ac am ole . bot . Mock Users . jer em ys ky walker Ċ import Ġio . h oly gu ac am ole . bot . Mock Users . mark ard ito Ċ import Ġio . h oly gu ac am ole . bot . message . Slack Client Ċ import Ġio . h oly gu ac am ole . bot . slack . Slack User Ċ import Ġio . h oly gu ac am ole . bot . slack . Slack UserProfile Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠUserService Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= Ġmock < UserRepository >() ĊĠĠĠ Ġprivate Ġval Ġslack Client Ġ= Ġmock < Slack Client > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ ĠgetUser Info ( any ()) Ġ} Ġdo Return Ġj er emy Slack ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġservice Ġ= ĠUserService ( repository , Ġslack Client ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . save All ( listOf ( mark ard ito , Ġfe en ey fe en ey bo been ey )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . delete All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġreplaces Ġa Ġuser `() Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . replace ( eight rib . copy ( name Ġ= Ġ" j eb ")) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). update ( eight rib . copy ( name Ġ= Ġ" j eb ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġfinds Ġa Ġuser Ġby ĠuserId `() Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . findBy UserId Or Get From Slack ( fe en ey fe en ey bo been ey . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). findBy UserId ( fe en ey fe en ey bo been ey . userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` if Ġit Ġcan 't Ġfind Ġa Ġuser Ġit Ġuses Ġthe ĠSlack ĠAPI Ġto Ġsave Ġthem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġservice . findBy UserId Or Get From Slack ( jer em ys ky walker . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). findBy UserId ( jer em ys ky walker . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( slack Client ). getUser Info ( jer em ys ky walker . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). save ( jer em ys ky walker ) ĊĊĠĠĠĠĠĠĠ Ġassert ( user ). isEqualTo ( jer em ys ky walker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġuses Ġreal Ġname Ġif Ġuser Ġdoesn 't Ġhave Ġa Ġdisplay Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslack User Without DisplayName Ġ= ĠSlack User ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" USER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" jer emy _ kap ler ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Ġ= ĠSlack UserProfile ( real Name Ġ= Ġ" J er emy ĠK ap ler ", ĠdisplayName Ġ= Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Bot Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Restricted Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ul tra Restricted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhenever ( slack Client . getUser Info (" USER ")). thenReturn ( slack User Without DisplayName ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser ? Ġ= Ġservice . findBy UserId Or Get From Slack (" USER ") ĊĊĠĠĠĠĠĠĠ Ġassert ( user ?. name ). isEqualTo (" J er emy ĠK ap ler ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġadds Ġthe Ġuser Ġto Ġthe Ġrepository Ġwhen Ġit Ġgets Ġthem Ġfrom Ġthe ĠSlack ĠAPI `() Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . findBy UserId Or Get From Slack ( jer em ys ky walker . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). findBy UserId ( jer em ys ky walker . userId ) ĊĊĠĠĠĠĠĠĠ Ġverify ( slack Client ). getUser Info ( jer em ys ky walker . userId ) ĊĠĠĠ Ġ} Ċ } Ċ