package Ġcom . to g gl . repository Ċ Ċ import Ġcom . to g gl . database . dao . Client Dao Ċ import Ġcom . to g gl . database . dao . Project Dao Ċ import Ġcom . to g gl . database . dao . Tag Dao Ċ import Ġcom . to g gl . database . dao . Task Dao Ċ import Ġcom . to g gl . database . dao . Time Entry Dao Ċ import Ġcom . to g gl . database . dao . Workspace Dao Ċ import Ġcom . to g gl . database . models . Database Time Entry Ċ import Ġcom . to g gl . database . models . Database Workspace Ċ import Ġcom . to g gl . environment . services . time . Time Service Ċ import Ġcom . to g gl . models . domain . Time Entry Ċ import Ġcom . to g gl . models . domain . Workspace Feature Ċ import Ġcom . to g gl . repository . extensions . to Database Model Ċ import Ġcom . to g gl . repository . extensions . to Model Ċ import Ġcom . to g gl . repository . interfaces . StartTime Entry Result Ċ import Ġio . kot lint est . TestCase Ċ import Ġio . kot lint est . matchers . collections . shouldBe Empty Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . specs . String Spec Ċ import Ġio . mock k . called Ċ import Ġio . mock k . clear Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġorg . th reet en . bp . Duration Ċ import Ġorg . th reet en . bp . Offset DateTime Ċ Ċ class ĠRepository Test Ġ: ĠString Spec () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtag Dao Ġ= Ġmock k < Tag Dao >() ĊĠĠĠ Ġprivate Ġval Ġproject Dao Ġ= Ġmock k < Project Dao >() ĊĠĠĠ Ġprivate Ġval Ġtime Entry Dao Ġ= Ġmock k < Time Entry Dao >() ĊĠĠĠ Ġprivate Ġval Ġworkspace Dao Ġ= Ġmock k < Workspace Dao >() ĊĠĠĠ Ġprivate Ġval Ġclient Dao Ġ= Ġmock k < Client Dao >() ĊĠĠĠ Ġprivate Ġval Ġtask Dao Ġ= Ġmock k < Task Dao >() ĊĠĠĠ Ġprivate Ġval Ġtime Service Ġ= Ġmock k < Time Service >() ĊĠĠĠ Ġprivate Ġvar Ġrepository Ġ= ĠRepository ( project Dao , Ġtime Entry Dao , Ġworkspace Dao , Ġclient Dao , Ġtag Dao , Ġtask Dao , Ġtime Service ) ĊĊĠĠĠ Ġoverride Ġfun Ġbefore Test ( testCase : ĠTestCase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . before Test ( testCase ) ĊĠĠĠĠĠĠĠ Ġclear Mocks ( time Entry Dao , Ġworkspace Dao , Ġclient Dao , Ġtime Service , Ġtask Dao ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ" load Time Entries Ġcalls ĠgetAll Time Entries With Tags Ġon Ġthe ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . getAll Time Entries With Tags () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Time Entries () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtime Entry Dao . getAll Time Entries With Tags () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded . shouldBe Empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load Clients Ġcalls ĠgetAll Ġon Ġthe ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġclient Dao . getAll () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Clients () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġclient Dao . getAll () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded . shouldBe Empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load Tags Ġcalls ĠgetAll Ġon Ġthe ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtag Dao . getAll () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Tags () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtag Dao . getAll () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded . shouldBe Empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load Tasks Ġcalls ĠgetAll Ġon Ġthe ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtask Dao . getAll () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Tasks () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtask Dao . getAll () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded . shouldBe Empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load Work spaces Ġcalls ĠgetAll Ġon Ġthe ĠDAO Ġand Ġreturns Ġelements Ġif Ġthere Ġare Ġany " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsome Workspace Ġ= ĠDatabase Workspace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Workspace Ġname ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkspace Dao . getAll () Ġ} Ġreturns ĠlistOf ( some Workspace ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Work spaces () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġworkspace Dao . getAll () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded ĠshouldBe ĠlistOf ( some Workspace . to Model ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load Work spaces Ġcalls ĠgetAll Ġon Ġthe ĠDAO Ġand Ġreturns Ġan Ġauto - generated Ġworkspace Ġif Ġthere Ġaren 't Ġany Ġwork spaces Ġreturned Ġby ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkspace Dao . getAll () Ġ} Ġreturns ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġworkspace Dao . insert ( any ()) Ġ} Ġreturns Ġ 1 3 3 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauto Generated Workspace Ġ= ĠDatabase Workspace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Auto Ġcreated Ġworkspace ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWorkspace Feature . Pro ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloaded Ġ= Ġrepository . load Work spaces () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġworkspace Dao . insert ( auto Generated Workspace ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloaded ĠshouldBe ĠlistOf ( auto Generated Workspace . copy ( id Ġ= Ġ 1 3 3 7 ). to Model ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" stop Running Time Entry Ġupdates Ġall Ġrunning Ġtime Ġentries Ġand Ġreturns Ġthe Ġfirst Ġone " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Time Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry One StartTime Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 5 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Running One Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDatabase Time Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" one Ġrunning ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry One StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Two StartTime Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 2 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Running Two Ġ= Ġtime Entry Running One . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġtime Entry Two StartTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstopped Time Entries Ġ= ĠlistOf ( time Entry Running One , Ġtime Entry Running Two ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( duration Ġ= ĠDuration . between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry One StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Service . now () Ġ} Ġreturns Ġnow Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . stop Running Time Entries ( any ()) Ġ} Ġreturns Ġstopped Time Entries ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . stop Running Time Entry () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao . stop Running Time Entries ( now Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġstopped Time Entries . first OrNull ()?. let ( Database Time Entry :: to Model ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" stop Running Time Entry Ġdoesn 't Ġupdate Ġany Ġtime Ġentries Ġif Ġnone Ġare Ġrunning Ġand Ġdoesn 't Ġreturn Ġany Ġtime Ġentries " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Time Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Service . now () Ġ} Ġreturns Ġnow Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . stop Running Time Entries ( any ()) Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . stop Running Time Entry () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtime Entry Dao . stop Running Time Entries ( now Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" startTime Entry Ġstops Ġcurrently Ġrunning Ġtime Ġentry Ġand Ġinserts Ġa Ġnew Ġone Ġto ĠDAO " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Time Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry One StartTime Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 5 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Running One Ġ= ĠDatabase Time Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Running ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry One StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Two StartTime Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 2 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Running Two Ġ= Ġtime Entry Running One . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġtime Entry Two StartTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstopped Time Entries Ġ= ĠlistOf ( time Entry Running One , Ġtime Entry Running Two ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( duration Ġ= ĠDuration . between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry One StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarted Time Entry Ġ= ĠDatabase Time Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" started ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry One StartTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Service . now () Ġ} Ġreturns Ġnow Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . startTime Entry ( any (), Ġany (), Ġany ()) Ġ} Ġreturns Ġ( started Time Entry Ġto Ġstopped Time Entries ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . startTime Entry ( started Time Entry . id , Ġstarted Time Entry . description ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao . startTime Entry ( started Time Entry . id , Ġstarted Time Entry . description , Ġnow Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠStart Time Entry Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarted Time Entry . let ( Database Time Entry :: to Model ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstopped Time Entries . first OrNull ()?. let ( Database Time Entry :: to Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" edit Time Entry Ġupdates Ġthe Ġtime Ġentry Ġand Ġreturns Ġit " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Time Ġ= ĠOffset DateTime . parse (" 2 0 1 9 - 0 7 - 1 7 T 1 7 : 1 7 : 1 7 + 0 1 : 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Ġ= Ġspy k < Time Entry >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime Entry ( 1 , Ġ" desc ", Ġnow Time , Ġnull , Ġfalse , Ġ 1 , Ġnull , Ġnull , Ġfalse , Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . update Time Entry With Tags ( any ()) Ġ} Ġreturns Ġmock k () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . edit Time Entry ( time Entry ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġtime Entry ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" delete Time Entry Ġsets Ġis Deleted , Ġupdates Ġthe ĠDAO Ġand Ġreturns Ġthe Ġupdated Ġentries " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Entry Ġ= ĠTime Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 3 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" desc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOffset DateTime . MAX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Entry Dao . update Time Entry With Tags ( any ()) Ġ} Ġreturns Ġmock k () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . delete Time Entry ( time Entry ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Entry Dao . update Time Entry With Tags ( time Entry . copy ( is Deleted Ġ= Ġtrue ). to Database Model ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworkspace Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Service Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Dao Ġwas Not Ġcalled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġtime Entry . copy ( is Deleted Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ