/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . Ġ ĠThe ĠRedis ĠOpen ĠSource ĠProject Ċ Ġ* ĠAuthor : ĠAlex ey ĠRo zh kov Ġhttps :// github . com / ar 2 code Ċ Ġ* Ċ Ġ* Ġ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 Ġru . ar 2 code . redis . core . coroutines Ċ Ċ import Ġcom . google . common . truth . Truth Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġru . ar 2 code . redis . core . Service Subscriber Ċ import Ġru . ar 2 code . redis . core . State Ċ import Ġru . ar 2 code . redis . core . coroutines . pre pa res .* Ċ import Ġru . ar 2 code . redis . core . test . Test Memory Saved State Store ĊĊ Ċ class ĠSaved Redis State Service Tests Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtest Delay Before Checking Result Ġ= Ġ 5 0 L ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Service Ġstores Ġarbitrary Ġdata Ġin Ġstate Ġstorage `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsaved Id Ġ= Ġ 1 2 3 ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Handler Ġ= ĠTest Memory Saved State Store () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĠService Factory . build Simple Service With Saved State Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Saved State Handler () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispatch ( Intent Type B ( saved Id )) ĊĊĠĠĠĠĠĠĠ Ġdelay ( test Delay Before Checking Result ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstored Data Ġ= Ġstate Handler . get < Int >( Test Saved State Handler . KEY ) ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( stored Data ). isEqualTo ( saved Id ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Service Ġrest ores Ġstate Ġif Ġstate Ġhandler Ġcontains Ġdata `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsaved Id Ġ= Ġ 1 2 3 ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Handler Ġ= ĠTest Memory Saved State Store () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĠService Factory . build Simple Service With Saved State Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Saved State Handler () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispatch ( Intent Type B ( saved Id )) ĊĊĠĠĠĠĠĠĠ Ġdelay ( test Delay Before Checking Result ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispose () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice With Rest oring Ġ= ĠService Factory . build Simple Service With Saved State Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Saved State Handler () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Got Init Result Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Got Previous Service Result Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġsubscriber Ġ= Ġobject Ġ: ĠService Subscriber Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Receive ( newState : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠState . Initi ated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Got Init Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠState B ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Got Previous Service Result Ġ= ĠnewState . data Ġ== Ġsaved Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice With Rest oring . subscribe ( subscriber ) ĊĊĠĠĠĠĠĠĠ Ġdelay ( test Delay Before Checking Result ) ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( is Got Init Result ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( is Got Previous Service Result ) ĊĊĠĠĠĠĠĠĠ Ġservice With Rest oring . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Service Ġdis patches Ġintent Ġafter Ġrest oring Ġif Ġintent Ġspecified `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsaved Id Ġ= Ġ 1 2 3 ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Handler Ġ= ĠTest Memory Saved State Store () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĠService Factory . build Simple Service With Saved State Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Saved State Handler () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispatch ( Intent Type B ( saved Id )) ĊĊĠĠĠĠĠĠĠ Ġdelay ( test Delay Before Checking Result ) ĊĊĠĠĠĠĠĠĠ Ġservice . dispose () ĊĊĠĠĠĠĠĠĠ Ġval Ġservice With Rest oring Ġ= ĠService Factory . build Simple Service With Saved State Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Default , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Saved State Handler () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Got Init Result Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Got Previous Service Result Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Got Flow State After Rest oring Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġsubscriber Ġ= Ġobject Ġ: ĠService Subscriber Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Receive ( newState : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠState . Initi ated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Got Init Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠState B ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Got Previous Service Result Ġ= ĠnewState . data Ġ== Ġsaved Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġis ĠFlow State D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Got Flow State After Rest oring Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice With Rest oring . subscribe ( subscriber ) ĊĊĠĠĠĠĠĠĠ Ġdelay ( test Delay Before Checking Result ) ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( is Got Init Result ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( is Got Previous Service Result ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( is Got Flow State After Rest oring ) ĊĊĠĠĠĠĠĠĠ Ġservice With Rest oring . dispose () ĊĠĠĠ Ġ} Ċ }