package Ġcom . todo . data . repository Ċ Ċ import Ġcom . google . firebase . auth . Auth Result Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . todo . data . model . Task Model Ċ import Ġcom . todo . data . source . User Remote DataSource Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Argument Matchers . any String Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . junit . Mockito JUnit Runner ĊĊ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠTodo Repository Impl Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Remote DataSource : ĠUser Remote DataSource ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Auth Result : ĠAuth Result ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfake Task Model : ĠTask Model ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtodo Repository : ĠTodo Repository Impl ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfake Task Model Ġ= ĠTask Model (" id ", Ġ" title ", Ġ 0 , Ġ 1 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġtodo Repository Ġ= ĠTodo Repository Impl ( user Remote DataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġis User LoggedIn _ should Return True () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfirebase User Ġ= ĠMockito . mock ( Firebase User :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . currentUser ). thenReturn ( firebase User ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . is User LoggedIn . test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġis User LoggedIn _ should Return False () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . currentUser ). thenReturn ( null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . is User LoggedIn . test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin _ should Complete With No Errors () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . login ( any String (), Ġany String ())). thenReturn ( Single . just ( mock Auth Result )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . login ( any String (), Ġany String ()). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . login ( any String (), Ġany String ())). thenReturn ( Single . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . login ( any String (), Ġany String ()). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregister _ should Complete With NoError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . register ( any String (), Ġany String ())). thenReturn ( Single . just ( mock Auth Result )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . register ( any String (), Ġany String ()). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregister _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . register ( any String (), Ġany String ())). thenReturn ( Single . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . register ( any String (), Ġany String ()). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate Task _ should Complete With Created Task () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . create Task ( fake Task Model )). thenReturn ( Single . just ( fake Task Model )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . create Task ( fake Task Model ). test () ĊĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Value ( fake Task Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate Task _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . create Task ( fake Task Model )). thenReturn ( Single . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . create Task ( fake Task Model ). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Task _ should Complete With No Errors () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . update Task ( fake Task Model )). thenReturn ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . update Task ( fake Task Model ). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Task _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . update Task ( fake Task Model )). thenReturn ( Comp letable . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . update Task ( fake Task Model ). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Task _ should Complete With No Errors () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . delete Task ( fake Task Model )). thenReturn ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . delete Task ( fake Task Model ). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Task _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . delete Task ( fake Task Model )). thenReturn ( Comp letable . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . delete Task ( fake Task Model ). test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Task _ should Return Mock ed Tasks () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmocked Task Models Ġ= Ġempty List < Task Model >() ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . tasks ). thenReturn ( Observable . just ( mocked Task Models )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . tasks . test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Value ( mocked Task Models ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Task _ should Fail WithError () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException () ĊĠĠĠĠĠĠĠ Ġ` when `( user Remote DataSource . tasks ). thenReturn ( Observable . error ( exception )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġtodo Repository . tasks . test () ĊĊĠĠĠĠĠĠĠ Ġtest Observer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }