package Ġio . ash dav ies . rx . r xf ire base Ċ Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . firebase . database . Child EventListener Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Reference Ċ import Ġcom . google . firebase . database . Logger Ċ import Ġcom . google . firebase . database . Query Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġcom . n ha ar man . mockito _ kotlin . K Argument Captor Ċ import Ġcom . n ha ar man . mockito _ kotlin . argument Captor Ċ import Ġcom . n ha ar man . mockito _ kotlin . given Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . then Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġio . ash dav ies . rx . r xf ire base . Child Event . Type Ċ import Ġio . reactivex . ob servers . Test Observer Ċ import Ġio . reactivex . subscribers . Test Subscriber Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Answers . RET URNS _ DE EP _ ST UB S Ċ Ċ internal Ġclass ĠR xF ire base Database Test Ġ{ ĊĊĠ Ġprivate Ġval Ġquery : ĠQuery Ġ= Ġmock ( default Answer Ġ= ĠRET URNS _ DE EP _ ST UB S ) ĊĠ Ġprivate Ġval Ġreference : ĠDatabase Reference Ġ= Ġmock () ĊĊĠ Ġprivate Ġval Ġdatabase Ġ= ĠR xF ire base Database ( query ) ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġget Ġquery Ġreference Ġchild `() Ġ{ ĊĠĠĠ Ġgiven ( query . ref . child (" child ")). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . child (" child ")). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġorder Ġby Ġchild `() Ġ{ ĊĠĠĠ Ġgiven ( query . orderBy Child (" child ")). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . orderBy Child (" child ")). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġorder Ġby Ġkey `() Ġ{ ĊĠĠĠ Ġgiven ( query . orderBy Key ()). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . orderBy Key ()). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġorder Ġby Ġpriority `() Ġ{ ĊĠĠĠ Ġgiven ( query . orderBy Priority ()). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . orderBy Priority ()). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġorder Ġby Ġvalue `() Ġ{ ĊĠĠĠ Ġgiven ( query . orderBy Value ()). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . orderBy Value ()). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġlimit Ġto Ġfirst `() Ġ{ ĊĠĠĠ Ġgiven ( query . limit To First ( 1 0 )). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . limit To First ( 1 0 )). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġlimit Ġto Ġlast `() Ġ{ ĊĠĠĠ Ġgiven ( query . limit To Last ( 1 0 )). willReturn ( reference ) ĊĊĠĠĠ ĠassertThat ( database . limit To Last ( 1 0 )). isEqualTo ( R xF ire base Database ( reference )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġset Ġpriority `() Ġ{ ĊĠĠĠ Ġgiven ( query . ref . set Priority (" HIGH ")). willReturn ( Tasks . for Result ( null )) ĊĊĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. set Priority (" HIGH ") ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠ Ġ. assert Result () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġset Ġvalue `() Ġ{ ĊĠĠĠ Ġgiven ( query . ref . setValue (" VALUE ", Ġ" HIGH ")). willReturn ( Tasks . for Result ( null )) ĊĊĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. setValue (" VALUE ", Ġ" HIGH ") ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠ Ġ. assert Result () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġupdate Ġchildren `() Ġ{ ĊĠĠĠ Ġgiven ( query . ref . update Children ( map Of (" key " Ġto Ġ" value ")) ). willReturn ( Tasks . for Result ( null )) ĊĊĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. update Children ( map Of (" key " Ġto Ġ" value ")) ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠ Ġ. assert Result () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġremove Ġvalue `() Ġ{ ĊĠĠĠ Ġgiven ( query . ref . remove Value ()). willReturn ( Tasks . for Result ( null )) ĊĊĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. remove Value () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠ Ġ. assert Result () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġemit Ġon Ġvalue Ġevent `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Value EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). add Value EventListener ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġsubscriber : ĠTest Subscriber < Data Snapshot > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Value Event () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġcapt or ĊĠĠĠĠĠĠĠ Ġ. last Value ĊĠĠĠĠĠĠĠ Ġ. on Data Change ( snapshot ) ĊĊĠĠĠ Ġsubscriber . assert Value ( snapshot ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġemit Ġsingle Ġvalue Ġevent `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Value EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). addListener For Single Value Event ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġobserver : ĠTest Observer < Data Snapshot > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Single Value Event () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġcapt or ĊĠĠĠĠĠĠĠ Ġ. last Value ĊĠĠĠĠĠĠĠ Ġ. on Data Change ( snapshot ) ĊĊĠĠĠ Ġobserver . assert Value ( snapshot ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġemit Ġon Ġchild Ġevent `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Child EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). addChild EventListener ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġsubscriber : ĠTest Subscriber < Child Event > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Child Event () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġcapt or ĊĠĠĠĠĠĠĠ Ġ. last Value ĊĠĠĠĠĠĠĠ Ġ. on Child Added ( snapshot , Ġnull ) ĊĊĠĠĠ Ġsubscriber . assert Value ( Child Event ( snapshot , ĠType . CHILD _ AD DED )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġfilter Ġchild Ġevent `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Child EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). addChild EventListener ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġsubscriber : ĠTest Subscriber < Child Event > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Child Event ( Type . CHILD _ AD DED ) ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġval Ġlistener : ĠChild EventListener Ġ= Ġcapt or . last Value ĊĠĠĠ Ġlistener . on Child Added ( snapshot , Ġnull ) ĊĠĠĠ Ġlistener . on Child Moved ( snapshot , Ġnull ) ĊĊĠĠĠ Ġsubscriber . assert Value ( Child Event ( snapshot , ĠType . CHILD _ AD DED )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġemit Ġchild Ġevent Ġvalue `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Child EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). addChild EventListener ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġsubscriber : ĠTest Subscriber < String > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Child Event Value ( String :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġgiven ( snapshot . getValue ( String :: class . java )). willReturn (" Hello ĠWorld ") ĊĊĠĠĠ Ġcapt or ĊĠĠĠĠĠĠĠ Ġ. last Value ĊĠĠĠĠĠĠĠ Ġ. on Child Added ( snapshot , Ġnull ) ĊĊĠĠĠ Ġsubscriber . assert Value (" Hello ĠWorld ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġfilter Ġchild Ġevent Ġvalue `() Ġ{ ĊĠĠĠ Ġval Ġcapt or : ĠK Argument Captor < Child EventListener > Ġ= Ġargument Captor () ĊĠĠĠ Ġval Ġsnapshot : ĠData Snapshot Ġ= Ġmock () ĊĊĠĠĠ Ġverify ( query ). addChild EventListener ( capt or . capture ()) ĊĊĠĠĠ Ġval Ġsubscriber : ĠTest Subscriber < String > Ġ= Ġdatabase ĊĠĠĠĠĠĠĠ Ġ. on Child Event Value ( Type . CHILD _ AD DED , ĠString :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ Ġgiven ( snapshot . getValue ( String :: class . java )). willReturn (" Hello ĠWorld ", Ġ" Hello ĠUn iverse ") ĊĊĠĠĠ Ġval Ġlistener : ĠChild EventListener Ġ= Ġcapt or . last Value ĊĠĠĠ Ġlistener . on Child Added ( snapshot , Ġnull ) ĊĠĠĠ Ġlistener . on Child Moved ( snapshot , Ġnull ) ĊĊĠĠĠ Ġsubscriber . assert Value (" Hello ĠWorld ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġpurge Ġoutstanding Ġwrites `() Ġ{ ĊĠĠĠ Ġdatabase . purge Out standing Writes () ĊĊĠĠĠ Ġthen ( query . ref . database ) ĊĠĠĠĠĠĠĠ Ġ. should () ĊĠĠĠĠĠĠĠ Ġ. purge Out standing Writes () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġgo Ġonline `() Ġ{ ĊĠĠĠ Ġdatabase . go Online () ĊĊĠĠĠ Ġthen ( query . ref . database ) ĊĠĠĠĠĠĠĠ Ġ. should () ĊĠĠĠĠĠĠĠ Ġ. go Online () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġgo Ġoffline `() Ġ{ ĊĠĠĠ Ġdatabase . go Offline () ĊĊĠĠĠ Ġthen ( query . ref . database ) ĊĠĠĠĠĠĠĠ Ġ. should () ĊĠĠĠĠĠĠĠ Ġ. go Offline () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` should Ġset Ġlog Ġlevel `() Ġ{ ĊĠĠĠ Ġdatabase . set LogLevel ( Logger . Level . DEBUG ) ĊĊĠĠĠ Ġthen ( query . ref . database ) ĊĠĠĠĠĠĠĠ Ġ. should () ĊĠĠĠĠĠĠĠ Ġ. set LogLevel ( Logger . Level . DEBUG ) ĊĠ Ġ} Ċ } Ċ