import Ġio . mock k .* Ċ import Ġkotlinx . coroutines . experimental . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġorg . kotlin academy . backend . repositories . network . notifications . Notification Result Ċ import Ġorg . kotlin academy . backend . use cases . Medium UseCase Ċ import Ġorg . kotlin academy . backend . use cases . Promotion UseCase Ċ Ċ class ĠProm otion Pro position Tests Ġ: ĠUse Case Test () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Does Ġnot Ġh append Ġwhen Ġarticles Ġare Ġthe Ġsame `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Mock k ( Promotion UseCase ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠProm otion UseCase . pro pose Promotion ( any ()) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmedium Repo . get Posts () Ġ} Ġreturns ĠlistOf ( some Article Data , Ġsome Article Data 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġarticles Db Repo . get Articles () Ġ} Ġreturns ĠlistOf ( some Article , Ġsome Article 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedium UseCase . sync () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( inverse Ġ= Ġtrue ) Ġ{ ĠProm otion UseCase . pro pose Promotion ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Pro position Ġhapp ends Ġwhen Ġthere Ġis Ġone Ġnew Ġarticle `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Mock k ( Promotion UseCase ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠProm otion UseCase . pro pose Promotion ( any ()) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnotifications Repo . send Notification ( any (), Ġany ()) Ġ} Ġreturns ĠNotification Result ( 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġtoken Db Repo . getAll Tokens () Ġ} Ġreturns ĠlistOf ( some Firebase Token Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmedium Repo . get Posts () Ġ} Ġreturns ĠlistOf ( some Article Data , Ġsome Article Data 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġarticles Db Repo . get Articles () Ġ} Ġreturns ĠlistOf ( some Article ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedium UseCase . sync () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĠProm otion UseCase . pro pose Promotion ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Pro position Ġhapp ends Ġmultiple Ġtimes Ġwhen Ġthere Ġare Ġmultiple Ġnew Ġarticles `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Mock k ( Promotion UseCase ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠProm otion UseCase . pro pose Promotion ( any ()) Ġ} Ġjust Ġruns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnotifications Repo . send Notification ( any (), Ġany ()) Ġ} Ġreturns ĠNotification Result ( 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġtoken Db Repo . getAll Tokens () Ġ} Ġreturns ĠlistOf ( some Firebase Token Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġmedium Repo . get Posts () Ġ} Ġreturns ĠlistOf ( some Article Data , Ġsome Article Data 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġarticles Db Repo . get Articles () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedium UseCase . sync () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProm otion UseCase . pro pose Promotion ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProm otion UseCase . pro pose Promotion ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }