@@ -113,6 +113,7 @@ def test_create_impression_event(self):
113
113
False ,
114
114
'test_user' ,
115
115
None ,
116
+ None
116
117
)
117
118
118
119
log_event = EventFactory .create_log_event (event_obj , self .logger )
@@ -247,6 +248,7 @@ def test_create_impression_event__with_attributes(self):
247
248
True ,
248
249
'test_user' ,
249
250
{'test_attribute' : 'test_value' },
251
+ None
250
252
)
251
253
252
254
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):
313
315
True ,
314
316
'test_user' ,
315
317
{'do_you_know_me' : 'test_value' },
318
+ None
316
319
)
317
320
318
321
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(
472
475
False ,
473
476
'test_user' ,
474
477
{'$opt_user_agent' : 'Edge' },
478
+ None
475
479
)
476
480
477
481
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
548
552
False ,
549
553
'test_user' ,
550
554
None ,
555
+ None
551
556
)
552
557
553
558
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
630
635
True ,
631
636
'test_user' ,
632
637
{'$opt_user_agent' : 'Chrome' },
638
+ None
633
639
)
634
640
635
641
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
1089
1095
EventFactory .HTTP_VERB ,
1090
1096
EventFactory .HTTP_HEADERS ,
1091
1097
)
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