package Ġorg . co epi . android Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . co epi . android . common . is Success Ċ import Ġorg . co epi . android . common . success OrNull Ċ import Ġorg . co epi . android . components . Preferences Return ing Object Ċ import Ġorg . co epi . android . components . T cn Api Return ing Reports Ċ import Ġorg . co epi . android . components . T cn Dao Return ing All Ċ import Ġorg . co epi . android . components . noop . No Op New Alerts Notification Sh ower Ċ import Ġorg . co epi . android . components . noop . No Op Preferences Ċ import Ġorg . co epi . android . components . noop . No Op T cn Api Ċ import Ġorg . co epi . android . components . noop . No Op T cn Matcher Ċ import Ġorg . co epi . android . components . noop . No Op T cn Reports Dao Ċ import Ġorg . co epi . android . components . noop . No Opt T cn Dao Ċ import Ġorg . co epi . android . domain . T cn Matcher Impl Ċ import Ġorg . co epi . android . domain . Unix Time Ċ import Ġorg . co epi . android . extensions . base 6 4 To ByteArray Ċ import Ġorg . co epi . android . repo . reports update . Reports Interval Ċ import Ġorg . co epi . android . repo . reports update . Reports Updater Impl Ċ import Ġorg . co epi . android . t cn . Received T cn Ċ import Ġorg . co epi . android . t cn . T cn Ċ import Ġorg . junit . Test Ċ import Ġorg . t cn co al ition . t cn client . crypto . Signed Report Ċ Ċ class ĠReports Updater Impl UnitTests Ġ{ ĊĠĠĠ Ġ// ĠA Ġfixed Ġ" now " Ġfor Ġreplic able Ġtests ĊĠĠĠ Ġprivate Ġval Ġnow : ĠUnix Time Ġ= ĠUnix Time . from Value ( 1 5 8 8 7 7 9 2 9 7 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġretrieves _ reports () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapi Report Strings Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" r Sq Wp M 3 ZQ m 7 hf Q 3 q 2 x 2 ll n F Hi N hy Rr U QP KE t J 3 3 VK Q cw T 7 Ly 6 e 4 KG aj 5 Z zj Wt 0 m 4 c 0 v 5 n / VH 5 HO 9 UX b PX vs QT g EA QQ A AL FV t MV d Nb HB ZU 1 h OS l JY a DJ Z ek 5 OW j JJ eV dX ZF p XR U oz V 2 xo U 2 N HU kh WV DA 9 jn 0 p Z Ae ME 6 Z BR H JO lf I ik yf S 0 P jg 6 l 0 tx hh z 6 hz 4 ex Tx v 8 ry A 3 / Z 2 6 O eb SR wz Rf Rg Ld WB fo ha Ow Oc Say n Kq VC g ==", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Lb SU vv 3 2 0 gt Y 2 q TZ bum x no 7 KJ / BD Wn Hu Hc UH 0 f Nv 1 4 4 p + K 1 xb Pt + Y Qu xF Hz F fo 7 1 Ho eg S sp NJ La Az 9 3 In u Q HH QE AA QA AC FJ t Vj Ja WE k 9 i X j 1 FG y + r 4 cm Nr S 8 4 Az Hz x 5 w S 0 FZ JX z XFF fv qw A og t 6 qj Ie 7 + 6 CI J 8 mr Fr C en 3 n AV r Qo 3 Bd 1 js Ge 6 Uj yb RU l AA ==" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT cn Api Return ing Reports ( api Report Strings ), ĠNo Opt T cn Dao (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠReports Interval ( 0 , Ġ 2 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreports Result Ġ= Ġreports Updater . retrieve Reports ( interval ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( reports Result . is Success ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġchunk Ġ= Ġreports Result . success OrNull () !! ĊĠĠĠĠĠĠĠ ĠassertThat ( chunk . interval ). isEqualTo ( interval ) ĊĠĠĠĠĠĠĠ ĠassertThat ( chunk . reports . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( chunk . reports [ 0 ]. signature ). isEqualTo ( to Signed Report ( api Report Strings [ 0 ]) ?. signature ) ĊĠĠĠĠĠĠĠ ĠassertThat ( chunk . reports [ 1 ]. signature ). isEqualTo ( to Signed Report ( api Report Strings [ 1 ]) ?. signature ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfind _ match () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" r Sq Wp M 3 ZQ m 7 hf Q 3 q 2 x 2 ll n F Hi N hy Rr U QP KE t J 3 3 VK Q cw T 7 Ly 6 e 4 KG aj 5 Z zj Wt 0 m 4 c 0 v 5 n / VH 5 HO 9 UX b PX vs QT g EA QQ A AL FV t MV d Nb HB ZU 1 h OS l JY a DJ Z ek 5 OW j JJ eV dX ZF p XR U oz V 2 xo U 2 N HU kh WV DA 9 jn 0 p Z Ae ME 6 Z BR H JO lf I ik yf S 0 P jg 6 l 0 tx hh z 6 hz 4 ex Tx v 8 ry A 3 / Z 2 6 O eb SR wz Rf Rg Ld WB fo ha Ow Oc Say n Kq VC g ==", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Lb SU vv 3 2 0 gt Y 2 q TZ bum x no 7 KJ / BD Wn Hu Hc UH 0 f Nv 1 4 4 p + K 1 xb Pt + Y Qu xF Hz F fo 7 1 Ho eg S sp NJ La Az 9 3 In u Q HH QE AA QA AC FJ t Vj Ja WE k 9 i X j 1 FG y + r 4 cm Nr S 8 4 Az Hz x 5 w S 0 FZ JX z XFF fv qw A og t 6 qj Ie 7 + 6 CI J 8 mr Fr C en 3 n AV r Qo 3 Bd 1 js Ge 6 Uj yb RU l AA ==" ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Signed Report ( it ) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT cn Matcher Impl (), ĠNo Op T cn Api (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT cn Dao Return ing All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġa ĠT CN Ġstored Ġbelong ing Ġto Ġthe Ġfirst Ġreport ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Received T cn ( reports . first (). generate First T cn () !! , Ġnow )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġreports Updater . find Matches ( reports ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( matches . count ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( matches [ 0 ]. report . signature ). isEqualTo ( reports [ 0 ]. signature ) ĊĠĠĠĠĠĠĠ ĠassertThat ( matches [ 0 ]. contact Time ). isEqualTo ( now ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart _ interval _ contains _ time _ if _ no _ last _ interval _ stored () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Return ing Object ( null ), ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġreports Updater . determine Start Interval ( now ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( interval . contains ( now )). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart _ interval _ uses _ interval _ after _ stored () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstored Interval Ġ= ĠReports Interval ( 1 , Ġ 1 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreferences Return ing Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstored Interval ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġreports Updater . determine Start Interval ( now ) ĊĠĠĠĠĠĠĠ ĠassertThat ( interval ). isEqualTo ( stored Interval . next ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinterval _ sequence _ is _ empty _ if _ starts _ same _ time _ as _ until () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠReports Interval ( 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuntil Ġ= ĠUnix Time . from Value ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġintervals Ġ= Ġreports Updater . generate Intervals Sequence ( from , Ġuntil ). toList () ĊĊĠĠĠĠĠĠĠ Ġ// Ġfrom Ġdoesn 't Ġstart Ġbefore Ġuntil , Ġso Ġsequence Ġis Ġempty ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . size ). isEqualTo ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinterval _ sequence _ is _ empty _ if _ starts _ starts _ before _ until () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠReports Interval ( 2 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuntil Ġ= ĠUnix Time . from Value ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġintervals Ġ= Ġreports Updater . generate Intervals Sequence ( from , Ġuntil ). toList () ĊĊĠĠĠĠĠĠĠ Ġ// Ġfrom Ġdoesn 't Ġstart Ġbefore Ġuntil , Ġso Ġsequence Ġis Ġempty ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . size ). isEqualTo ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinterval _ sequence _ has _ one _ element _ with _ until () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠReports Interval ( 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuntil Ġ= ĠUnix Time . from Value ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġintervals Ġ= Ġreports Updater . generate Intervals Sequence ( from , Ġuntil ). toList () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinterval _ sequence _ has _ two _ intervals _ including _ until () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠReports Interval ( 0 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuntil Ġ= ĠUnix Time . from Value ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġintervals Ġ= Ġreports Updater . generate Intervals Sequence ( from , Ġuntil ). toList () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals [ 0 ]). isEqualTo ( from ) ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals [ 1 ]). isEqualTo ( Reports Interval ( 1 , Ġ 2 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinterval _ sequence _ has _ multiple _ intervals _ including _ until () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Updater Ġ= ĠReports Updater Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op T cn Matcher (), ĠNo Op T cn Api (), ĠNo Opt T cn Dao (), ĠNo Op T cn Reports Dao (), ĠNo Op Preferences (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNo Op New Alerts Notification Sh ower () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠReports Interval ( 1 2 3 4 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuntil Ġ= ĠUnix Time . from Value ( 1 2 3 4 5 6 7 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġintervals Ġ= Ġreports Updater . generate Intervals Sequence ( from , Ġuntil ). toList () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . size ). isEqualTo (( until . value Ġ- Ġfrom . start ) Ġ/ Ġfrom . length Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . first ()). isEqualTo ( from ) ĊĠĠĠĠĠĠĠ ĠassertThat ( intervals . last ()). isEqualTo ( Reports Interval ( until . value Ġ/ Ġfrom . length , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom . length )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġcentral ize , Ġmaybe Ġcreate ĠReports Ġwrapper Ġto Ġhide Ġthe ĠT CN Ġlib Ġimplementation ĊĠĠĠ Ġprivate Ġfun Ġto Signed Report ( report String : ĠString ): ĠSigned Report ? Ġ= ĊĠĠĠĠĠĠĠ Ġreport String . base 6 4 To ByteArray ()?. let Ġ{ ĠSigned Report . from ByteArray ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠSigned Report . generate First T cn (): ĠT cn ? Ġ= ĊĠĠĠĠĠĠĠ Ġreport . temporary Contact Numbers . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . hasNext ()) Ġ{ Ġit . next () Ġ} Ġelse Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĠT cn ( it . bytes ) Ġ} Ċ } Ċ