package Ġde . ab au er . g iphy _ android clean architecture . presentation . search Ċ Ċ import Ġde . ab au er . g iphy _ android clean architecture . base . Base Test Ċ import Ġde . ab au er . g iphy _ clean _ architecture . domain . model . Data Result Ċ import Ġde . ab au er . g iphy _ clean _ architecture . domain . model . Error Model Ċ import Ġde . ab au er . g iphy _ clean _ architecture . domain . model . G iphy Ċ import Ġde . ab au er . g iphy _ clean _ architecture . domain . use case . Search G iph ys UseCase Ċ import Ġde . ab au er . g iphy _ clean _ architecture . presentation . search . Search G iph ys ViewModel Ċ import Ġde . ab au er . g iphy _ clean _ architecture . presentation . search . Search State Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . mock k Ċ import Ġio . un iflow . android . test . Test View Observer Ċ import Ġio . un iflow . android . test . create Test Observer Ċ import Ġio . un iflow . core . flow . data . UIState Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠSearch G iph ys ViewModel Test Ġ: ĠBaseTest () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsearch G iph ys UseCase : ĠSearch G iph ys UseCase Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠSearch G iph ys ViewModel ĊĠĠĠ Ġlateinit Ġvar Ġtest Observer : ĠTest View Observer ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠSearch G iph ys ViewModel ( search G iph ys UseCase ) ĊĠĠĠĠĠĠĠ Ġtest Observer Ġ= ĠviewModel . create Test Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` success Ġgetting ĠG iph ys Ġshows Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg iphy Data Ġ= ĠlistOf ( G iphy (" 3 0 0 ", Ġ" 3 mb ", Ġ" gi h py Url . com ", Ġ" 3 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġsearch G iph ys UseCase . search G iph ys For Text ( any ()) Ġ} Ġreturns ĠData Result . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg iphy Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Search Input (" search Input ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Observer . verify Sequence ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch State . Show Success ( g iphy Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` error Ġgetting ĠG iph ys Ġshow Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġsearch G iph ys UseCase . search G iph ys For Text ( any ()) Ġ} Ġreturns ĠData Result . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Model (" No Ġdata ", Ġ 4 0 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . on Search Input (" search Input ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . verify Sequence ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUI State . Empty , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch State . Show Error ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ