package Ġcom . to g gl . domain . reducers Ċ Ċ import Ġcom . to g gl . common . Free Coroutine Spec Ċ import Ġcom . to g gl . domain . extensions . create Client Ċ import Ġcom . to g gl . domain . extensions . create Project Ċ import Ġcom . to g gl . domain . extensions . create Tag Ċ import Ġcom . to g gl . domain . extensions . create Task Ċ import Ġcom . to g gl . domain . extensions . create Time Entry Ċ import Ġcom . to g gl . domain . extensions . to Mutable Value Ċ import Ġcom . to g gl . domain . loading . Load Clients Effect Ċ import Ġcom . to g gl . domain . loading . Load Projects Effect Ċ import Ġcom . to g gl . domain . loading . Load Tags Effect Ċ import Ġcom . to g gl . domain . loading . Load Tasks Effect Ċ import Ġcom . to g gl . domain . loading . Load Time Entries Effect Ċ import Ġcom . to g gl . domain . loading . Load Work spaces Effect Ċ import Ġcom . to g gl . domain . loading . Loading Action Ċ import Ġcom . to g gl . domain . loading . Loading Reducer Ċ import Ġcom . to g gl . domain . loading . Loading State Ċ import Ġcom . to g gl . models . domain . Workspace Ċ import Ġcom . to g gl . models . domain . Workspace Feature Ċ import Ġcom . to g gl . repository . interfaces . Client Repository Ċ import Ġcom . to g gl . repository . interfaces . Project Repository Ċ import Ġcom . to g gl . repository . interfaces . Tag Repository Ċ import Ġcom . to g gl . repository . interfaces . Task Repository Ċ import Ġcom . to g gl . repository . interfaces . Time Entry Repository Ċ import Ġcom . to g gl . repository . interfaces . Workspace Repository Ċ import Ġio . kot lint est . matchers . collections . should Contain Exactly In Any Order Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ @ Experimental Cor outines Api Ċ class ĠLoading Reducer Tests Ġ: ĠFree Coroutine Spec () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Repository Ġ= Ġmock k < Project Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġclient Repository Ġ= Ġmock k < Client Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġtime Entry Repository Ġ= Ġmock k < Time Entry Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġworkspace Repository Ġ= Ġmock k < Workspace Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġtag Repository Ġ= Ġmock k < Tag Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġtask Repository Ġ= Ġmock k < Task Repository >() ĊĠĠĠĠĠĠĠ Ġval Ġreducer Ġ= ĠLoading Reducer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher Provider ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġempty State Ġ= ĠLoading State ( listOf (), ĠlistOf (), ĠlistOf (), ĠlistOf (), ĠlistOf (), ĠlistOf ()) ĊĊĠĠĠĠĠĠĠ Ġ" The ĠLoading Reducer " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠStart ĠLoading Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" does Ġnot Ġupdate Ġthe Ġstate " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Start Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" returns Ġa Ġlist Ġof Ġeffects Ġthat Ġload Ġentities " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffects Ġ= Ġreducer . reduce ( mutable Value , ĠLoading Action . Start Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffects . map Ġ{ Ġit . java Class . kotlin Ġ} Ġshould Contain Exactly In Any Order ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Work spaces Effect :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Projects Effect :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Clients Effect :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Tags Effect :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Tasks Effect :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Time Entries Effect :: class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠTime ĠEnt ries ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġtime Ġentries " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĠlistOf ( create Time Entry ( 1 ), ĠcreateTime Entry ( 2 ), ĠcreateTime Entry ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Time Entries Loaded ( entries )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( time Entries Ġ= Ġentries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠWork spaces ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġwork spaces " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwork spaces Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWorkspace ( 1 , Ġ" 1 ", ĠlistOf ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWorkspace ( 2 , Ġ" 2 ", ĠlistOf ( Workspace Feature . Pro )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWorkspace ( 3 , Ġ" 3 ", ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Work spaces Loaded ( workspaces )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( workspaces Ġ= Ġwork spaces ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠProjects ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġprojects " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= Ġ( 1 L .. 1 0 L ). map Ġ{ Ġcreate Project ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Projects Loaded ( projects )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( projects Ġ= Ġprojects ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠClients ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġclients " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclients Ġ= Ġ( 1 L .. 1 0 L ). map Ġ{ Ġcreate Client ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Clients Loaded ( clients )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( clients Ġ= Ġclients ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠTags ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġtags " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġ( 1 L .. 1 0 L ). map Ġ{ Ġcreate Tag ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Tags Loaded ( tags )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( tags Ġ= Ġtags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġreceiving Ġa ĠTasks ĠLoaded Ġaction " Ġ- Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" updates Ġthe Ġstate Ġto Ġadd Ġthe Ġloaded Ġtasks " Ġ- Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġ( 1 L .. 1 0 L ). map Ġ{ Ġcreate Task ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinitialState Ġ= Ġempty State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Value Ġ= ĠinitialState . to Mutable Value Ġ{ ĠinitialState Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreducer . reduce ( mutable Value , ĠLoading Action . Tasks Loaded ( tasks )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState ĠshouldBe Ġempty State . copy ( tasks Ġ= Ġtasks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }