Skip to content

Commit f1b27d1

Browse files
skip identify on user_context clone (#318)
1 parent 5a03530 commit f1b27d1

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

lib/optimizely/optimizely_user_context.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class OptimizelyUserContext
2626

2727
OptimizelyDecisionContext = Struct.new(:flag_key, :rule_key)
2828
OptimizelyForcedDecision = Struct.new(:variation_key)
29-
def initialize(optimizely_client, user_id, user_attributes)
29+
def initialize(optimizely_client, user_id, user_attributes, identify: true)
3030
@attr_mutex = Mutex.new
3131
@forced_decision_mutex = Mutex.new
3232
@qualified_segment_mutex = Mutex.new
@@ -36,11 +36,11 @@ def initialize(optimizely_client, user_id, user_attributes)
3636
@forced_decisions = {}
3737
@qualified_segments = nil
3838

39-
@optimizely_client&.identify_user(user_id: user_id)
39+
@optimizely_client&.identify_user(user_id: user_id) if identify
4040
end
4141

4242
def clone
43-
user_context = OptimizelyUserContext.new(@optimizely_client, @user_id, user_attributes)
43+
user_context = OptimizelyUserContext.new(@optimizely_client, @user_id, user_attributes, identify: false)
4444
@forced_decision_mutex.synchronize { user_context.instance_variable_set('@forced_decisions', @forced_decisions.dup) unless @forced_decisions.empty? }
4545
@qualified_segment_mutex.synchronize { user_context.instance_variable_set('@qualified_segments', @qualified_segments.dup) unless @qualified_segments.nil? }
4646
user_context

spec/optimizely_user_context_spec.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,7 @@
829829
it 'should hit other audience with segments in ab test' do
830830
stub_request(:post, impression_log_url)
831831
stub_request(:post, 'https://api.zaius.com/v3/events').to_return(status: 200)
832-
user_context_obj = Optimizely::OptimizelyUserContext.new(integration_project_instance, 'tester', 'age' => 30)
832+
user_context_obj = Optimizely::OptimizelyUserContext.new(integration_project_instance, 'tester', {'age' => 30})
833833
user_context_obj.qualified_segments = %w[odp-segment-none]
834834

835835
decision = user_context_obj.decide('flag-segment', [Optimizely::Decide::OptimizelyDecideOption::IGNORE_USER_PROFILE_SERVICE])
@@ -894,6 +894,22 @@
894894
integration_project_instance.close
895895
end
896896

897+
it 'should skip identify with decisions' do
898+
stub_request(:post, impression_log_url)
899+
expect(integration_project_instance.odp_manager).to receive(:identify_user).with({user_id: 'tester'})
900+
expect(spy_logger).not_to receive(:log).with(Logger::ERROR, anything)
901+
902+
user_context = Optimizely::OptimizelyUserContext.new(integration_project_instance, 'tester', {})
903+
904+
expect(integration_project_instance.odp_manager).not_to receive(:identify_user)
905+
906+
user_context.decide('flag-segment')
907+
user_context.decide_all
908+
user_context.decide_for_keys(['flag-segment'])
909+
910+
integration_project_instance.close
911+
end
912+
897913
describe '#fetch_qualified_segments' do
898914
it 'should fetch segments' do
899915
stub_request(:post, 'https://api.zaius.com/v3/graphql').to_return(status: 200, body: good_response_data.to_json)

0 commit comments

Comments
 (0)