package Ġde . r ki . cor on aw arn app . di agnosis keys . storage Ċ Ċ import Ġandroidx . room . testing . Migration TestHelper Ċ import Ġandroidx . sqlite . db . framework . Framework SQLite Open Helper Factory Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġde . r ki . cor on aw arn app . di agnosis keys . server . Location Code Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . joda . time . Instant Ċ import Ġorg . joda . time . LocalDate Ċ import Ġorg . joda . time . Local Time Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġtest helpers . Base Test Instrumentation Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠKey Cache Database Migration Test Ġ: ĠBaseTest Instrumentation () Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġhelper : ĠMigration TestHelper Ġ= ĠMigration TestHelper ( ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (), ĊĠĠĠĠĠĠĠ ĠKey Cache Database :: class . java . canonical Name , ĊĠĠĠĠĠĠĠ ĠFramework SQLite Open Helper Factory () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġmigration Ġto Ġadd Ġnew Ġoptional Ġattributes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmigrate 1 To 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Hour Ġ= ĠCached Key Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠCached Key Info . Type . LOCATION _ DAY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= ĠLocation Code (" DE "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Ġ= ĠLocalDate . parse (" 2 0 2 0 - 0 8 - 2 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhour Ġ= ĠLocal Time . parse (" 1 2 : 0 0 : 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠInstant . parse (" 2 0 2 0 - 0 8 - 2 3 T 1 2 : 4 6 : 3 9 . 9 9 9 Z "), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġhelper . create Database ( Key Cache Database . DATABASE _ NAME , Ġ 1 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSERT ĠINTO Ġ" key files " Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" location ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" day ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hour ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" createdAt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" completed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠVALUES Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 0 f 3 e 9 2 0 5 ba 2 c 7 5 3 afc 5 7 7 2 e 9 d 4 0 b 1 0 d ded 8 9 6 6 6 d ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' country _ day ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' DE ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 2 0 2 0 - 0 8 - 2 3 ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 1 2 : 0 0 : 0 0 ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 2 0 2 0 - 0 8 - 2 3 T 1 2 : 4 6 : 3 9 . 9 9 9 Z ', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġmigration ĊĠĠĠĠĠĠĠ Ġhelper . run Migrations And Validate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Cache Database . DATABASE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Cache Database Migration 1 To 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdao Db Ġ= ĠKey Cache Database . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= ĠApplication Provider . getApplicationContext () ĊĠĠĠĠĠĠĠ Ġ). create () ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdao Db . cached Key Files (). all Entries (). first () Ġ}. single () ĠshouldBe Ġkey Hour ĊĠĠĠ Ġ} Ċ } Ċ