Skip to content

[FSSDK-10763] Implement UPS request batching for decideForKeys #440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 29 commits into from
Nov 27, 2024
Merged
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
0411458
update: UserProfile class created, changes in decision_service, decid…
FarhanAnjum-opti Nov 4, 2024
43a0c74
update: get_variation function changed
FarhanAnjum-opti Nov 4, 2024
d462339
update: new function in decision_service
FarhanAnjum-opti Nov 6, 2024
fc976ff
update: everything implemented from java. tests are failing
FarhanAnjum-opti Nov 6, 2024
4187366
update: minor changes
FarhanAnjum-opti Nov 6, 2024
8d32180
update: user_profile_tracker added to tests
FarhanAnjum-opti Nov 8, 2024
ba44a6c
update: some tests fixed
FarhanAnjum-opti Nov 12, 2024
c78df2f
🛠️ optimizely/decision_service.py -> Added check for `ignore_user_pro…
FarhanAnjum-opti Nov 12, 2024
d02c3d8
🛠️ tests/test_decision_service.py -> Added expected decision object.
FarhanAnjum-opti Nov 12, 2024
c67bcf3
optimizely/decision_service.py -> fixed get_variations_for_feature_list
FarhanAnjum-opti Nov 12, 2024
820ba3e
optimizely/decision_service.py -> Fixed how rollout reasons are added
FarhanAnjum-opti Nov 12, 2024
309223c
tests/test_user_context.py -> fixed some tests
FarhanAnjum-opti Nov 12, 2024
ca1b248
optimizely/user_profile.py -> Updated type for `experiment_bucket_map`.
FarhanAnjum-opti Nov 13, 2024
d0bc332
all unit tests passing
FarhanAnjum-opti Nov 13, 2024
e6e442a
lint check
FarhanAnjum-opti Nov 13, 2024
0c92722
fix: typechecks added
FarhanAnjum-opti Nov 20, 2024
af9715e
more types updated
FarhanAnjum-opti Nov 20, 2024
e2d7c91
all typechecks passing
FarhanAnjum-opti Nov 20, 2024
cc4da7e
gha typechecks fixed
FarhanAnjum-opti Nov 20, 2024
dd62075
all typecheck should pass
FarhanAnjum-opti Nov 20, 2024
2477d11
lint check should pass
FarhanAnjum-opti Nov 20, 2024
27ef846
removed unnecessary comments
FarhanAnjum-opti Nov 20, 2024
e2810c8
removed comments from test
FarhanAnjum-opti Nov 20, 2024
9228727
optimizely/decision_service.py -> Removed user profile save logic
FarhanAnjum-opti Nov 21, 2024
b33a92b
optimizely/user_profile.py -> Updated experiment_bucket_map type
FarhanAnjum-opti Nov 22, 2024
1dd1eef
optimizely/decision_service.py -> Commented out profile loading
FarhanAnjum-opti Nov 22, 2024
6387ca2
optimizely/decision_service.py -> Removed unused profile loading
FarhanAnjum-opti Nov 25, 2024
8359498
optimizely/user_profile.py -> Reverted back to variation ID retrieval…
FarhanAnjum-opti Nov 26, 2024
b825ab4
optimizely/user_profile.py -> Added error handling logic
FarhanAnjum-opti Nov 27, 2024
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
Prev Previous commit
Next Next commit
tests/test_user_context.py -> fixed some tests
  • Loading branch information
FarhanAnjum-opti committed Nov 12, 2024
commit 309223ce9b4bcd3073b805a8c471b223426b35c5
53 changes: 28 additions & 25 deletions tests/test_user_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -678,9 +678,9 @@ def test_decide__default_option__disable_decision_event(self):
mock_variation = project_config.get_variation_from_id('test_experiment', '111129')

with mock.patch(
'optimizely.decision_service.DecisionService.get_variation_for_feature',
return_value=(decision_service.Decision(mock_experiment, mock_variation,
enums.DecisionSources.FEATURE_TEST), []),
'optimizely.decision_service.DecisionService.get_variations_for_feature_list',
return_value=([decision_service.Decision(mock_experiment, mock_variation,
enums.DecisionSources.FEATURE_TEST), []]),
), mock.patch(
'optimizely.notification_center.NotificationCenter.send_notifications'
) as mock_broadcast_decision, mock.patch(
Expand Down Expand Up @@ -968,14 +968,17 @@ def test_decide_for_keys(self):
mocked_decision_2 = OptimizelyDecision(flag_key='test_feature_in_rollout', enabled=False)

def side_effect(*args, **kwargs):
flag = args[1]
if flag == 'test_feature_in_experiment':
return mocked_decision_1
else:
return mocked_decision_2
flags = args[1]
res = {}
for flag in flags:
if flag == 'test_feature_in_experiment':
res[flag] = mocked_decision_1
else:
res[flag] = mocked_decision_2
return res

with mock.patch(
'optimizely.optimizely.Optimizely._decide', side_effect=side_effect
'optimizely.optimizely.Optimizely._decide_for_keys', side_effect=side_effect
) as mock_decide, mock.patch(
'optimizely.optimizely_user_context.OptimizelyUserContext._clone',
return_value=user_context
Expand All @@ -984,18 +987,10 @@ def side_effect(*args, **kwargs):
flags = ['test_feature_in_rollout', 'test_feature_in_experiment']
options = []
decisions = user_context.decide_for_keys(flags, options)

self.assertEqual(2, len(decisions))

mock_decide.assert_any_call(
user_context,
'test_feature_in_experiment',
options
)

mock_decide.assert_any_call(
user_context,
'test_feature_in_rollout',
['test_feature_in_rollout', 'test_feature_in_experiment'],
options
)

Expand All @@ -1011,14 +1006,17 @@ def test_decide_for_keys__option__enabled_flags_only(self):
mocked_decision_2 = OptimizelyDecision(flag_key='test_feature_in_rollout', enabled=False)

def side_effect(*args, **kwargs):
flag = args[1]
if flag == 'test_feature_in_experiment':
return mocked_decision_1
else:
return mocked_decision_2
flags = args[1]
res = {}
for flag in flags:
if flag == 'test_feature_in_experiment':
res[flag] = mocked_decision_1
else:
res[flag] = mocked_decision_2
return res

with mock.patch(
'optimizely.optimizely.Optimizely._decide', side_effect=side_effect
'optimizely.optimizely.Optimizely._decide_for_keys', side_effect=side_effect
) as mock_decide, mock.patch(
'optimizely.optimizely_user_context.OptimizelyUserContext._clone',
return_value=user_context
Expand Down Expand Up @@ -1071,7 +1069,12 @@ def test_decide_for_keys__default_options__with__options(self):

user_context.decide_for_keys(flags, options)

mock_get_variations.assert_called_once()
mock_get_variations.assert_called_with(
mock.ANY, # ProjectConfig
mock.ANY, # FeatureFlag list
user_context, # UserContext object
['EXCLUDE_VARIABLES', 'ENABLED_FLAGS_ONLY']
)

def test_decide_for_all(self):
opt_obj = optimizely.Optimizely(json.dumps(self.config_dict_with_features))
Expand Down
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy