/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠD uck Duck Go Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . duck duck go . app . tabs . model Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . test . annotation . Ui Thread Test Ċ import Ġcom . duck duck go . app . Instant Schedulers Rule Ċ import Ġcom . duck duck go . app . global . model . Site Ċ import Ġcom . duck duck go . app . global . model . Site Factory Ċ import Ġcom . duck duck go . app . privacy . model . Privacy Pract ices Ċ import Ġcom . duck duck go . app . privacy . store . Pre val ence Store Ċ import Ġcom . duck duck go . app . tabs . db . Tabs Dao Ċ import Ġcom . duck duck go . app . tracker detection . model . Tracker Networks Ċ import Ġcom . n ha ar man . mockito _ kotlin .* Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ class ĠTab Data Repository Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġvar Ġinstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġval Ġs chedulers Ġ= ĠInstant Schedulers Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Dao : ĠTabs Dao ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Privacy Pract ices : ĠPrivacy Pract ices ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Pre val ence Store : ĠPre val ence Store ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock Tracker Networks : ĠTracker Networks ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest ee : ĠTab Data Repository ĊĊĠĠĠ Ġ@ Ui Thread Test ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( mock Privacy Pract ices . privacy Pract ices For ( any ())). thenReturn ( Privacy Pract ices . UNKNOWN ) ĊĊĠĠĠĠĠĠĠ Ġtest ee Ġ= ĠTab Data Repository ( mock Dao , ĠSite Factory ( mock Privacy Pract ices , Ġmock Tracker Networks , Ġpre val ence Store Ġ= Ġmock Pre val ence Store )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen AddNew Tab After Existing Tab With Url With No Host Then Uses Url As Title () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbad Url Ġ= Ġ"// bad / url " ĊĠĠĠĠĠĠĠ Ġtest ee . add New Tab After Existing Tab ( bad Url , Ġ" tab id ") ĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Tab Entity >() ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). insert Tab At Position ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bad Url , Ġcapt or . first Value . url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Tab Add Direct ly Then View ed IsTrue () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ee . add (" http :// www . example . com ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Tab Entity >() ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). add And Select Tab ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( capt or . first Value . view ed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Tab Updated After Open In Background Then View ed IsTrue () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ee . add New Tab After Existing Tab (" http :// www . example . com ", Ġ" tab id ") ĊĠĠĠĠĠĠĠ Ġtest ee . update (" tab id ", Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Tab Entity >() ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). update Tab ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( capt or . first Value . view ed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen New Tab Added After Non Existing Tab Then Title Url Position Of New Tab Are Correct And Tab IsNot View ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ee . add New Tab After Existing Tab (" http :// www . example . com ", Ġ" tab id ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Tab Entity >() ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). insert Tab At Position ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( capt or . first Value . tab Id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġcapt or . first Value . position ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( capt or . first Value . view ed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen New Tab Added After Existing Tab Then Title Url Position Of New Tab Are Correct () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= ĠTab Entity (" tab id ", Ġposition Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Dao . tab ( any ())). thenReturn ( tab ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . add New Tab After Existing Tab (" http :// www . example . com ", Ġ" tab id ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < Tab Entity >() ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). insert Tab At Position ( capt or . capture ()) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( capt or . first Value . tab Id ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" http :// www . example . com ", Ġcapt or . first Value . url ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" example . com ", Ġcapt or . first Value . title ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġcapt or . first Value . position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Add Called Then Tab Added And Selected And Blank Site Data Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreated Id Ġ= Ġtest ee . add () ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). add And Select Tab ( any ()) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( test ee . retrieve Site Data ( created Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Add Called With Url Then Tab Added And Selected And Url Site Data Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" http :// example . com " ĊĠĠĠĠĠĠĠ Ġval Ġcreated Id Ġ= Ġtest ee . add ( url ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). add And Select Tab ( any ()) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( test ee . retrieve Site Data ( created Id )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( url , Ġtest ee . retrieve Site Data ( created Id ). value !!. url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Add Record Called Then Tab Added And Site Data Added () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠMutable LiveData < Site >() ĊĠĠĠĠĠĠĠ Ġtest ee . add ( TAB _ ID , Ġrecord ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). add And Select Tab ( any ()) ĊĠĠĠĠĠĠĠ ĠassertSame ( record , Ġtest ee . retrieve Site Data ( TAB _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Data Exists For Tab Then Retrieve Returns It () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠMutable LiveData < Site >() ĊĠĠĠĠĠĠĠ Ġtest ee . add ( TAB _ ID , Ġrecord ) ĊĠĠĠĠĠĠĠ ĠassertSame ( record , Ġtest ee . retrieve Site Data ( TAB _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Data DoesNotExist For Tab Then Retrieve Creates It () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNotNull ( test ee . retrieve Site Data ( TAB _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Tab Deleted Then Tab And Data Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsite Data Ġ= ĠMutable LiveData < Site >() ĊĠĠĠĠĠĠĠ Ġtest ee . add ( TAB _ ID , Ġsite Data ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . delete ( Tab Entity ( TAB _ ID , Ġposition Ġ= Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). delete Tab AndUpdate Selection ( any ()) ĊĠĠĠĠĠĠĠ Ġassert Not Same ( site Data , Ġtest ee . retrieve Site Data ( TAB _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen All Deleted Then Tab And Data Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsite Data Ġ= ĠMutable LiveData < Site >() ĊĠĠĠĠĠĠĠ Ġtest ee . add ( TAB _ ID , Ġsite Data ) ĊĠĠĠĠĠĠĠ Ġtest ee . delete All () ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). delete All Tabs () ĊĠĠĠĠĠĠĠ Ġassert Not Same ( site Data , Ġtest ee . retrieve Site Data ( TAB _ ID )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Id Selected Then Current Updated () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest ee . select ( TAB _ ID ) ĊĠĠĠĠĠĠĠ Ġverify ( mock Dao ). insert Tab Selection ( eq ( Tab Selection Entity ( tab Id Ġ= ĠTAB _ ID ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAB _ ID Ġ= Ġ" abcd " ĊĠĠĠ Ġ} Ċ Ċ }