package Ġcom . so yle . stories . desktop . view . theme . value Web . op position Ċ Ċ import Ġcom . so yle . stories . desktop . view . common . Node Test Ċ import Ġcom . so yle . stories . desktop . view . theme . value Web . op position . create . Add Opp osition To Value Web Controller Double Ċ import Ġcom . so yle . stories . desktop . view . theme . value Web . op position . create . Create Opp osition Value Form Locale Mock Ċ import Ġcom . so yle . stories . theme . value Web . op position . create . Create Opp osition Value Form Ċ import Ġcom . so yle . stories . desktop . view . theme . value Web . op position . create .` Create ĠO pp osition ĠValue ĠForm ĠAccess `. Companion . access Ċ import Ġcom . so yle . stories . desktop . view . theme . value Web . op position . create .` Create ĠO pp osition ĠValue ĠForm ĠAccess `. Companion . drive Ċ import Ġcom . so yle . stories . domain . theme . value Web . Value Web Ċ import Ġcom . so yle . stories . domain . validation . Non Blank String Ċ import Ġcom . so yle . stories . theme . add Opp osition To Value Web . Add Opp osition To Value Web Controller Ċ import Ġcom . so yle . stories . use case . theme . add Opp osition To Value Web . Opp osition Added To Value Web Ċ import Ġjavafx . application . Platform Ċ import Ġjavafx . event . ActionEvent Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* Ċ Ċ class Ġ` Create ĠO pp osition ĠValue ĠForm ĠUnit ĠTest ` Ġ: ĠNode Test < Create Opp osition Value Form >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvalue Web Id Ġ= ĠValue Web . Id () ĊĊĠĠĠ Ġprivate Ġval Ġlocale Ġ= ĠCreate Opp osition Value Form Locale Mock () ĊĊĠĠĠ Ġprivate Ġvar Ġcreate Opp osition Value Request : ĠPair < Value Web . Id , ĠNon Blank String >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġadd Opp osition To Value Web Ġ= ĠAdd Opp osition To Value Web Controller Double ( ĊĠĠĠĠĠĠĠ Ġon Add Opp osition Ġ= Ġ{ Ġvalue Web Id , Ġname , Ġcharacter Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( character Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . value Web Id . uuid . toString (), Ġvalue Web Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Opp osition Value Request Ġ= ĠValue Web . Id ( UUID . fromString ( value Web Id )) Ġto Ġname !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable Deferred () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġopp osition Added To Value Web : ĠO pp osition Added To Value Web ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġview : ĠCreate Opp osition Value Form Ġ= ĠCreate Opp osition Value Form ( ĊĠĠĠĠĠĠĠ Ġvalue Web Id , ĊĠĠĠĠĠĠĠ Ġ:: op position Added To Value Web :: set , ĊĠĠĠĠĠĠĠ Ġlocale , ĊĠĠĠĠĠĠĠ Ġadd Opp osition To Value Web ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshow View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġshow Ġtext Ġfrom Ġlocale Ġfor Ġname Ġinput Ġlabel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġinteract Ġ{ Ġlocale . name . set (" The Ġname Ġof Ġthe Ġthing ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" The Ġname Ġof Ġthe Ġthing ", Ġview . access (). name Label . text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` error Ġmessage Ġshould Ġnot Ġbe Ġvisible `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNull ( view . access (). errorMessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` name Ġinput Ġshould Ġbe Ġenabled Ġand Ġfocused `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . access (). name Input . is Disable ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( view . access (). name Input . is Focused ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġshould Ġname Ġcannot Ġbe Ġblank Ġerror Ġwhen Ġenter Ġis Ġpressed Ġgiven Ġtext Ġis Ġblank `() Ġ{ ĊĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinteract Ġ{ Ġlocale . name Cannot Be Blank . set (" you Ġcan 't ĠNOT Ġprovide Ġa Ġname , Ġd ude ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" you Ġcan 't ĠNOT Ġprovide Ġa Ġname , Ġd ude ", Ġview . access (). errorMessage !!. text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġopp osition Ġvalue Ġwhen Ġenter Ġis Ġpressed Ġgiven Ġtext Ġis Ġnot Ġblank `() Ġ{ ĊĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Ban ana ", Ġcreate Opp osition Value Request !!. second . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġshow Ġerror Ġif Ġcreate Ġopp osition Ġvalue Ġrequest Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Handler Ġ= Ġadd Opp osition To Value Web . on Add Opp osition ĊĠĠĠĠĠĠĠ Ġadd Opp osition To Value Web . on Add Opp osition Ġ= Ġ{ Ġa , Ġb , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Handler ( a , Ġb , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" Some Ġerror Ġwith Ġa Ġlocale Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Some Ġerror Ġwith Ġa Ġlocale Ġmessage ", Ġview . access (). errorMessage !!. text ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . access (). name Input . is Disable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdisable Ġname Ġinput Ġwhile Ġcreating Ġopp osition `() Ġ{ ĊĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( view . access (). name Input . is Disable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnotify Ġcreator Ġwhen Ġopp osition Ġis Ġcreated `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Handler Ġ= Ġadd Opp osition To Value Web . on Add Opp osition ĊĠĠĠĠĠĠĠ Ġadd Opp osition To Value Web . on Add Opp osition Ġ= Ġ{ Ġa , Ġb , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Handler ( a , Ġb , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO pp osition Added To Value Web ( UUID . randomUUID (), Ġvalue Web Id . uuid , ĠUUID . randomUUID (), Ġb !!. value , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( op position Added To Value Web ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( view . access (). name Input . is Disable ) ĊĠĠĠĠĠĠĠ ĠassertNull ( view . access (). errorMessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass Ġ` Given ĠPrevious ly ĠT ried Ġto ĠUse ĠBl ank ĠName ` Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġstill Ġdisplay Ġnew Ġerror Ġmessage Ġif Ġnext Ġattempt Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Handler Ġ= Ġadd Opp osition To Value Web . on Add Opp osition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Opp osition To Value Web . on Add Opp osition Ġ= Ġ{ Ġa , Ġb , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Handler ( a , Ġb , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" Some Ġerror Ġwith Ġa Ġlocale Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Some Ġerror Ġwith Ġa Ġlocale Ġmessage ", Ġview . access (). errorMessage !!. text ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( view . access (). name Input . is Disable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġno Ġlonger Ġshow Ġerror Ġmessage Ġwhen Ġopp osition Ġis Ġcreated `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Handler Ġ= Ġadd Opp osition To Value Web . on Add Opp osition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Opp osition To Value Web . on Add Opp osition Ġ= Ġ{ Ġa , Ġb , Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Handler ( a , Ġb , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO pp osition Added To Value Web ( UUID . randomUUID (), Ġvalue Web Id . uuid , ĠUUID . randomUUID (), Ġb !!. value , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . drive Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . text Ġ= Ġ" Ban ana " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . fire Event ( ActionEvent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( view . access (). errorMessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }