package Ġcom . so yle . stories . use case . theme Ċ Ċ import Ġcom . so yle . stories . domain . shouldBe Ċ import Ġcom . so yle . stories . domain . theme .* Ċ import Ġcom . so yle . stories . use case . repositories . Theme Repository Double Ċ import Ġcom . so yle . stories . use case . theme . rename Symbolic Items . Rename Symbolic Item Ċ import Ġcom . so yle . stories . use case . theme . rename Symbolic Items . Rename Symbolic Item UseCase Ċ import Ġcom . so yle . stories . use case . theme . rename Symbolic Items . Rename d Symbolic Item Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util .* Ċ Ċ class ĠRename Symbolic Item UnitTest Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsymbolic EntityId Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġprivate Ġval Ġoriginal Name Ġ= Ġ" OG ĠName Ġ${ UUID . randomUUID () }" ĊĠĠĠ Ġprivate Ġval ĠnewName Ġ= Ġ" New ĠName Ġ${ UUID . randomUUID () }" ĊĊĠĠĠ Ġprivate Ġvar Ġupdated Themes : ĠList < Theme >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġresult : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass Ġ` No Ġthemes Ġhave Ġthe Ġentity Ġas Ġa Ġsymbolic Ġitem ` Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ After Each ĊĠĠĠĠĠĠĠ Ġfun Ġ` assert Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrename Symbolic Item () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( updated Themes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġ:: empty ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` no Ġthemes Ġexist `() Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` themes Ġexist Ġwithout Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven Themes () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` one Ġopp osition Ġvalue Ġhas Ġentity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Opp osition With Entity () ĊĠĠĠĠĠĠĠ Ġrename Symbolic Item () ĊĠĠĠĠĠĠĠ Ġupdated Themes ĠshouldBe ĠlistOf Themes Of Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġresponse Model ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` all Ġopp osition s Ġper Ġvalue Ġweb Ġper Ġtheme Ġshould Ġbe Ġoutput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Opp osition With Entity ( theme Count Ġ= Ġ 3 , Ġvalue Web Count Ġ= Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġrename Symbolic Item () ĊĠĠĠĠĠĠĠ Ġupdated Themes ĠshouldBe ĠlistOf Themes Of Size ( 3 ) ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġresponse Model ( 1 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` only Ġopp osition s Ġwith Ġentity Ġoutput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Opp osition With Entity ( theme Count Ġ= Ġ 2 , Ġvalue Web Count Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġgiven Themes ( theme Count Ġ= Ġ 3 , Ġvalue Web Count Ġ= Ġ 4 , Ġopp osition Count Ġ= Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġrename Symbolic Item () ĊĠĠĠĠĠĠĠ Ġupdated Themes ĠshouldBe ĠlistOf Themes Of Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġresponse Model ( 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtheme Repository Ġ= ĠTheme Repository Double ( on Update Theme Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġupdated Themes Ġ= Ġ( updated Themes Ġ?: ĠlistOf ()) Ġ+ Ġit ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Opp osition With Entity ( theme Count : ĠInt Ġ= Ġ 1 , Ġvalue Web Count : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠList ( theme Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Theme ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Web s Ġ= ĠList ( value Web Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Value Web ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp osition s Ġ= ĠlistOf ( make Opp osition Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentations Ġ= ĠlistOf ( Symbolic Representation ( s ymbolic EntityId , Ġoriginal Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Repository . themes [ it . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġgiven Themes ( theme Count : ĠInt Ġ= Ġ 1 , Ġvalue Web Count : ĠInt Ġ= Ġ 1 , Ġopp osition Count : ĠInt Ġ= Ġ 1 ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠList ( theme Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Theme ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Web s Ġ= ĠList ( value Web Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Value Web ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp osition s Ġ= ĠList ( op position Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Opp osition Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Repository . themes [ it . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrename Symbolic Item () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Case : ĠRename Symbolic Item Ġ= ĠRename Symbolic Item UseCase ( theme Repository ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġobject Ġ: ĠRename Symbolic Item . Output Port Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġsymbolic Item Rename d ( response : ĠList < Rename d Symbolic Item >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . invoke ( s ymbolic EntityId , ĠnewName , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġempty ( actual : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠList < *> ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . isEmpty ()) Ġ{ Ġ" Expected Ġto Ġbe Ġempty " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresponse Model ( expected Count : ĠInt ) Ġ= Ġfun Ġ( actual : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠList < *> ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . all Ġ{ Ġit Ġis ĠRename d Symbolic Item Ġ}) ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠList < Rename d Symbolic Item > ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Count , Ġactual . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( updated Themes ?. flatMap Ġ{ Ġtheme Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme . value Web s . flatMap Ġ{ Ġvalue Web Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Web . op positions . flatMap Ġ{ Ġopp osition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp osition . represent ations . filter Ġ{ Ġit . entity UUID Ġ== Ġsymbolic EntityId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Id : Ġ${ theme . id . uuid } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Id : Ġ${ value Web . id . uuid } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp osition Id : Ġ${ op position . id . uuid } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ?. toSet () Ġ?: Ġset Of < String >(), Ġactual . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Id : Ġ${ it . theme Id } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Id : Ġ${ it . value Web Id } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp osition Id : Ġ${ it . op position Id } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ}. toSet ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠlistOf Themes Of Size ( expected Side : ĠInt ) Ġ= Ġfun Ġ( actual : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠList < *> ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . all Ġ{ Ġit Ġis ĠTheme Ġ}) ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠList < Theme > ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Side , Ġactual . size ) ĊĠĠĠĠĠĠĠ Ġactual . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . value Web s . as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . op positions . as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . represent ations . as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . entity UUID Ġ== Ġsymbolic EntityId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĠassertEquals ( new Name , Ġit . name ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ }