@@ -113,6 +113,7 @@ def test_create_impression_event(self):
113113 False ,
114114 'test_user' ,
115115 None ,
116+ None
116117 )
117118
118119 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -247,6 +248,7 @@ def test_create_impression_event__with_attributes(self):
247248 True ,
248249 'test_user' ,
249250 {'test_attribute' : 'test_value' },
251+ None
250252 )
251253
252254 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -313,6 +315,7 @@ def test_create_impression_event_when_attribute_is_not_in_datafile(self):
313315 True ,
314316 'test_user' ,
315317 {'do_you_know_me' : 'test_value' },
318+ None
316319 )
317320
318321 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -472,6 +475,7 @@ def test_create_impression_event__with_user_agent_when_bot_filtering_is_enabled(
472475 False ,
473476 'test_user' ,
474477 {'$opt_user_agent' : 'Edge' },
478+ None
475479 )
476480
477481 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -548,6 +552,7 @@ def test_create_impression_event__with_empty_attributes_when_bot_filtering_is_en
548552 False ,
549553 'test_user' ,
550554 None ,
555+ None
551556 )
552557
553558 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -630,6 +635,7 @@ def test_create_impression_event__with_user_agent_when_bot_filtering_is_disabled
630635 True ,
631636 'test_user' ,
632637 {'$opt_user_agent' : 'Chrome' },
638+ None
633639 )
634640
635641 log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -1089,3 +1095,136 @@ def test_create_conversion_event__when_event_is_used_in_multiple_experiments(sel
10891095 EventFactory .HTTP_VERB ,
10901096 EventFactory .HTTP_HEADERS ,
10911097 )
1098+
1099+ def test_create_impression_event_with_cmab_uuid (self ):
1100+ """ Test that create_impression_event creates LogEvent object with CMAB UUID in metadata. """
1101+
1102+ expected_params = {
1103+ 'account_id' : '12001' ,
1104+ 'project_id' : '111001' ,
1105+ 'visitors' : [
1106+ {
1107+ 'visitor_id' : 'test_user' ,
1108+ 'attributes' : [],
1109+ 'snapshots' : [
1110+ {
1111+ 'decisions' : [
1112+ {'variation_id' : '111129' , 'experiment_id' : '111127' , 'campaign_id' : '111182' ,
1113+ 'metadata' : {'flag_key' : '' ,
1114+ 'rule_key' : 'rule_key' ,
1115+ 'rule_type' : 'experiment' ,
1116+ 'variation_key' : 'variation' ,
1117+ 'enabled' : False ,
1118+ 'cmab_uuid' : 'test-cmab-uuid-123'
1119+ }
1120+ }
1121+ ],
1122+ 'events' : [
1123+ {
1124+ 'timestamp' : 42123 ,
1125+ 'entity_id' : '111182' ,
1126+ 'uuid' : 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c' ,
1127+ 'key' : 'campaign_activated' ,
1128+ }
1129+ ],
1130+ }
1131+ ],
1132+ }
1133+ ],
1134+ 'client_name' : 'python-sdk' ,
1135+ 'client_version' : version .__version__ ,
1136+ 'enrich_decisions' : True ,
1137+ 'anonymize_ip' : False ,
1138+ 'revision' : '42' ,
1139+ }
1140+
1141+ with mock .patch ('time.time' , return_value = 42.123 ), mock .patch (
1142+ 'uuid.uuid4' , return_value = 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c'
1143+ ):
1144+ event_obj = UserEventFactory .create_impression_event (
1145+ self .project_config ,
1146+ self .project_config .get_experiment_from_key ('test_experiment' ),
1147+ '111129' ,
1148+ '' ,
1149+ 'rule_key' ,
1150+ 'experiment' ,
1151+ False ,
1152+ 'test_user' ,
1153+ None ,
1154+ 'test-cmab-uuid-123' # cmab_uuid parameter
1155+ )
1156+
1157+ log_event = EventFactory .create_log_event (event_obj , self .logger )
1158+
1159+ self ._validate_event_object (
1160+ log_event , EventFactory .EVENT_ENDPOINT , expected_params , EventFactory .HTTP_VERB , EventFactory .HTTP_HEADERS ,
1161+ )
1162+
1163+ def test_create_impression_event_without_cmab_uuid (self ):
1164+ """ Test that create_impression_event creates LogEvent object without CMAB UUID when not provided. """
1165+
1166+ expected_params = {
1167+ 'account_id' : '12001' ,
1168+ 'project_id' : '111001' ,
1169+ 'visitors' : [
1170+ {
1171+ 'visitor_id' : 'test_user' ,
1172+ 'attributes' : [],
1173+ 'snapshots' : [
1174+ {
1175+ 'decisions' : [
1176+ {
1177+ 'variation_id' : '111129' , 'experiment_id' : '111127' , 'campaign_id' : '111182' ,
1178+ 'metadata' : {
1179+ 'flag_key' : '' ,
1180+ 'rule_key' : 'rule_key' ,
1181+ 'rule_type' : 'experiment' ,
1182+ 'variation_key' : 'variation' ,
1183+ 'enabled' : False
1184+ }
1185+ }
1186+ ],
1187+ 'events' : [
1188+ {
1189+ 'timestamp' : 42123 ,
1190+ 'entity_id' : '111182' ,
1191+ 'uuid' : 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c' ,
1192+ 'key' : 'campaign_activated' ,
1193+ }
1194+ ],
1195+ }
1196+ ],
1197+ }
1198+ ],
1199+ 'client_name' : 'python-sdk' ,
1200+ 'client_version' : version .__version__ ,
1201+ 'enrich_decisions' : True ,
1202+ 'anonymize_ip' : False ,
1203+ 'revision' : '42' ,
1204+ }
1205+
1206+ with mock .patch ('time.time' , return_value = 42.123 ), mock .patch (
1207+ 'uuid.uuid4' , return_value = 'a68cf1ad-0393-4e18-af87-efe8f01a7c9c'
1208+ ):
1209+ event_obj = UserEventFactory .create_impression_event (
1210+ self .project_config ,
1211+ self .project_config .get_experiment_from_key ('test_experiment' ),
1212+ '111129' ,
1213+ '' ,
1214+ 'rule_key' ,
1215+ 'experiment' ,
1216+ False ,
1217+ 'test_user' ,
1218+ None ,
1219+ None # No cmab_uuid
1220+ )
1221+
1222+ log_event = EventFactory .create_log_event (event_obj , self .logger )
1223+
1224+ # Verify no cmab_uuid in metadata
1225+ metadata = log_event .params ['visitors' ][0 ]['snapshots' ][0 ]['decisions' ][0 ]['metadata' ]
1226+ self .assertNotIn ('cmab_uuid' , metadata )
1227+
1228+ self ._validate_event_object (
1229+ log_event , EventFactory .EVENT_ENDPOINT , expected_params , EventFactory .HTTP_VERB , EventFactory .HTTP_HEADERS ,
1230+ )
0 commit comments