package Ġcom . tri an . module . data ĊĊ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . tri an . data . local . room . C ex up Database Ċ import Ġcom . tri an . data . local . room . User Dao Ċ import Ġcom . tri an . domain . entities . User Ċ import Ġcom . tri an . domain . models . Blood Pressure Model Ċ import Ġdagger . h ilt . android . testing . H ilt Android Rule Ċ import Ġdagger . h ilt . android . testing . H ilt Android Test Ċ import Ġdagger . h ilt . android . testing . H ilt Test Application Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġorg . ro bo lectric . annotation . Looper Mode Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named ĊĊ Ċ @ H ilt Android Test Ċ @ Config ( application Ġ= ĠH ilt Test Application :: class , sdk Ġ= Ġ[ 2 9 ]) Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Looper Mode ( Looper Mode . Mode . PA USED ) Ċ class ĠC ex up Database Test Ġ{ ĊĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġh ilt Rule Ġ= ĠH ilt Android Rule ( this ) ĊĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġ@ Named (" test _ db ") ĊĠĠĠ Ġlateinit Ġvar Ġdatabase : ĠC ex up Database ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġgson : ĠGson ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Dao : ĠUser Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnur se Dao : ĠN ur se Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmeasurement Dao : ĠMeasurement Dao ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup (){ ĊĠĠĠĠĠĠĠ Ġh ilt Rule . inject () ĊĠĠĠĠĠĠĠ Ġuser Dao Ġ= Ġdatabase . user Dao () ĊĠĠĠĠĠĠĠ Ġnur se Dao Ġ= Ġdatabase . nur se Dao () ĊĠĠĠĠĠĠĠ Ġmeasurement Dao Ġ= Ġdatabase . measurement Dao () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown (){ ĊĠĠĠĠĠĠĠ Ġdatabase . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġinsert Ġuser Ġto Ġlocal `() Ġ Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid _ user Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ id =" ini Ġuser Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype =" ini Ġtype Ġ" Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno _ type =" ini Ġno Ġtype " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoctor _ id =" ini Ġid Ġdoctor ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspecial ity _ id =" ini Ġspecial ty Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhospital _ active =" ini Ġhospital Ġactive ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname =" ini Ġname ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername =" ini Ġusername ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender =" ini Ġgender ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail =" ini Ġemail ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphone _ number =" ini Ġphone " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress =" ini Ġaddress " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthumb =" ini Ġthumb " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġuser Dao . insert Patient ( user ) ĊĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠ Ġval Ġall Users Ġ= Ġuser Dao . getAll () ĊĠĠĠĠĠĠĠ Ġ// then ( Ġuser Ġj ika Ġdefault Ġ== Ġnull Ġm aka Ġakan Ġaut ogener ate ) ĊĠĠĠĠĠĠĠ Ġuser . id _ user Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( user ), all Users ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġinsert Ġnur se Ġto Ġlocal `() = Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠ Ġval Ġnur se Ġ= ĠN ur se ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname = Ġ" ini Ġn ama ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail =" ini Ġemail ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender =" ini Ġgender " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠphoneNumber =" ini Ġphone Ġnumber " Ġ, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype =" ini Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno _ type =" ini Ġno Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress =" ini Ġad ress s " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnur se Dao . insert ( nur se ) ĊĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠ Ġval Ġall N ur se Ġ= Ġnur se Dao . all N ur se () ĊĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠ Ġnur se . id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( nur se ), all N ur se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġinsert Ġmeasurement Ġto Ġlocal `() Ġ= Ġrun Blocking { ĊĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠ Ġval Ġmeasurement Ġ= ĠMeasurement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid = Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid _ patient =" ini Ġpatient ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice _ id =" ini Ġdevice Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype = 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ="{ ini Ġresult }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset =" kos ong ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated _ at =" 2 0 2 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest _ method =" automatic ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp = Ġ 3 1 6 3 5 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis _ upload = false , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmeasurement Dao . insert ( measurement ) ĊĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠ Ġval Ġall Measurement Ġ= Ġmeasurement Dao . all Check Up () ĊĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠ Ġmeasurement . id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( measurement ), all Measurement ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġconvert Ġb pm Ġmodel Ġto Ġjson Ġor Ġotherwise Ġ` (){ ĊĠĠĠĠĠĠĠ Ġ// check ĊĠĠĠĠĠĠĠ Ġval Ġjson : String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{" syst ole ": 1 2 1 . 0 ," di ast ole ": 8 0 . 0 ," pulse ": 0 . 0 ," method ":" automatic "," timestamp ": 0 } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠ Ġval Ġb pm Ġ= ĠB lood Pressure Model ( syst ole Ġ= Ġ 1 2 1 f , di ast ole Ġ= Ġ 8 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġb pm ToJson Ġ= gson . toJson ( bpm ) ĊĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠ Ġval Ġmeasurement Ġ= ĠMeasurement ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid = Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid _ patient =" ini Ġpatient ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice _ id =" ini Ġdevice Ġid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype = 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult = bpm ToJson , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset =" kos ong ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated _ at =" 2 0 2 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest _ method =" automatic ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp = Ġ 3 1 6 3 5 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis _ upload = false , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠ Ġval Ġfrom Json Ġ= Ġgson . fromJson ( measurement . result , ĠB lood Pressure Model :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( json , bpm ToJson ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( bpm , fromJson ) ĊĠĠĠ Ġ} Ċ } Ċ