/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġ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 . statistics . api Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . duck duck go . app . Instant Schedulers Rule Ċ import Ġcom . duck duck go . app . global . db . App Database Ċ import Ġcom . duck duck go . app . global . device . DeviceInfo Ċ import Ġcom . duck duck go . app . statistics . Variant Ċ import Ġcom . duck duck go . app . statistics . Variant Manager Ċ import Ġcom . duck duck go . app . statistics . model . At b Ċ import Ġcom . duck duck go . app . statistics . model . Pixel Entity Ċ import Ġcom . duck duck go . app . pixels . App Pixel Name . PRIV ACY _ DASH BOARD _ OPEN ED Ċ import Ġcom . duck duck go . app . statistics . store . Pending Pixel Dao Ċ import Ġcom . duck duck go . app . statistics . store . Statistics DataStore Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġio . reactivex . Comp letable Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ class ĠRx Pixel Sender 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 ĊĠĠĠ Ġval Ġapi : ĠPixel Service Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġval Ġmock Statistics DataStore : ĠStatistics DataStore Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġval Ġmock Variant Manager : ĠVariant Manager Ġ= Ġmock () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġval Ġmock DeviceInfo : ĠDevice Info Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠApp Database ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpending Pixel Dao : ĠPending Pixel Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest ee : ĠRx Pixel Sender ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠRoom . in Memory Database Builder ( Instrumentation Registry . get Instrumentation (). target Context , ĠApp Database :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow MainThread Queries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġpending Pixel Dao Ġ= Ġdb . pixel Dao () ĊĊĠĠĠĠĠĠĠ Ġtest ee Ġ= ĠRx Pixel Sender ( api , Ġpending Pixel Dao , Ġmock Statistics DataStore , Ġmock Variant Manager , Ġmock DeviceInfo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel F ired Then Pixel Service Called With Correct At b And Variant () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġgiven At b Variant ( At b (" at b ")) ĊĠĠĠĠĠĠĠ Ġgiven Variant ( Variant (" variant ", Ġfilter By Ġ= Ġ{ Ġtrue Ġ})) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . send Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġempty Map (), Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġverify ( api ). fire ( eq (" mp "), Ġeq (" phone "), Ġeq (" at b variant "), Ġany (), Ġany (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel F ired Tablet Form Factor Then Pixel Service Called With Tablet Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Api Send Pixel Suc ceeds () ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . TABLE T ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . send Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġempty Map (), Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġverify ( api ). fire ( eq (" mp "), Ġeq (" tablet "), Ġeq (""), Ġany (), Ġany (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel F ired With No At b Then Pixel Service Called With Correct Pixel Name And No At b () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Api Send Pixel Suc ceeds () ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . send Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġempty Map (), Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġverify ( api ). fire ( eq (" mp "), Ġeq (" phone "), Ġeq (""), Ġany (), Ġany (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel F ired With Additional Parameters Then Pixel Service Called WithDefault And Additional Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġgiven At b Variant ( At b (" at b ")) ĊĠĠĠĠĠĠĠ Ġgiven Variant ( Variant (" variant ", Ġfilter By Ġ= Ġ{ Ġtrue Ġ})) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĠĠĠĠĠĠĠ Ġgiven App Version (" 1 . 0 . 0 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of (" param 1 " Ġto Ġ" value 1 ", Ġ" param 2 " Ġto Ġ" value 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Params Ġ= Ġmap Of (" param 1 " Ġto Ġ" value 1 ", Ġ" param 2 " Ġto Ġ" value 2 ", Ġ" app Version " Ġto Ġ" 1 . 0 . 0 ") ĊĠĠĠĠĠĠĠ Ġtest ee . send Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġparams , Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġverify ( api ). fire (" mp ", Ġ" phone ", Ġ" at b variant ", Ġexpected Params , Ġempty Map ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel F ired Without Additional Parameters Then Pixel Service Called With Only Default Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġgiven At b Variant ( At b (" at b ")) ĊĠĠĠĠĠĠĠ Ġgiven Variant ( Variant (" variant ", Ġfilter By Ġ= Ġ{ Ġtrue Ġ})) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĠĠĠĠĠĠĠ Ġgiven App Version (" 1 . 0 . 0 ") ĊĊĠĠĠĠĠĠĠ Ġtest ee . send Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġempty Map (), Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Params Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 ") ĊĠĠĠĠĠĠĠ Ġverify ( api ). fire (" mp ", Ġ" phone ", Ġ" at b variant ", Ġexpected Params , Ġempty Map ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel En queued W it Additional Parameters Then Pixel En queued With Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven At b Variant ( At b (" at b ")) ĊĠĠĠĠĠĠĠ Ġgiven Variant ( Variant (" variant ", Ġfilter By Ġ= Ġ{ Ġtrue Ġ})) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĠĠĠĠĠĠĠ Ġgiven App Version (" 1 . 0 . 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of (" param 1 " Ġto Ġ" value 1 ", Ġ" param 2 " Ġto Ġ" value 2 ") ĊĊĠĠĠĠĠĠĠ Ġtest ee . enqueue Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġparams , Ġempty Map ()). test () ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġpending Pixel Dao . pixels (). test () ĊĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġtest Observer . assert No Errors (). values (). last () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġpixels . size ) ĊĠĠĠĠĠĠĠ Ġassert Pixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġparams Ġ+ Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixels . first () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Pixel En queued Without Additional Parameters Then Pixel En queued With Only Default Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven At b Variant ( At b (" at b ")) ĊĠĠĠĠĠĠĠ Ġgiven Variant ( Variant (" variant ", Ġfilter By Ġ= Ġ{ Ġtrue Ġ})) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĠĠĠĠĠĠĠ Ġgiven App Version (" 1 . 0 . 0 ") ĊĊĠĠĠĠĠĠĠ Ġtest ee . enqueue Pixel ( PRIV ACY _ DASH BOARD _ OPEN ED . pixel Name , Ġempty Map (), Ġempty Map ()). test () ĊĊĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġpending Pixel Dao . pixels (). test (). assert No Errors (). values (). last () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġpixels . size ) ĊĠĠĠĠĠĠĠ Ġassert Pixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixels . first () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen App Fore gro unded Then Pixel Sent () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġval Ġpixel Entity Ġ= ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpending Pixel Dao . insert ( pixel Entity ) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . on App Fore gro unded () ĊĊĠĠĠĠĠĠĠ Ġverify ( api ). fire ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Entity . pixel Name , Ġ" phone ", Ġpixel Entity . at b , Ġpixel Entity . additional QueryParams , Ġpixel Entity . encoded QueryParams ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen App Fore gro unded And Pixel Sent Then Pixel Removed () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġval Ġpixel Entity Ġ= ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpending Pixel Dao . insert ( pixel Entity ) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . on App Fore gro unded () ĊĊĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġpending Pixel Dao . pixels (). test (). assert No Errors (). values (). last () ĊĠĠĠĠĠĠĠ ĠassertTrue ( pixels . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen App Fore gro unded And Send Pixel Fails Then Pixel Not Removed () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Fails () ĊĠĠĠĠĠĠĠ Ġval Ġpixel Entity Ġ= ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpending Pixel Dao . insert ( pixel Entity ) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . on App Fore gro unded () ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġpending Pixel Dao . pixels (). test () ĊĠĠĠĠĠĠĠ Ġval Ġpixels Ġ= Ġtest Observer . assert No Errors (). values (). last () ĊĠĠĠĠĠĠĠ ĠassertTrue ( pixels . isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen App Fore gro unded With Multiple Pixels En queued Then Send All Pixels () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Pixel Api Suc ceeds () ĊĠĠĠĠĠĠĠ Ġval Ġpixel Entity Ġ= ĠPixel Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Name Ġ= Ġ" mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat b Ġ= Ġ" at b variant ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional QueryParams Ġ= Ġmap Of (" app Version " Ġto Ġ" 1 . 0 . 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoded QueryParams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpending Pixel Dao . insert ( pixel Entity , Ġtimes Ġ= Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġgiven Form Factor ( DeviceInfo . Form Factor . PHONE ) ĊĊĠĠĠĠĠĠĠ Ġtest ee . on App Fore gro unded () ĊĊĠĠĠĠĠĠĠ Ġverify ( api , Ġtimes ( 5 )). fire ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Entity . pixel Name , Ġ" phone ", Ġpixel Entity . at b , Ġpixel Entity . additional QueryParams , Ġpixel Entity . encoded QueryParams ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Pixel Entity ( expected Entity : ĠPixel Entity , Ġpixel Entity : ĠPixel Entity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Entity . pixel Name , Ġpixel Entity . pixel Name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Entity . at b , Ġpixel Entity . at b ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Entity . additional QueryParams , Ġpixel Entity . additional QueryParams ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Entity . encoded QueryParams , Ġpixel Entity . encoded QueryParams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Same Parameter Value ") ĊĠĠĠ Ġprivate Ġfun Ġgiven App Version ( app Version : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock DeviceInfo . app Version ). thenReturn ( app Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Api Send Pixel Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( api . fire ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ())). thenReturn ( Comp letable . complete ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Variant ( variant : ĠVariant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Variant Manager . get Variant ()). thenReturn ( variant ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven At b Variant ( at b : ĠAt b ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock Statistics DataStore . at b ). thenReturn ( at b ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Form Factor ( form Factor : ĠDevice Info . Form Factor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( mock DeviceInfo . form Factor ()). thenReturn ( form Factor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Pixel Api Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( api . fire ( any (), Ġany (), Ġany (), Ġany OrNull (), Ġany (), Ġany ())). thenReturn ( Comp letable . complete ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Pixel Api Fails () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( api . fire ( any (), Ġany (), Ġany (), Ġany OrNull (), Ġany (), Ġany ())). thenReturn ( Comp letable . error ( TimeoutException ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPending Pixel Dao . insert ( pixel : ĠPixel Entity , Ġtimes : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 1 .. times ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . insert ( pixel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ