Skip to content

Commit de92f5d

Browse files
committed
add unit tests
Signed-off-by: leohoare <[email protected]>
1 parent 6b259e4 commit de92f5d

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ dependencies = [
3434
"behave",
3535
"coverage[toml]>=6.5",
3636
"pytest",
37+
"pytest-asyncio",
3738
]
3839

3940
[tool.hatch.envs.default.scripts]

tests/test_client.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)