Skip to content

Commit

Permalink
fix: always store and search dashboard alias in lower case (#4676)
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewelwell authored Oct 2, 2024
1 parent 58eb9ed commit 22a3083
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 6 deletions.
15 changes: 13 additions & 2 deletions api/edge_api/identities/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,21 @@
from .tasks import call_environment_webhook_for_feature_state_change


class LowerCaseCharField(serializers.CharField):
def to_representation(self, value: typing.Any) -> str:
return super().to_representation(value).lower()

def to_internal_value(self, data: typing.Any) -> str:
return super().to_internal_value(data).lower()


class EdgeIdentitySerializer(serializers.Serializer):
identity_uuid = serializers.CharField(read_only=True)
identifier = serializers.CharField(required=True, max_length=2000)
dashboard_alias = serializers.CharField(required=False, max_length=100)
dashboard_alias = LowerCaseCharField(
required=False,
max_length=100,
)

def create(self, *args, **kwargs):
identifier = self.validated_data.get("identifier")
Expand Down Expand Up @@ -274,7 +285,7 @@ class GetEdgeIdentityOverridesQuerySerializer(serializers.Serializer):
class EdgeIdentitySearchField(serializers.CharField):
def to_internal_value(self, data: str) -> EdgeIdentitySearchData:
kwargs = {}
search_term = data
search_term = data.lower()

if search_term.startswith(DASHBOARD_ALIAS_SEARCH_PREFIX):
kwargs["search_attribute"] = DASHBOARD_ALIAS_ATTRIBUTE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,39 @@ def test_search_for_identities_by_dashboard_alias(
assert len(response.json()["results"]) == 1


def test_search_for_identities_by_dashboard_alias_casts_search_to_lower(
admin_client: APIClient,
dynamo_enabled_environment: Environment,
environment_api_key: str,
identity_document: dict[str, Any],
flagsmith_identities_table: Table,
) -> None:
# Given
identifier = identity_document["identifier"]
dashboard_alias = identity_document["dashboard_alias"]

flagsmith_identities_table.put_item(Item=identity_document)

base_url = reverse(
"api-v1:environments:environment-edge-identities-list",
args=[environment_api_key],
)
url = "%s?%s" % (
base_url,
urllib.parse.urlencode(
{"q": f'{DASHBOARD_ALIAS_SEARCH_PREFIX}"{dashboard_alias.upper()}"'}
),
)

# When
response = admin_client.get(url)

# Then
assert response.status_code == status.HTTP_200_OK
assert response.json()["results"][0]["identifier"] == identifier
assert len(response.json()["results"]) == 1


def test_update_edge_identity(
admin_client_new: APIClient,
dynamo_enabled_environment: Environment,
Expand All @@ -384,7 +417,8 @@ def test_update_edge_identity(
identity_uuid = identity_document["identity_uuid"]
composite_key = identity_document["composite_key"]

dashboard_alias = "new-dashboard-alias"
input_dashboard_alias = "New-Dashboard-Alias"
expected_dashboard_alias = input_dashboard_alias.lower()

flagsmith_identities_table.put_item(Item=identity_document)

Expand All @@ -394,13 +428,15 @@ def test_update_edge_identity(
)

# When
response = admin_client_new.patch(url, data={"dashboard_alias": dashboard_alias})
response = admin_client_new.patch(
url, data={"dashboard_alias": input_dashboard_alias}
)

# Then
assert response.status_code == status.HTTP_200_OK

assert response.json() == {
"dashboard_alias": dashboard_alias,
"dashboard_alias": expected_dashboard_alias,
"identifier": identity_document["identifier"],
"identity_uuid": identity_uuid,
}
Expand All @@ -411,7 +447,10 @@ def test_update_edge_identity(
identity_from_db = flagsmith_identities_table.get_item(
Key={"composite_key": composite_key}
)["Item"]
assert {**identity_document, "dashboard_alias": dashboard_alias} == identity_from_db
assert {
**identity_document,
"dashboard_alias": expected_dashboard_alias,
} == identity_from_db


def test_edge_identities_traits_list(
Expand Down

0 comments on commit 22a3083

Please sign in to comment.