package Ġunittest Ċ Ċ import Ġcom . github . sh yn ix n . block ball . api . business . service . Persistence Stats Service Ċ import Ġcom . github . sh yn ix n . block ball . api . persistence . entity . Stats Ċ import Ġcom . github . sh yn ix n . block ball . bukkit . logic . business . listener . Stats Listener Ċ import Ġcom . github . sh yn ix n . block ball . core . logic . persistence . entity . Player Meta Entity Ċ import Ġcom . github . sh yn ix n . block ball . core . logic . persistence . entity . Stats Entity Ċ import Ġhelper . Mock ed Concurrency Service Ċ import Ġorg . bukkit . World Ċ import Ġorg . bukkit . entity . Player Ċ import Ġorg . bukkit . event . player . Player Join Event Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠStats Listener Test Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠPlayer Join Event Ġwith Ġvalid Ġplayer ĊĠĠĠĠ Ġ* ĠWhen ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġon Player Join Event Ġis Ġcalled ĊĠĠĠĠ Ġ* ĠThen ĊĠĠĠĠ Ġ* ĠĠĠĠ ĠRefresh Ġstats Ġshould Ġbe Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġon Player Join Event _ Valid New Player _ Call Refresh Stats () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpersistence Stats Service Ġ= ĠMock ed Stats Service () ĊĠĠĠĠĠĠĠ Ġval Ġclass UnderTest Ġ= Ġcreate With Dependencies ( persistence Stats Service ) ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠMockito . mock ( Player :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ ĠMockito .` when `( player . unique Id ). thenReturn ( uuid ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( player . world ). thenReturn ( Mockito . mock ( World :: class . java )) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( player . is Online ). thenReturn ( true ) ĊĊĠĠĠĠĠĠĠ Ġclass UnderTest . on Player Join Event ( Player Join Event ( player , Ġ" Test ")) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( persistence Stats Service . called Refresh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate With Dependencies ( stats Service : ĠPersistence Stats Service Ġ= ĠMock ed Stats Service ()): ĠStats Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconcurrency Service Ġ= ĠMock ed Concurrency Service () ĊĠĠĠĠĠĠĠ Ġreturn ĠStats Listener ( stats Service , Ġconcurrency Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMock ed Stats Service Ġ: ĠPersistence Stats Service Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcalled Refresh Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġcalled Save Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġclear Resources Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< P > Ġget Stats From Player ( player : ĠP ): ĠStats Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( player Ġis ĠPlayer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Meta Ġ= ĠPlayer Meta Entity ( UUID . randomUUID (). toString (), Ġ" test - user ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Entity Ġ= ĠStats Entity ( player Meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats Entity . amount Of Go als Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats Entity . amount Of Play ed Games Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats Entity . amount Of W ins Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstats Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< P > Ġrefresh Stats From Player ( player : ĠP ): ĠCompletableFuture < Stats > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalled Refresh Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave ( stats : ĠStats ): ĠCompletableFuture < Stats > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalled Save Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< P > Ġclear Resources ( player : ĠP ): ĠCompletableFuture < Void ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Resources Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCompletableFuture () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }