Skip to content

Commit 0e0e649

Browse files
authored
fix: store-created-at-in-identity-override-v2-document (#6863)
1 parent b0f6849 commit 0e0e649

File tree

4 files changed

+67
-16
lines changed

4 files changed

+67
-16
lines changed

api/environments/dynamodb/types.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import boto3
77
from django.conf import settings
8-
from pydantic import BaseModel
8+
from django.utils import timezone
9+
from pydantic import BaseModel, Field
910

1011
from util.engine_models.features.models import FeatureStateModel
1112

@@ -89,6 +90,7 @@ class IdentityOverrideV2(BaseModel):
8990
identifier: str
9091
identity_uuid: str
9192
feature_state: FeatureStateModel
93+
created_date: datetime = Field(default_factory=timezone.now)
9294

9395

9496
@dataclass

api/tests/unit/edge_api/identities/test_unit_edge_api_identities_tasks.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import pytest
44
from django.utils import timezone
5+
from freezegun import freeze_time
56
from pytest_mock import MockerFixture
67

78
from audit.models import AuditLog
@@ -399,6 +400,7 @@ def test_generate_audit_log_records( # type: ignore[no-untyped-def]
399400
).exists()
400401

401402

403+
@freeze_time("2023-01-01T00:00:00Z")
402404
def test_update_flagsmith_environments_v2_identity_overrides__call_expected(
403405
mocker: MockerFixture,
404406
environment: Environment,

api/tests/unit/environments/dynamodb/test_unit_services.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from decimal import Decimal
22

3+
from django.utils import timezone
4+
from freezegun import freeze_time
35
from mypy_boto3_dynamodb.service_resource import Table
46
from pytest_mock import MockerFixture
57

@@ -40,23 +42,24 @@ def test_migrate_environments_to_v2__environment_with_overrides__writes_expected
4042
expected_environment_document = map_environment_to_environment_v2_document(
4143
environment
4244
)
43-
expected_identity_override_document = (
44-
map_identity_override_to_identity_override_document(
45-
map_engine_feature_state_to_identity_override(
46-
feature_state=engine_identity.identity_features[0],
47-
identity_uuid=str(engine_identity.identity_uuid),
48-
identifier=engine_identity.identifier,
49-
environment_api_key=environment.api_key,
50-
environment_id=environment.id,
51-
),
45+
with freeze_time(timezone.now()):
46+
expected_identity_override_document = (
47+
map_identity_override_to_identity_override_document(
48+
map_engine_feature_state_to_identity_override(
49+
feature_state=engine_identity.identity_features[0],
50+
identity_uuid=str(engine_identity.identity_uuid),
51+
identifier=engine_identity.identifier,
52+
environment_api_key=environment.api_key,
53+
environment_id=environment.id,
54+
),
55+
)
5256
)
53-
)
5457

55-
# When
56-
migrate_environments_to_v2(
57-
project_id=environment.project_id,
58-
capacity_budget=float("Inf"), # type: ignore[arg-type]
59-
)
58+
# When
59+
migrate_environments_to_v2(
60+
project_id=environment.project_id,
61+
capacity_budget=float("Inf"), # type: ignore[arg-type]
62+
)
6063

6164
# Then
6265
results = flagsmith_environments_v2_table.scan()["Items"]

api/tests/unit/environments/dynamodb/wrappers/test_unit_dynamodb_environment_v2_wrapper.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from boto3.dynamodb.types import Binary
55
from common.test_tools import AssertMetricFixture
6+
from freezegun import freeze_time
67
from mypy_boto3_dynamodb.service_resource import Table
78
from pytest_django.fixtures import SettingsWrapper
89
from pytest_mock import MockerFixture
@@ -124,6 +125,49 @@ def test_environment_v2_wrapper__update_identity_overrides__put_expected(
124125
)
125126

126127

128+
@freeze_time("2023-01-01T00:00:00Z")
129+
def test_environment_v2_wrapper__update_identity_overrides__put__stores_created_date(
130+
settings: SettingsWrapper,
131+
environment: Environment,
132+
flagsmith_environments_v2_table: Table,
133+
feature: Feature,
134+
feature_state: FeatureState,
135+
) -> None:
136+
# Given
137+
settings.ENVIRONMENTS_V2_TABLE_NAME_DYNAMO = flagsmith_environments_v2_table.name
138+
wrapper = DynamoEnvironmentV2Wrapper()
139+
140+
identity_uuid = str(uuid.uuid4())
141+
override_document = IdentityOverrideV2.parse_obj(
142+
{
143+
"environment_id": str(environment.id),
144+
"document_key": get_environments_v2_identity_override_document_key(
145+
feature_id=feature.id, identity_uuid=identity_uuid
146+
),
147+
"environment_api_key": environment.api_key,
148+
"feature_state": map_feature_state_to_engine(feature_state),
149+
"identifier": "identity1",
150+
"identity_uuid": identity_uuid,
151+
}
152+
)
153+
154+
# When
155+
wrapper.update_identity_overrides(
156+
changeset=IdentityOverridesV2Changeset(
157+
to_delete=[],
158+
to_put=[override_document],
159+
),
160+
)
161+
162+
# Then
163+
results = flagsmith_environments_v2_table.scan()["Items"]
164+
assert len(results) == 1
165+
assert results[0] == map_identity_override_to_identity_override_document(
166+
override_document,
167+
)
168+
assert results[0]["created_date"] == "2023-01-01T00:00:00+00:00"
169+
170+
127171
def test_environment_v2_wrapper__update_identity_overrides__delete_expected(
128172
settings: SettingsWrapper,
129173
environment: Environment,

0 commit comments

Comments
 (0)