Skip to content

Commit

Permalink
add unit tests
Browse files Browse the repository at this point in the history
Signed-off-by: leohoare <[email protected]>
  • Loading branch information
leohoare committed Nov 7, 2024
1 parent 6b259e4 commit de92f5d
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 0 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ dependencies = [
"behave",
"coverage[toml]>=6.5",
"pytest",
"pytest-asyncio",
]

[tool.hatch.envs.default.scripts]
Expand Down
92 changes: 92 additions & 0 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,95 @@ def emit_events_task():
f2 = executor.submit(emit_events_task)
f1.result()
f2.result()

@pytest.mark.asyncio
async def test_evaluate_boolean_flag_details_async():
# Given
provider = MagicMock(spec=FeatureProvider)
provider.resolve_boolean_details_async.return_value = FlagResolutionDetails(
value=True,
reason=Reason.TARGETING_MATCH,
)
set_provider(provider)
client = get_client()
# When
flag = await client.evaluate_flag_details_async(
flag_type=bool, flag_key="Key", default_value=True
)

# Then
assert flag is not None
assert flag.value == True

@pytest.mark.asyncio
async def test_evaluate_string_flag_details_async():
# Given
provider = MagicMock(spec=FeatureProvider)
provider.resolve_string_details_async.return_value = FlagResolutionDetails(
value="String",
reason=Reason.TARGETING_MATCH,
)
set_provider(provider)
client = get_client()
# When
flag = await client.evaluate_flag_details_async(
flag_type=str, flag_key="Key", default_value="String"
)

# Then
assert flag is not None
assert flag.value == "String"

@pytest.mark.asyncio
async def test_evaluate_integer_flag_details_async():
# Given
provider = MagicMock(spec=FeatureProvider)
provider.resolve_integer_details_async.return_value = FlagResolutionDetails(
value=100,
reason=Reason.TARGETING_MATCH,
)
set_provider(provider)
client = get_client()
# When
flag = await client.evaluate_flag_details_async(
flag_type=int, flag_key="Key", default_value=100
)

# Then
assert flag is not None
assert flag.value == 100

@pytest.mark.asyncio
async def test_evaluate_float_flag_details_async():
# Given
provider = MagicMock(spec=FeatureProvider)
provider.resolve_float_details_async.return_value = FlagResolutionDetails(
value=10.23,
reason=Reason.TARGETING_MATCH,
)
set_provider(provider)
client = get_client()
# When
flag = await client.evaluate_flag_details_async(
flag_type=float, flag_key="Key", default_value=10.23
)

# Then
assert flag is not None
assert flag.value == 10.23


@pytest.mark.asyncio
async def test_allow_not_implemented_async_functions():
# Given
provider = NoOpProvider()
set_provider(provider)
# When
with pytest.raises(NotImplementedError) as exc_info:
flag = await provider.resolve_boolean_details_async(
flag_key="Key", default_value=True
)
raise Exception(flag)

Check warning on line 475 in tests/test_client.py

View check run for this annotation

Codecov / codecov/patch

tests/test_client.py#L475

Added line #L475 was not covered by tests

# Then
assert "does not support async operations" in str(exc_info.value)

0 comments on commit de92f5d

Please sign in to comment.