Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
25d229c
test(Segment Membership): Add red tests for opt-in seed and reconciler
khvn26 Jun 27, 2026
2d42d27
test(Segment Membership): Apply review feedback to opt-in seed tests
khvn26 Jun 27, 2026
a24e80d
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 27, 2026
71a4c86
test(Segment Membership): Assert admin re-seed enqueues the seed task
khvn26 Jun 27, 2026
d4ebaf1
test(Segment Membership): Drop section-divider comments from seed tests
khvn26 Jun 27, 2026
5249a76
test(Segment Membership): Restore bare Given/When/Then markers
khvn26 Jun 27, 2026
8347f86
test(Segment Membership): Rename fixture loop var to trait_value
khvn26 Jun 27, 2026
af267d4
test(Segment Membership): Assert the full seed.environment.failed event
khvn26 Jun 27, 2026
a20708e
feat(Segment Membership): Seed identities per organisation on Beta op…
khvn26 Jun 27, 2026
7816c36
docs(Segment Membership): Regenerate events catalogue for seed events
khvn26 Jun 27, 2026
33cb498
test(Segment Membership): Split mapper test GWT markers onto separate…
khvn26 Jun 27, 2026
6c9bb4c
fix(Segment Membership): Defer task import in admin so startup doesn'…
khvn26 Jun 29, 2026
07fa649
chore(Segment Membership): Surface segment_membership logs via APPLIC…
khvn26 Jun 29, 2026
dd242ad
fix(Segment Membership): Warn when a seed skips on missing ClickHouse…
khvn26 Jun 30, 2026
ef149a3
refactor(Segment Membership): Select an org's live-segment projects w…
khvn26 Jun 30, 2026
94cc2dd
chore(Segment Membership): Mark the seed reconciler for retirement at…
khvn26 Jun 30, 2026
b2e6d4b
docs(Segment Membership): Trim the refresh_all_segment_counts docstring
khvn26 Jun 30, 2026
18ade33
build(deps): Bump flagsmith-sql-flag-engine to 0.1.2
khvn26 Jun 30, 2026
8540a29
Merge remote-tracking branch 'origin/main' into feat/segment-membersh…
khvn26 Jun 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from django.contrib.admin.sites import AdminSite
from django.utils import timezone
from pytest_mock import MockerFixture
from segment_membership.admin import SegmentMembershipSeedAdmin

Check failure on line 4 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.12)

Cannot find implementation or library stub for module named "segment_membership.admin"

Check failure on line 4 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.11)

Cannot find implementation or library stub for module named "segment_membership.admin"

Check failure on line 4 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.13)

Cannot find implementation or library stub for module named "segment_membership.admin"

from organisations.models import Organisation
from segment_membership.models import SegmentMembershipSeed

Check failure on line 7 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.12)

Module "segment_membership.models" has no attribute "SegmentMembershipSeed"; maybe "SegmentMembershipCount"?

Check failure on line 7 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.11)

Module "segment_membership.models" has no attribute "SegmentMembershipSeed"; maybe "SegmentMembershipCount"?

Check failure on line 7 in api/tests/unit/segment_membership/test_unit_segment_membership_admin.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.13)

Module "segment_membership.models" has no attribute "SegmentMembershipSeed"; maybe "SegmentMembershipCount"?


def test_segment_membership_seed_admin_force_reseed__queryset__clears_marker_and_enqueues_seed(
organisation: Organisation,
mocker: MockerFixture,
) -> None:
# Given
seed = SegmentMembershipSeed.objects.create(
organisation=organisation, seeded_at=timezone.now()
)
seed_task = mocker.patch("segment_membership.admin.seed_organisation_identities")
admin = SegmentMembershipSeedAdmin(SegmentMembershipSeed, AdminSite())

# When
admin.force_reseed(
request=mocker.MagicMock(), queryset=SegmentMembershipSeed.objects.all()
)

# Then
seed.refresh_from_db()
assert seed.seeded_at is None
seed_task.delay.assert_called_once_with(args=(organisation.id,))
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
from datetime import datetime, timezone
from decimal import Decimal

import pytest
from flagsmith_schemas.dynamodb import Identity as DynamoIdentity

from segment_membership.mappers import map_identity_document_to_clickhouse_row
from segment_membership.types import ClickHouseIdentityRow

UUID_A = "f47ac10b-58cc-4372-a567-0e02b2c3d479"
INSERTED_AT = datetime(2026, 5, 8, 12, 0, 0, tzinfo=timezone.utc)


@pytest.mark.parametrize(
Expand All @@ -22,7 +25,7 @@
{"trait_key": "plan", "trait_value": "growth"},
],
},
("env-key", "alice", "env_x_alice", {"plan": "growth"}),
("env-key", "alice", "env_x_alice", {"plan": "growth"}, INSERTED_AT),
id="single string trait",
),
pytest.param(
Expand All @@ -34,7 +37,7 @@
"created_date": "2026-05-08T00:00:00Z",
"identity_traits": [],
},
("env-key", "alice", "env_x_alice", None),
("env-key", "alice", "env_x_alice", None, INSERTED_AT),
id="empty traits collapse to NULL",
),
pytest.param(
Expand All @@ -48,7 +51,7 @@
{"trait_key": "age", "trait_value": Decimal("18")},
],
},
("env-key", "alice", "env_x_alice", {"age": 18}),
("env-key", "alice", "env_x_alice", {"age": 18}, INSERTED_AT),
id="whole-number Decimal narrows to int",
),
pytest.param(
Expand All @@ -62,7 +65,7 @@
{"trait_key": "score", "trait_value": Decimal("1.5")},
],
},
("env-key", "alice", "env_x_alice", {"score": 1.5}),
("env-key", "alice", "env_x_alice", {"score": 1.5}, INSERTED_AT),
id="fractional Decimal narrows to float",
),
pytest.param(
Expand All @@ -82,16 +85,17 @@
"alice",
"env_x_alice",
{"plan": "growth", "team": "alpha"},
INSERTED_AT,
),
id="multiple traits flatten to a single dict",
),
],
)
def test_map_identity_document_to_clickhouse_row__cases__return_expected(
doc: DynamoIdentity,
expected: tuple[str, str, str, dict[str, object] | None],
expected: ClickHouseIdentityRow,
) -> None:
# Given a Dynamo identity document
# When mapped onto an IDENTITIES row
# Then it lines up positionally with the IDENTITIES schema
assert map_identity_document_to_clickhouse_row("env-key", doc) == expected
# Given / When / Then
assert (
map_identity_document_to_clickhouse_row("env-key", doc, INSERTED_AT) == expected

Check failure on line 100 in api/tests/unit/segment_membership/test_unit_segment_membership_mappers.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.12)

Too many arguments for "map_identity_document_to_clickhouse_row"

Check failure on line 100 in api/tests/unit/segment_membership/test_unit_segment_membership_mappers.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.11)

Too many arguments for "map_identity_document_to_clickhouse_row"

Check failure on line 100 in api/tests/unit/segment_membership/test_unit_segment_membership_mappers.py

View workflow job for this annotation

GitHub Actions / API Unit Tests (3.13)

Too many arguments for "map_identity_document_to_clickhouse_row"
)
Loading
Loading