package Ġcom . so yle . stories . use case . theme Ċ Ċ import Ġcom . so yle . stories . domain . shouldBe Ċ import Ġcom . so yle . stories . domain . theme . Theme Ċ import Ġcom . so yle . stories . domain . theme . Symbol Ċ import Ġcom . so yle . stories . use case . repositories . Theme Repository Double Ċ import Ġcom . so yle . stories . domain . theme . make Theme Ċ import Ġcom . so yle . stories . use case . theme . list Symbols In Theme . List Symbols In Theme Ċ import Ġcom . so yle . stories . use case . theme . list Symbols In Theme . List Symbols In Theme UseCase Ċ import Ġcom . so yle . stories . use case . theme . list Symbols In Theme . Symbols In Theme Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġjava . util .* Ċ Ċ class ĠList Symbols In Theme UnitTest Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtheme Id Ġ= ĠTheme . Id () ĊĠĠĠ Ġprivate Ġval Ġtheme Name Ġ= Ġ" Theme ĠName Ġ${ UUID . randomUUID (). toString (). take Last ( 3 )}" ĊĊĠĠĠ Ġprivate Ġvar Ġresult : ĠAny ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` theme Ġdoes Ġnot Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Ġ= ĠassertThrows < Theme DoesNotExist > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Symbols In Theme () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġtheme DoesNotExist ( theme Id . uuid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` theme Ġhas Ġno Ġsymbols `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Theme () ĊĠĠĠĠĠĠĠ Ġlist Symbols In Theme () ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġsymbols In Theme () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` theme Ġhas Ġsymbols `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsymbol Count Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġgiven Theme ( symbol Count ) ĊĠĠĠĠĠĠĠ Ġlist Symbols In Theme () ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe Ġsymbols In Theme ( symbol Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtheme Repository Ġ= ĠTheme Repository Double () ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Theme ( symbol Count : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtheme Repository . themes [ theme Id ] Ġ= Ġmake Theme ( theme Id , Ġname Ġ= Ġtheme Name , Ġsymbols Ġ= ĠList ( symbol Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSymbol (" Symbol Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Symbols In Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Case : ĠList Symbols In Theme Ġ= ĠList Symbols In Theme UseCase ( theme Repository ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġobject Ġ: ĠList Symbols In Theme . Output Port Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġsymbols List ed In Theme ( response : ĠS ymbols In Theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . invoke ( theme Id . uuid , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsymbols In Theme ( expected Symbol Count : ĠInt Ġ= Ġ 0 ): Ġ( Any ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual Ġ-> ĊĠĠĠĠĠĠĠ Ġactual Ġas ĠS ymbols In Theme ĊĠĠĠĠĠĠĠ ĠassertEquals ( theme Id . uuid , Ġactual . theme Id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( theme Name , Ġactual . theme Name ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . symbols . all Ġ{ Ġit Ġis ĠSymbol Item Ġ}) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Symbol Count , Ġactual . symbols . size ) ĊĠĠĠĠĠĠĠ Ġval Ġsymbols Ġ= Ġtheme Repository . themes [ theme Id ] !!. symbols . associate By Ġ{ Ġit . id . uuid Ġ} ĊĠĠĠĠĠĠĠ Ġactual . symbols . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbacking Symbol Ġ= Ġsymbols . getValue ( it . symbol Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( back ing Symbol . name , Ġit . symbol Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }