@@ -280,6 +280,61 @@ public async Task ThrowsForMissingFeatures()
280280 featureManager . IsEnabledAsync ( "NonExistentFeature" ) ) ;
281281 }
282282
283+ [ Fact ]
284+ public async Task SessionManagerQueriedWhenFeatureDefinitionIsNull ( )
285+ {
286+ IConfiguration config = new ConfigurationBuilder ( ) . AddJsonFile ( "appsettings.json" ) . Build ( ) ;
287+
288+ var services = new ServiceCollection ( ) ;
289+
290+ ISessionManager sessionManager = new TestSessionManager ( ) ;
291+
292+ await sessionManager . SetAsync ( "UnexistedFeature" , true ) ;
293+
294+ services
295+ . AddSingleton ( config )
296+ . AddSingleton < ISessionManager > ( sessionManager )
297+ . AddFeatureManagement ( ) ;
298+
299+ ServiceProvider serviceProvider = services . BuildServiceProvider ( ) ;
300+
301+ IFeatureManager featureManager = serviceProvider . GetRequiredService < IFeatureManager > ( ) ;
302+
303+ // Feature doesn't exist in configuration, but should return true from session
304+ Assert . True ( await featureManager . IsEnabledAsync ( "UnexistedFeature" ) ) ;
305+
306+ // Set the feature to false in session
307+ await sessionManager . SetAsync ( "UnexistedFeature" , false ) ;
308+
309+ // Should return false from session
310+ Assert . False ( await featureManager . IsEnabledAsync ( "UnexistedFeature" ) ) ;
311+ }
312+
313+ [ Fact ]
314+ public async Task SetResultInSessionManagerWhenFeatureDefinitionIsNull ( )
315+ {
316+ IConfiguration config = new ConfigurationBuilder ( ) . AddJsonFile ( "appsettings.json" ) . Build ( ) ;
317+
318+ var services = new ServiceCollection ( ) ;
319+
320+ ISessionManager sessionManager = new TestSessionManager ( ) ;
321+
322+ services
323+ . AddSingleton ( config )
324+ . AddSingleton < ISessionManager > ( sessionManager )
325+ . AddFeatureManagement ( ) ;
326+
327+ ServiceProvider serviceProvider = services . BuildServiceProvider ( ) ;
328+
329+ IFeatureManager featureManager = serviceProvider . GetRequiredService < IFeatureManager > ( ) ;
330+
331+ // session manager is clean here
332+ var result = await featureManager . IsEnabledAsync ( "UnexistedFeature" ) ;
333+
334+ // session manager should store the result after evaluation
335+ Assert . Equal ( result , await sessionManager . GetAsync ( "UnexistedFeature" ) ) ;
336+ }
337+
283338 [ Fact ]
284339 public async Task ThreadSafeSnapshot ( )
285340 {
0 commit comments