package Ġlt . mark mer kk Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ class ĠWork log Storage Update Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġdb Interactor : ĠDB Interactor Log J OO Q ĊĠĠĠ Ġlateinit Ġvar Ġwork log Storage : ĠWork log Storage ĊĊĠĠĠ Ġprivate Ġval Ġtime Provider Ġ= ĠTime Provider Test () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġwork log Storage Ġ= ĠWork log Storage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider Ġ= Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Interactor Ġ= Ġdb Interactor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Local Log _ no Such Log () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( time Provider , Ġid Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). insert ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). update ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Local Log _ exist Only As Local () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( time Provider , Ġid Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). insert ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). update ( log ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ// Ġcannot Ġbe Ġpossible , Ġcan Ġonly Ġupdate Ġlocal Ġentries ĊĠĠĠ Ġfun Ġupdate Local Log _ exist Only As Remote () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( time Provider , Ġid Ġ= Ġ 1 ) Ġ// Ġnot Ġpossible , Ġno Ġremote ĠID ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). insert ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). update ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Local Log _ exist As Local _ exist As Remote () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( time Provider , Ġid Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Remote ( any ()) Ġ// Ġnot Ġpossible , Ġno Ġremote ĠID ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). insert ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). update ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Remote Log _ no Such Log () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). insert ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). update ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Remote Log _ exist Only As Local () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). insert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠConst . NO _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġlog . time . start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġlog . time . end , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġlog . code . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġlog . comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). update ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). delete By Local Id ( eq ( 1 )) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). delete By Remote Id ( eq ( 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Remote Log _ exist Only As Remote () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). insert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠConst . NO _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Deleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate Remote Log _ exist As Both () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAs semble ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Local ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). wh enever ( db Interactor ). exist As Remote ( any ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAct ĊĠĠĠĠĠĠĠ Ġwork log Storage . update Sync ( log ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). insert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠConst . NO _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġlog . time . start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġlog . time . end , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġlog . code . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġlog . comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor ). update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock s . create Log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Data Ġ= ĠMock s . create Remote Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Id Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Deleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Local Id ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( db Interactor , Ġnever ()). delete By Remote Id ( any ()) ĊĠĠĠ Ġ} Ċ }