openreplay/api/test/test_feature_flag.py
Kraiem Taha Yassine dd5ff6bad8
Dev (#2409)
* refactor(chalice): upgraded dependencies

* refactor(chalice): upgraded dependencies
feat(chalice): support heatmaps

* feat(chalice): support table-of-browsers showing user-count

* feat(chalice): support table-of-devices showing user-count

* feat(chalice): support table-of-URLs showing user-count

* fix(chalice): fixed Math-operators validation
refactor(chalice): search for sessions that have events for heatmaps

* refactor(chalice): search for sessions that have at least 1 location event for heatmaps

* refactor(chalice): upgraded dependencies

* refactor(chalice): upgraded dependencies
feat(chalice): support heatmaps

* feat(chalice): support table-of-browsers showing user-count

* feat(chalice): support table-of-devices showing user-count

* feat(chalice): support table-of-URLs showing user-count

* fix(chalice): fixed Math-operators validation
refactor(chalice): search for sessions that have events for heatmaps

* refactor(chalice): search for sessions that have at least 1 location event for heatmaps

* refactor(chalice): refactored search sessions hooks

* refactor(DB): DB delta

* refactor(DB): DB delta

* refactor(DB): DB delta

* refactor(chalice): refactored schemas

* refactor(chalice): refactored schemas
refactor(chalice): cleaned scripts
feat(chalice): search sessions by CSS selector (PG)
2024-07-18 17:57:37 +02:00

186 lines
6.7 KiB
Python

import json
from pydantic.error_wrappers import ValidationError
import schemas
from chalicelib.core.feature_flags import prepare_conditions_values, prepare_variants_values
class TestFeatureFlag:
def test_prepare_conditions_values(self):
feature_flag_data = schemas.FeatureFlagSchema(
flagKey="flag_2",
conditions=[
schemas.FeatureFlagCondition(
name="Condition 2",
rolloutPercentage=75,
filters=[{"key": "value1"}]
),
schemas.FeatureFlagCondition(
name="Condition 3",
rolloutPercentage=25,
filters=[{"key": "value2"}]
)
]
)
expected_output = {
'condition_id_0': None,
"name_0": "Condition 2",
"rollout_percentage_0": 75,
"filters_0": json.dumps([{"key": "value1"}]),
'condition_id_1': None,
"name_1": "Condition 3",
"rollout_percentage_1": 25,
"filters_1": json.dumps([{"key": "value2"}])
}
assert prepare_conditions_values(feature_flag_data) == expected_output
def test_feature_flag_schema_validation(self):
try:
schemas.FeatureFlagSchema(
flagKey="valid_flag",
conditions=[
schemas.FeatureFlagCondition(name="Condition 1", rollout_percentage=50),
schemas.FeatureFlagCondition(name="Condition 2", rollout_percentage=25)
],
variants=[
schemas.FeatureFlagVariant(value="Variant 1", rollout_percentage=50),
schemas.FeatureFlagVariant(value="Variant 2", rollout_percentage=50)
]
)
except ValidationError:
assert False, "Valid data should not raise ValidationError"
try:
schemas.FeatureFlagSchema()
except ValidationError as e:
assert len(e.errors()) == 1
for error in e.errors():
assert error["type"] == "value_error.missing"
assert error["loc"] in [("flagKey",)]
else:
assert False, "Invalid data should raise ValidationError"
def test_feature_flag_variant_schema_validation(self):
try:
schemas.FeatureFlagVariant(
value="Variant Value",
description="Variant Description",
# payload={"key": "value"},
rolloutPercentage=50
)
except ValidationError:
assert False, "Valid data should not raise ValidationError"
try:
schemas.FeatureFlagVariant()
except ValidationError as e:
assert len(e.errors()) == 1
error = e.errors()[0]
assert error["type"] == "value_error.missing"
assert error["loc"] == ("value",)
else:
assert False, "Invalid data should raise ValidationError"
def test_feature_flag_condition_schema_validation(self):
try:
schemas.FeatureFlagCondition(
name="Condition Name",
rolloutPercentage=50,
filters=[{"key": "value"}]
)
except ValidationError:
assert False, "Valid data should not raise ValidationError"
try:
schemas.FeatureFlagCondition()
except ValidationError as e:
assert len(e.errors()) == 1
error = e.errors()[0]
assert error["type"] == "value_error.missing"
assert error["loc"] == ("name",)
else:
assert False, "Invalid data should raise ValidationError"
def test_search_flags_schema_validation(self):
try:
schemas.SearchFlagsSchema(
limit=15,
user_id=123,
order=schemas.SortOrderType.DESC,
query="search term",
is_active=True
)
except ValidationError:
assert False, "Valid data should not raise ValidationError"
try:
schemas.SearchFlagsSchema(
limit=500,
user_id=-1,
order="invalid",
query="a" * 201,
isActive=None
)
except ValidationError as e:
assert len(e.errors()) == 2
assert e.errors()[0]["ctx"] == {'limit_value': 200}
assert e.errors()[0]["type"] == "value_error.number.not_le"
assert e.errors()[1]["msg"] == "value is not a valid enumeration member; permitted: 'ASC', 'DESC'"
assert e.errors()[1]["type"] == "type_error.enum"
else:
assert False, "Invalid data should raise ValidationError"
def test_prepare_variants_values_single_variant(self):
feature_flag_data = schemas.FeatureFlagSchema(
flagKey="flag_1",
variants=[
schemas.FeatureFlagVariant(
value="Variant 1",
description="Description 1",
# payload="{'key': 'value1'}",
rolloutPercentage=50
)
]
)
expected_output = {
"v_value_0": "Variant 1",
"v_description_0": "Description 1",
# "payload_0": json.dumps({"key": "value1"}),
'v_payload_0': 'null',
"v_rollout_percentage_0": 50
}
assert prepare_variants_values(feature_flag_data) == expected_output
def test_prepare_variants_values_multiple_variants(self):
feature_flag_data = schemas.FeatureFlagSchema(
flagKey="flag_2",
variants=[
schemas.FeatureFlagVariant(
value="Variant 1",
description="Description 1",
# payload="{'key': 'value1'}",
rolloutPercentage=50
),
schemas.FeatureFlagVariant(
value="Variant 2",
description="Description 2",
# payload="{'key': 'value1'}",
rolloutPercentage=50
)
]
)
expected_output = {
"v_value_0": "Variant 1",
"v_description_0": "Description 1",
# "payload_0": json.dumps({"key": "value1"}),
'v_payload_0': 'null',
"v_rollout_percentage_0": 50,
"v_value_1": "Variant 2",
"v_description_1": "Description 2",
# "payload_1": json.dumps({"key": "value2"}),
'v_payload_1': 'null',
"v_rollout_percentage_1": 50
}
assert prepare_variants_values(feature_flag_data) == expected_output