/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠF rol lo Ċ Ġ* Ċ Ġ* Ġ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 Ġus . f rol lo . f rol lo sdk . database . dao Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . sqlite . db . Simple SQLite Query Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . jak ew h art on . th reet en ab p . Android Three Ten Ċ import Ġcom . jr ask a . li ved ata . test Ċ 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 Ġus . f rol lo . f rol lo sdk . database . SDK Database Ċ import Ġus . f rol lo . f rol lo sdk . extensions . sql ForUser Tags Ċ import Ġus . f rol lo . f rol lo sdk . model . core data . aggregation . tags . Tags Sort Type Ċ import Ġus . f rol lo . f rol lo sdk . model . core data . shared . Order Type Ċ import Ġus . f rol lo . f rol lo sdk . model . test Transaction Tag Data Ċ import Ġus . f rol lo . f rol lo sdk . test utils . get DateTime Stamp Ċ Ċ class ĠTransaction User Tags Dao Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtest Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġapp Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context . application Context Ġas ĠApplication ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠSDK Database . getInstance ( app ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Three Ten . init ( app ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . clear All Tables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Load All And Insert () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġtest Transaction Tag Data (" tag 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= Ġtest Transaction Tag Data (" tag 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 3 Ġ= Ġtest Transaction Tag Data (" tag 4 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 4 Ġ= Ġtest Transaction Tag Data (" tag 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf ( data 1 , Ġdata 2 , Ġdata 3 , Ġdata 4 ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). insert All ( list ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġdb . user Tags (). load (). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĠĠĠĠĠĠĠ ĠassertTrue ( test Observer . value (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġtest Observer . value (). size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Delete By Names () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġtest Transaction Tag Data (" tag 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= Ġtest Transaction Tag Data (" tag 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 3 Ġ= Ġtest Transaction Tag Data (" tag 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 4 Ġ= Ġtest Transaction Tag Data (" tag 4 ") ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf ( data 1 , Ġdata 2 , Ġdata 3 , Ġdata 4 ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). insert All ( list ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). delete By Names Inverse ( mutable ListOf (" tag 1 ", Ġ" tag 2 ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġdb . user Tags (). load (). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĠĠĠĠĠĠĠ ĠassertTrue ( test Observer . value (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġtest Observer . value (). size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Search User Tags () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġtest Transaction Tag Data (" tag 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= Ġtest Transaction Tag Data (" tag 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 3 Ġ= Ġtest Transaction Tag Data (" tag 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 4 Ġ= Ġtest Transaction Tag Data (" hello ") ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf ( data 1 , Ġdata 2 , Ġdata 3 , Ġdata 4 ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). insert All ( list ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġdb . user Tags (). load By Query ( sql ForUser Tags (" tag ", ĠTags Sort Type . COUNT , ĠOrder Type . DESC )). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtest Observer . value () ĊĠĠĠĠĠĠĠ ĠassertTrue ( test Observer . value (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġtest Observer . value (). size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( data . get ( 0 ). count !! Ġ- Ġdata . get ( 1 ). count !! > Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Search User Tags By Creation And Up d ation Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġtest Transaction Tag Data (" tag 1 ", Ġ" 2 0 1 9 - 0 5 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ", Ġ" 2 0 1 9 - 0 5 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= Ġtest Transaction Tag Data (" tag 2 ", Ġ" 2 0 1 9 - 0 6 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ", Ġ" 2 0 1 9 - 0 6 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 3 Ġ= Ġtest Transaction Tag Data (" tag 3 ", Ġ" 2 0 1 9 - 0 7 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ", Ġ" 2 0 1 9 - 0 7 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 4 Ġ= Ġtest Transaction Tag Data (" hello ", Ġ" 2 0 1 9 - 0 7 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ", Ġ" 2 0 1 9 - 0 8 - 0 3 T 1 0 : 1 5 : 3 0 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf ( data 1 , Ġdata 2 , Ġdata 3 , Ġdata 4 ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). insert All ( list ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġtest Observer Ġ= Ġdb . user Tags (). load By Query ( sql ForUser Tags (" tag ", ĠTags Sort Type . CREATED _ AT , ĠOrder Type . DESC )). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġtest Observer . value () ĊĠĠĠĠĠĠĠ ĠassertTrue ( test Observer . value (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġtest Observer . value (). size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( data . get ( 0 ). createdAt ?. get DateTime Stamp () !! Ġ- Ġdata . get ( 2 ). createdAt ?. get DateTime Stamp () !! > Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer Ġ= Ġdb . user Tags (). load By Query ( sql ForUser Tags (" tag ", ĠTags Sort Type . LAST _ USED , ĠOrder Type . DESC )). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġtest Observer . value () ĊĠĠĠĠĠĠĠ ĠassertTrue ( test Observer . value (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġtest Observer . value (). size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( data . get ( 0 ). last Used At ?. get DateTime Stamp () !! Ġ- Ġdata . get ( 2 ). last Used At ?. get DateTime Stamp () !! > Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fetch Transaction User Tags Between Dates () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġtest Transaction Tag Data (" tag 1 ", ĠcreatedAt Ġ= Ġ" 2 0 1 9 - 0 3 - 0 3 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= Ġtest Transaction Tag Data (" tag 2 ", ĠcreatedAt Ġ= Ġ" 2 0 1 9 - 0 3 - 0 9 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 3 Ġ= Ġtest Transaction Tag Data (" tag 4 ", ĠcreatedAt Ġ= Ġ" 2 0 1 9 - 0 3 - 0 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġdata 4 Ġ= Ġtest Transaction Tag Data (" tag 3 ", ĠcreatedAt Ġ= Ġ" 2 0 1 9 - 0 3 - 0 1 ") ĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= Ġmutable ListOf ( data 1 , Ġdata 2 , Ġdata 3 , Ġdata 4 ) ĊĠĠĠĠĠĠĠ Ġdb . user Tags (). insert All ( list ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Date Ġ= Ġ" 2 0 1 9 - 0 3 - 0 3 " ĊĠĠĠĠĠĠĠ Ġval ĠendDate Ġ= Ġ" 2 0 1 9 - 0 3 - 0 7 " ĊĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" SELECT Ġ* ĠFROM Ġtransaction _ user _ tags Ġwhere Ġcreated _ at Ġbetween ĠDate ('$ from Date ') Ġand ĠDate ('$ endDate ')" ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠSimple SQLite Query ( sql ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġdb . user Tags (). load By Query ( query ). test () ĊĠĠĠĠĠĠĠ Ġtest Observer . await Value () ĊĠĠĠĠĠĠĠ Ġval Ġlist 2 Ġ= Ġtest Observer . value () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlist 2 . size ) ĊĠĠĠĠĠĠĠ ĠtearDown () ĊĠĠĠ Ġ} Ċ } Ċ