@@ -124,8 +124,8 @@ def test_new_decision_when_hash_changes(self):
124
124
}
125
125
self .mock_cmab_client .fetch_decision .return_value = "varE"
126
126
127
- user_attrs = {"age" : 25 , "location" : "USA" }
128
- expected_hash = self .cmab_service ._hash_attributes (user_attrs )
127
+ expected_attribute = {"age" : 25 , "location" : "USA" }
128
+ expected_hash = self .cmab_service ._hash_attributes (expected_attribute )
129
129
expected_key = self .cmab_service ._get_cache_key ("user123" , "exp1" )
130
130
131
131
decision = self .cmab_service .get_decision (self .mock_project_config , self .mock_user_context , "exp1" , [])
@@ -139,6 +139,12 @@ def test_new_decision_when_hash_changes(self):
139
139
}
140
140
)
141
141
self .assertEqual (decision ["variation_id" ], "varE" )
142
+ self .mock_cmab_client .fetch_decision .assert_called_once_with (
143
+ "exp1" ,
144
+ self .mock_user_context .user_id ,
145
+ expected_attribute ,
146
+ decision ["cmab_uuid" ]
147
+ )
142
148
143
149
def test_filter_attributes_returns_correct_subset (self ):
144
150
filtered = self .cmab_service ._filter_attributes (self .mock_project_config , self .mock_user_context , "exp1" )
@@ -155,3 +161,27 @@ def test_hash_attributes_produces_stable_output(self):
155
161
hash1 = self .cmab_service ._hash_attributes (attrs )
156
162
hash2 = self .cmab_service ._hash_attributes ({"a" : 1 , "b" : 2 })
157
163
self .assertEqual (hash1 , hash2 )
164
+
165
+ def test_only_cmab_attributes_passed_to_client (self ):
166
+ self .mock_user_context .get_user_attributes .return_value = {
167
+ 'age' : 25 ,
168
+ 'location' : 'USA' ,
169
+ 'extra_attr' : 'value' , # This shouldn't be passed to CMAB
170
+ 'another_extra' : 123 # This shouldn't be passed to CMAB
171
+ }
172
+ self .mock_cmab_client .fetch_decision .return_value = "varF"
173
+
174
+ decision = self .cmab_service .get_decision (
175
+ self .mock_project_config ,
176
+ self .mock_user_context ,
177
+ "exp1" ,
178
+ [OptimizelyDecideOption .IGNORE_CMAB_CACHE ]
179
+ )
180
+
181
+ # Verify only age and location are passed (attributes configured in setUp)
182
+ self .mock_cmab_client .fetch_decision .assert_called_once_with (
183
+ "exp1" ,
184
+ self .mock_user_context .user_id ,
185
+ {"age" : 25 , "location" : "USA" },
186
+ decision ["cmab_uuid" ]
187
+ )
0 commit comments