@@ -384,3 +384,95 @@ def emit_events_task():
384384 f2 = executor .submit (emit_events_task )
385385 f1 .result ()
386386 f2 .result ()
387+
388+ @pytest .mark .asyncio
389+ async def test_evaluate_boolean_flag_details_async ():
390+ # Given
391+ provider = MagicMock (spec = FeatureProvider )
392+ provider .resolve_boolean_details_async .return_value = FlagResolutionDetails (
393+ value = True ,
394+ reason = Reason .TARGETING_MATCH ,
395+ )
396+ set_provider (provider )
397+ client = get_client ()
398+ # When
399+ flag = await client .evaluate_flag_details_async (
400+ flag_type = bool , flag_key = "Key" , default_value = True
401+ )
402+
403+ # Then
404+ assert flag is not None
405+ assert flag .value == True
406+
407+ @pytest .mark .asyncio
408+ async def test_evaluate_string_flag_details_async ():
409+ # Given
410+ provider = MagicMock (spec = FeatureProvider )
411+ provider .resolve_string_details_async .return_value = FlagResolutionDetails (
412+ value = "String" ,
413+ reason = Reason .TARGETING_MATCH ,
414+ )
415+ set_provider (provider )
416+ client = get_client ()
417+ # When
418+ flag = await client .evaluate_flag_details_async (
419+ flag_type = str , flag_key = "Key" , default_value = "String"
420+ )
421+
422+ # Then
423+ assert flag is not None
424+ assert flag .value == "String"
425+
426+ @pytest .mark .asyncio
427+ async def test_evaluate_integer_flag_details_async ():
428+ # Given
429+ provider = MagicMock (spec = FeatureProvider )
430+ provider .resolve_integer_details_async .return_value = FlagResolutionDetails (
431+ value = 100 ,
432+ reason = Reason .TARGETING_MATCH ,
433+ )
434+ set_provider (provider )
435+ client = get_client ()
436+ # When
437+ flag = await client .evaluate_flag_details_async (
438+ flag_type = int , flag_key = "Key" , default_value = 100
439+ )
440+
441+ # Then
442+ assert flag is not None
443+ assert flag .value == 100
444+
445+ @pytest .mark .asyncio
446+ async def test_evaluate_float_flag_details_async ():
447+ # Given
448+ provider = MagicMock (spec = FeatureProvider )
449+ provider .resolve_float_details_async .return_value = FlagResolutionDetails (
450+ value = 10.23 ,
451+ reason = Reason .TARGETING_MATCH ,
452+ )
453+ set_provider (provider )
454+ client = get_client ()
455+ # When
456+ flag = await client .evaluate_flag_details_async (
457+ flag_type = float , flag_key = "Key" , default_value = 10.23
458+ )
459+
460+ # Then
461+ assert flag is not None
462+ assert flag .value == 10.23
463+
464+
465+ @pytest .mark .asyncio
466+ async def test_allow_not_implemented_async_functions ():
467+ # Given
468+ provider = NoOpProvider ()
469+ set_provider (provider )
470+ # When
471+ with pytest .raises (NotImplementedError ) as exc_info :
472+ flag = await provider .resolve_boolean_details_async (
473+ flag_key = "Key" , default_value = True
474+ )
475+ raise Exception (flag )
476+
477+ # Then
478+ assert "does not support async operations" in str (exc_info .value )
0 commit comments