package Ġco . net guru . b aby . monitor . client . feature . client . home Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġco . net guru . b aby . monitor . Rx Schedulers Override Rule Ċ import Ġco . net guru . b aby . monitor . client . data . Data Repository Ċ import Ġco . net guru . b aby . monitor . client . data . client . Child Data Entity Ċ import Ġco . net guru . b aby . monitor . client . feature . bab yn ot ification . Sn oo ze Notification UseCase Ċ import Ġco . net guru . b aby . monitor . client . feature . communication . internet . Check Internet Connection UseCase Ċ import Ġco . net guru . b aby . monitor . client . feature . communication . websocket . Message Ċ import Ġco . net guru . b aby . monitor . client . feature . communication . websocket . Message . Companion . RESET _ ACTION Ċ import Ġco . net guru . b aby . monitor . client . feature . communication . websocket . Message Parser Ċ import Ġco . net guru . b aby . monitor . client . feature . communication . websocket . Rx WebSocket Client Ċ import Ġco . net guru . b aby . monitor . client . feature . voice Analysis . Voice Analysis UseCase Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġjunit . framework . TestCase . assertEquals Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġjava . net . URI Ċ Ċ class ĠClient Home ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġs chedulers Rule Ġ= ĠRx Schedulers Override Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġchild LiveData : ĠLive Data < Child Data Entity > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġdata Repository : ĠData Repository Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġget Child LiveData () Ġ}. do Return ( child LiveData ) ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġget Child Data () Ġ}. do Return ( Maybe . just ( Child Data Entity ( address Ġ= Ġ" address "))) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġrx WebSocket Client : ĠRx WebSocket Client Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġsend B aby Name UseCase : ĠSend B aby Name UseCase Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġstream B aby Name ( rx WebSocket Client ) Ġ}. do Return ( Comp letable . complete ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġsn oo ze Notification UseCase : ĠSn oo ze Notification UseCase Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġcheck Internet Connection UseCase : ĠCheck Internet Connection UseCase Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġrestart App UseCase : ĠRestart App UseCase Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġmessage Parser : ĠMessage Parser Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġvoice Analysis UseCase Ġ= Ġmock < Voice Analysis UseCase >() ĊĠĠĠ Ġprivate Ġval Ġur ifier : Ġ( address : ĠString ) Ġ-> ĠURI Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġmock < URI >() ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġinvoke ( any ()) Ġ}. do Return ( uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclient Home ViewModel Ġ= ĠClient Home ViewModel ( ĊĠĠĠĠĠĠĠ Ġdata Repository , ĊĠĠĠĠĠĠĠ Ġsend B aby Name UseCase , ĊĠĠĠĠĠĠĠ Ġsn oo ze Notification UseCase , ĊĠĠĠĠĠĠĠ Ġcheck Internet Connection UseCase , ĊĠĠĠĠĠĠĠ Ġrestart App UseCase , ĊĠĠĠĠĠĠĠ Ġrx WebSocket Client , ĊĠĠĠĠĠĠĠ Ġvoice Analysis UseCase , ĊĠĠĠĠĠĠĠ Ġmessage Parser ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġweb Ġsocket Ġopen Ġconnection `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Child Availability Observer : ĠObserver < Boolean > Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( rx WebSocket Client . events ( any ())). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just < Rx WebSocket Client . Event >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRx WebSocket Client . Event . Open ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . selected Child Availability . observe Fore ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Child Availability Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . open Socket Connection ( ur ifier ) ĊĊĠĠĠĠĠĠĠ Ġverify ( selected Child Availability Observer ). on Changed ( true ) ĊĠĠĠĠĠĠĠ Ġverify ( send B aby Name UseCase ). stream B aby Name ( rx WebSocket Client ) ĊĠĠĠĠĠĠĠ Ġverify ( voice Analysis UseCase ). send Initial Voice Analysis Option ( rx WebSocket Client ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġweb Ġsocket Ġclosed Ġconnection `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Child Availability Observer : ĠObserver < Boolean > Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġval Ġclose Event : ĠRx WebSocket Client . Event . Close Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( rx WebSocket Client . events ( any ())). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just < Rx WebSocket Client . Event >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . selected Child Availability . observe Fore ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Child Availability Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . open Socket Connection ( ur ifier ) ĊĊĠĠĠĠĠĠĠ Ġverify ( selected Child Availability Observer ). on Changed ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnotify Ġob servers Ġabout Ġweb Ġsocket Ġreset Ġaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreset Action Observer : ĠObserver < String > Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġval Ġreset Action : ĠRx WebSocket Client . Event . Message Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( rx WebSocket Client . events ( any ())). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just < Rx WebSocket Client . Event >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhenever ( message Parser . parse WebSocket Message ( reset Action )). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( action Ġ= ĠRESET _ ACTION ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . web Socket Action . observe Fore ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Action Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . open Socket Connection ( ur ifier ) ĊĊĠĠĠĠĠĠĠ Ġverify ( reset Action Observer ). on Changed ( check Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( RESET _ ACTION , Ġit ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġsn oo ze Ġnotifications `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġmock < Disposable >() ĊĠĠĠĠĠĠĠ Ġwhenever ( sn oo ze Notification UseCase . sn oo ze Notifications ()). do Return ( dis posable ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . sn oo ze Notifications () ĊĊĠĠĠĠĠĠĠ Ġverify ( sn oo ze Notification UseCase ). sn oo ze Notifications () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcheck Ġinternet Ġconnection Ġstatus `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinternet Connection Observer : ĠObserver < Boolean > Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( check Internet Connection UseCase . has Internet Connection ()). do Return ( Single . just ( true )) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . internet Connection Availability . observe Fore ver ( internet Connection Observer ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . check Internet Connection () ĊĊĠĠĠĠĠĠĠ Ġverify ( check Internet Connection UseCase ). has Internet Connection () ĊĠĠĠĠĠĠĠ Ġverify ( internet Connection Observer ). on Changed ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrestart Ġapp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity : ĠAppCompatActivity Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( restart App UseCase . restart App ( activity )). do Return ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . restart App ( activity ) ĊĊĠĠĠĠĠĠĠ Ġverify ( restart App UseCase ). restart App ( activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġerror Ġwhile Ġsending Ġb aby Ġname Ġon Ġweb Socket Ġopen `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Observer : ĠObserver < Throwable > Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġwhenever ( send B aby Name UseCase . stream B aby Name ( rx WebSocket Client )). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhenever ( rx WebSocket Client . events ( any ())). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just < Rx WebSocket Client . Event >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRx WebSocket Client . Event . Open ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . error Action . observe Fore ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . open Socket Connection ( ur ifier ) ĊĊĠĠĠĠĠĠĠ Ġverify ( error Observer ). on Changed ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġerror Ġwhile Ġsending Ġvoice Ġanalysis Ġoption Ġon Ġweb Socket Ġopen `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Observer : ĠObserver < Throwable > Ġ= Ġmock () ĊĊĠĠĠĠĠĠĠ Ġwhenever ( voice Analysis UseCase . send Initial Voice Analysis Option ( rx WebSocket Client )). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhenever ( rx WebSocket Client . events ( any ())). do Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just < Rx WebSocket Client . Event >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRx WebSocket Client . Event . Open ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . error Action . observe Fore ver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Observer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġclient Home ViewModel . open Socket Connection ( ur ifier ) ĊĊĠĠĠĠĠĠĠ Ġverify ( error Observer ). on Changed ( any ()) ĊĠĠĠ Ġ} Ċ } Ċ