@@ -141,7 +141,7 @@ public void deferredReadReturnsValuesPublishedAfterItsInitialCacheMiss() {
141141 when (users .getDataManager ()).thenReturn (manager );
142142 when (manager .effectiveStorageType (UserStorage .SQLITE )).thenReturn (UserStorage .SQLITE );
143143 when (manager .mustDeferSharedStorageAccess ()).thenReturn (true );
144- when (cache .isCached (anyString ())).thenReturn (false );
144+ when (cache .getIfPresent (anyString ())).thenReturn (null );
145145 HashMap <String , DataValue > published = new HashMap <>();
146146 published .put ("Points" , new DataValueInt (42 ));
147147 published .put ("PlayerName" , new DataValueString ("FreshName" ));
@@ -151,4 +151,49 @@ public void deferredReadReturnsValuesPublishedAfterItsInitialCacheMiss() {
151151 assertEquals (42 , data .getInt ("Points" , 17 , UserDataFetchMode .DEFAULT ));
152152 assertEquals ("FreshName" , data .getString ("PlayerName" , UserDataFetchMode .DEFAULT ));
153153 }
154+ @ Test
155+ public void cachedReadUsesAtomicCacheAccessor () {
156+ AdvancedCorePlugin plugin = mock (AdvancedCorePlugin .class );
157+ AdvancedCoreUser user = mock (AdvancedCoreUser .class );
158+ UserManager users = mock (UserManager .class );
159+ UserDataManager manager = mock (UserDataManager .class );
160+ UserDataCache cache = mock (UserDataCache .class );
161+ when (user .getPlugin ()).thenReturn (plugin );
162+ when (user .getCache ()).thenReturn (cache );
163+ when (plugin .getUserManager ()).thenReturn (users );
164+ when (plugin .getStorageType ()).thenReturn (UserStorage .SQLITE );
165+ when (users .getDataManager ()).thenReturn (manager );
166+ when (manager .effectiveStorageType (UserStorage .SQLITE )).thenReturn (UserStorage .SQLITE );
167+ when (cache .getIfPresent ("Points" )).thenReturn (new DataValueInt (23 ));
168+ when (cache .getEntryIfPresent ("PlayerName" )).thenReturn (
169+ new java .util .AbstractMap .SimpleImmutableEntry <>("PlayerName" , new DataValueString ("Atomic" )));
170+
171+ UserData data = new UserData (user );
172+ assertEquals (23 , data .getInt ("Points" , 0 , UserDataFetchMode .CACHE_ONLY ));
173+ assertEquals ("Atomic" , data .getString ("PlayerName" , UserDataFetchMode .CACHE_ONLY ));
174+ verify (cache ).getIfPresent ("Points" );
175+ verify (cache ).getEntryIfPresent ("PlayerName" );
176+ verify (cache , never ()).getCache ();
177+ }
178+
179+ @ Test
180+ public void presentNullStringCacheEntryDoesNotFallThroughToStorage () {
181+ AdvancedCorePlugin plugin = mock (AdvancedCorePlugin .class );
182+ AdvancedCoreUser user = mock (AdvancedCoreUser .class );
183+ UserManager users = mock (UserManager .class );
184+ UserDataManager manager = mock (UserDataManager .class );
185+ UserDataCache cache = mock (UserDataCache .class );
186+ when (user .getPlugin ()).thenReturn (plugin );
187+ when (user .getCache ()).thenReturn (cache );
188+ when (plugin .getUserManager ()).thenReturn (users );
189+ when (plugin .getStorageType ()).thenReturn (UserStorage .SQLITE );
190+ when (users .getDataManager ()).thenReturn (manager );
191+ when (manager .effectiveStorageType (UserStorage .SQLITE )).thenReturn (UserStorage .SQLITE );
192+ when (cache .getEntryIfPresent ("PlayerName" ))
193+ .thenReturn (new java .util .AbstractMap .SimpleImmutableEntry <>("PlayerName" , null ));
194+
195+ UserData data = new UserData (user );
196+ assertEquals ("" , data .getString ("PlayerName" , UserDataFetchMode .DEFAULT ));
197+ }
198+
154199}
0 commit comments