package Ġxyz . qw erty . plant _ add Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ 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 Ċ import Ġxyz . qw ex ter . pl ants _ api . Pl ants Repository Ċ import Ġxyz . qw ex ter . test . Test Coroutine Rule Ċ import Ġkotlin . time . Experimental Time Ċ Ċ @ Experimental Cor outines Api Ċ @ Experimental Time Ċ class ĠAdd Plant ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Executor Rule : ĠTest Coroutine Rule Ġ= ĠTest Coroutine Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠPl ants Repository ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠAdd Plant ViewModel ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . open Mocks ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠAdd Plant ViewModel ( repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Ġadd Ġblank Ġname Ġcan Save Plant Ġ= Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Changed (" ĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . can Save Plant . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( await Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` initial Ġstate Ġcan Save Plant Ġ= Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . can Save Plant . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( await Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Ġadd Ġbreak Ġline Ġname Ġcan Save Plant Ġ= Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Changed (" ĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . can Save Plant . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( await Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Ġadd Ġvalid Ġname Ġcan Save Plant Ġ= Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Changed (" sed um Ġm organ ian um ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . can Save Plant . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( await Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Name Changed Ġinput Ġequals Ġplant Name Ġoutput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" Some Ġinput " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Changed ( input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . plant Name . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( await Item (), Ġinput ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` on Save Ġ- Ġsave Ġplant Ġwith Ġpl ants Ġrepository `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġ" S ed um " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Changed ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Plant () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito . verify ( repository ). add Plant ( input , Ġempty List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ