package Ġio . not able . note _ inter actors Ċ Ċ import Ġio . not able . constants . Error Handling Ċ import Ġio . not able . core . domain . Data State Ċ import Ġio . not able . core . domain . ProgressBar State Ċ import Ġio . not able . core . domain . UI Component Ċ import Ġio . not able . note _ datasource _ test . cache . Note Cache Fake Ċ import Ġio . not able . note _ datasource _ test . cache . Note Database Fake Ċ import Ġio . not able . note _ datasource _ test . network . Note Service List Fake Ċ import Ġio . not able . note _ datasource _ test . network . Note Service Response TypeList Ċ import Ġio . not able . note _ datasource _ test . network . data . Note Data Valid Ċ import Ġio . not able . note _ datasource _ test . network . data . Note Data Valid . NUM _ NOTES Ċ import Ġio . not able . note _ datasource _ test . network . serialize Note Data Ċ import Ġio . not able . note _ domain . Note Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* Ġ 1 . ĠSync ĠSuccess Ġ( Inserted ĠNetwork ĠNotes ) Ċ Ġ* Ġ 2 . ĠSync ĠFailure Ġ( Empty ĠData ) Ċ Ġ* Ġ 3 . ĠSync ĠFailure Ġ( Malformed ĠData ) Ċ Ġ*/ Ċ class ĠSync Notes Test Ġ{ ĊĊĠĠĠ Ġ// Ġsystem Ġin Ġtest ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsync Notes : ĠSync Notes ĊĠĠĠ Ġprivate Ġval Ġtoken Ġ= Ġ" 1 2 3 lk aso ias io " ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsync Notes _ success () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġnote Database Ġ= ĠNote Database Fake () ĊĠĠĠĠĠĠĠ Ġval Ġnote Cache Ġ= ĠNote Cache Fake ( note Database ) ĊĠĠĠĠĠĠĠ Ġval Ġnote Service Ġ= ĠNote Service List Fake . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNote Service Response TypeList . Good Data Ġ// Ġgood Ġdata ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsync Notes Ġ= ĠSync Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġnote Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġnote Service ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġempty Ġbefore Ġany Ġuse - cases Ġhave Ġbeen Ġexecuted ĊĠĠĠĠĠĠĠ Ġvar Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġthe Ġuse - case ĊĠĠĠĠĠĠĠ Ġval Ġemission s Ġ= Ġsync Notes . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Network Available Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ). toList () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġemission Ġshould Ġbe Ġloading ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 0 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Loading )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġsecond Ġemission Ġis Ġdata ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 1 ] Ġis ĠData State . Data ) ĊĠĠĠĠĠĠĠ Ġassert (( em ission s [ 1 ] Ġas ĠData State . Data ). data ?. size Ġ?: Ġ 0 Ġ== ĠNUM _ NOTES ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġno Ġlonger Ġempty ĊĠĠĠĠĠĠĠ Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . size Ġ== ĠNUM _ NOTES ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġloading Ġstate Ġis ĠID LE ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 2 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Idle )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ 1 . ĠInsert Ġsome Ġdata Ġinto Ġthe Ġcache Ġby Ġexecuting Ġa Ġsuccessful Ġuse - case . ĊĠĠĠĠ Ġ* Ġ 2 . ĠConfigure Ġthe Ġnetwork Ġoperation Ġto Ġreturn Ġmalformed Ġdata . ĊĠĠĠĠ Ġ* Ġ 3 . ĠExecute Ġuse - case Ġfor Ġa Ġsecond Ġtime Ġand Ġconfirm Ġit Ġstill Ġemits Ġthe Ġcached Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Notes _ mal formed Data _ success From Cache () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġnote Database Ġ= ĠNote Database Fake () ĊĠĠĠĠĠĠĠ Ġval Ġnote Cache Ġ= ĠNote Cache Fake ( note Database ) ĊĠĠĠĠĠĠĠ Ġval Ġnote Service Ġ= ĠNote Service List Fake . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNote Service Response TypeList . Malformed Data Ġ// ĠMal formed ĠData ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsync Notes Ġ= ĠSync Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġnote Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġnote Service ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġempty Ġbefore Ġany Ġuse - cases Ġhave Ġbeen Ġexecuted ĊĠĠĠĠĠĠĠ Ġvar Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġsome Ġdata Ġto Ġthe Ġcache Ġby Ġexecuting Ġa Ġsuccessful Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġnote Data Ġ= Ġserialize Note Data ( Note Data Valid . list Data ) ĊĠĠĠĠĠĠĠ Ġnote Cache . insert ( note Data ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġnot Ġempty Ġanymore ĊĠĠĠĠĠĠĠ Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . size Ġ== ĠNUM _ NOTES ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġthe Ġuse - case ĊĠĠĠĠĠĠĠ Ġval Ġemission s Ġ= Ġsync Notes . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Network Available Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ). toList () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġemission Ġshould Ġbe Ġloading ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 0 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Loading )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġsecond Ġemission Ġis Ġerror Ġresponse ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 1 ] Ġis ĠData State . Response ) ĊĠĠĠĠĠĠĠ Ġassert ((( em ission s [ 1 ] Ġas ĠData State . Response ). ui Component Ġas ĠUI Component . Dialog ). title Ġ== ĠError Handling . NETWORK _ DATA _ ERROR ) ĊĠĠĠĠĠĠĠ Ġassert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( em ission s [ 1 ] Ġas ĠData State . Response ). ui Component Ġas ĠUI Component . Dialog ). description Ġ== ĠError Handling . UNKNOWN _ ERROR ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthird Ġemission Ġis Ġdata Ġfrom Ġthe Ġcache ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 2 ] Ġis ĠData State . Data ) ĊĠĠĠĠĠĠĠ Ġassert (( em ission s [ 2 ] Ġas ĠData State . Data ). data ?. size Ġ== ĠNUM _ NOTES ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġstill Ġnot Ġempty ĊĠĠĠĠĠĠĠ Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . size Ġ== ĠNUM _ NOTES ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġloading Ġstate Ġis ĠID LE ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 3 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Idle )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Notes _ emptyList () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġnote Database Ġ= ĠNote Database Fake () ĊĠĠĠĠĠĠĠ Ġval Ġnote Cache Ġ= ĠNote Cache Fake ( note Database ) ĊĠĠĠĠĠĠĠ Ġval Ġnote Service Ġ= ĠNote Service List Fake . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNote Service Response TypeList . Empty List Ġ// ĠEmpty ĠList ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsync Notes Ġ= ĠSync Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġnote Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġnote Service ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis Ġempty Ġbefore Ġany Ġuse - cases Ġhave Ġbeen Ġexecuted ĊĠĠĠĠĠĠĠ Ġvar Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExecute Ġthe Ġuse - case ĊĠĠĠĠĠĠĠ Ġval Ġemission s Ġ= Ġsync Notes . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġtoken , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Network Available Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ). toList () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġemission Ġshould Ġbe Ġloading ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 0 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Loading )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġsecond Ġemission Ġis Ġdata Ġ( empty Ġlist ) ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 1 ] Ġis ĠData State . Data ) ĊĠĠĠĠĠĠĠ Ġassert (( em ission s [ 1 ] Ġas ĠData State . Data ). data ?. size Ġ?: Ġ 0 Ġ== Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġcache Ġis ĠST ILL ĠEMPTY ĊĠĠĠĠĠĠĠ Ġcached Notes Ġ= Ġnote Cache . fetch All () ĊĠĠĠĠĠĠĠ Ġassert ( cached Notes . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġloading Ġstate Ġis ĠID LE ĊĠĠĠĠĠĠĠ Ġassert ( em ission s [ 2 ] Ġ== ĠData State . Loading < List < Note >>( ProgressBar State . Idle )) ĊĠĠĠ Ġ} Ċ Ċ }