package Ġcom . example . ule sson . ui . subject Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . example . ule sson . data . Fake Repository Ċ import Ġcom . example . ule sson . data . helper . Event Ċ import Ġcom . example . ule sson . data . helper . Resource Ċ import Ġcom . example . ule sson . data . model . Recent View Ċ import Ġcom . example . ule sson . util . Main Coroutine Rule Ċ import Ġcom . example . ule sson . util . Test Object Util Ċ import Ġcom . example . ule sson . util . get Or Await Value Ċ import Ġcom . example . ule sson . util . mock Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . hamcrest . Core Matchers .* Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito .* Ċ Ċ @ Experimental Cor outines Api Ċ class ĠSubject ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠSubject ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= ĠFake Repository () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Subject s ( Test Object Util . subjects ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠSubject ViewModel ( repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` assert Ġthat Ġcall Ġto Ġget Ġsubject Ġreceives Ġsubject Ġdata `() Ġ= ĊĠĠĠĠĠĠĠ Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubject Id To Open Ġ= ĠTest Object Util . subjects [ 0 ]. id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠviewModel . get Subject ( subject Id To Open ). get Or Await Value () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . status , Ġ` is `( Resource . Status . SUCCESS )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subject . data , Ġ` is `( Test Object Util . subjects [ 0 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` assert Ġthat Ġcall Ġto Ġopen Ġa Ġvideo Ġsets Ġnavigate To Video Ġlive Ġdata Ġwhen Ġsubject Ġis Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠTest Object Util . subjects [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġlesson Ġ= ĠTest Object Util . lessons [ 0 ] ĊĊĠĠĠĠĠĠĠ ĠviewModel . set Subject ( subject ) ĊĠĠĠĠĠĠĠ ĠviewModel . open Video ( lesson ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtopic Name Ġ= Ġsubject . chapter s . find Ġ{ Ġit . id Ġ== Ġlesson . chapter Id Ġ} !!. name ĊĊĠĠĠĠĠĠĠ Ġval Ġvideo DataTo Open Ġ= ĠviewModel . navigate To Video . get Or Await Value (). getContent IfNot Handled () ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo DataTo Open , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `( Recent View ( subject . id , Ġsubject . name , Ġtopic Name , Ġlesson . media Url )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` assert Ġthat Ġcall Ġto Ġopen Ġa Ġvideo Ġdoesn 't Ġset Ġnavigate To Video Ġlive Ġdata Ġwithout Ġsetting Ġsubject `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Event < Recent View >> >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġval Ġsubject Ġ= ĠTest Object Util . subjects [ 0 ] ĊĠĠĠĠĠĠĠ Ġ// ĠĠ ĠviewModel . set Subject ( subject ) ĊĠĠĠĠĠĠĠ Ġval Ġlesson Ġ= ĠTest Object Util . lessons [ 0 ] ĊĠĠĠĠĠĠĠ ĠviewModel . open Video ( lesson ) ĊĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( observer ) ĊĊĠĠĠ Ġ} Ċ }