File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -437,6 +437,14 @@ def track_exposure_event(
437437 ) -> None :
438438 if not self ._event_processor :
439439 raise ValueError ("Events must be enabled to track exposure events." )
440+ if not identifier :
441+ logger .warning (
442+ "Not sending %s for feature %s: an exposure requires an"
443+ " identifier to reconcile with conversion events." ,
444+ FLAG_EXPOSURE_EVENT ,
445+ feature_name ,
446+ )
447+ return
440448 self ._event_processor .track_exposure_event (
441449 feature_name = feature_name ,
442450 identifier = identifier ,
Original file line number Diff line number Diff line change @@ -1021,6 +1021,27 @@ def test_track_exposure_event_raises_without_config(api_key: str) -> None:
10211021 flagsmith .track_exposure_event ("checkout_v2" )
10221022
10231023
1024+ def test_track_exposure_event__no_identifier__exposure_not_sent (
1025+ mocker : MockerFixture ,
1026+ api_key : str ,
1027+ caplog : pytest .LogCaptureFixture ,
1028+ ) -> None :
1029+ # Given
1030+ config = EventProcessorConfig (events_api_url = "http://test/" )
1031+ flagsmith = Flagsmith (
1032+ environment_key = api_key , enable_events = True , event_processor_config = config
1033+ )
1034+
1035+ mock_track = mocker .patch .object (flagsmith ._event_processor , "track_exposure_event" )
1036+
1037+ # When
1038+ flagsmith .track_exposure_event ("checkout_v2" , value = "variant_b" )
1039+
1040+ # Then
1041+ mock_track .assert_not_called ()
1042+ assert "an exposure requires an identifier" in caplog .text
1043+
1044+
10241045def test_track_exposure_event_delegates_to_event_processor (
10251046 mocker : MockerFixture , api_key : str
10261047) -> None :
You can’t perform that action at this time.
0 commit comments