From b9897dcdcbe5ffae81e0977157848057a71ac21b Mon Sep 17 00:00:00 2001 From: rashidsp Date: Mon, 12 Mar 2018 13:13:59 +0500 Subject: [PATCH] Implements missing validations --- lib/optimizely.rb | 11 ++++++++--- spec/project_spec.rb | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/optimizely.rb b/lib/optimizely.rb index 5cfe96f1..e6cf1a42 100644 --- a/lib/optimizely.rb +++ b/lib/optimizely.rb @@ -135,8 +135,8 @@ def get_variation(experiment_key, user_id, attributes = nil) return nil end - unless user_id.is_a? String - @logger.log(Logger::ERROR, "User id: #{user_id} is not a string") + if user_id.to_s.empty? + @logger.log(Logger::ERROR, 'User ID cannot be empty.') return nil end @@ -196,6 +196,11 @@ def track(event_key, user_id, attributes = nil, event_tags = nil) return nil end + if user_id.to_s.empty? + @logger.log(Logger::ERROR, 'User ID cannot be empty.') + return nil + end + if event_tags && event_tags.is_a?(Numeric) event_tags = { 'revenue' => event_tags @@ -428,7 +433,7 @@ def get_feature_variable_for_type(feature_flag_key, variable_key, variable_type, return nil end - unless user_id + if user_id.to_s.empty? @logger.log(Logger::ERROR, 'User ID cannot be empty.') return nil end diff --git a/spec/project_spec.rb b/spec/project_spec.rb index b14bbb9e..63805773 100644 --- a/spec/project_spec.rb +++ b/spec/project_spec.rb @@ -361,6 +361,12 @@ class InvalidErrorHandler; end } end + it 'should return nil when user_id is empty or nil' do + expect(project_instance.track('test_event', '', nil, 'revenue' => 42)).to eq(nil) + expect(project_instance.track('test_event', nil, nil, 'revenue' => 42)).to eq(nil) + expect(spy_logger).to have_received(:log).twice.with(Logger::ERROR, 'User ID cannot be empty.') + end + it 'should properly track an event by calling dispatch_event with right params' do params = @expected_track_event_params @@ -529,6 +535,12 @@ class InvalidErrorHandler; end end describe '#get_variation' do + it 'should return nil when user_id is empty or nil' do + expect(project_instance.get_variation('test_experiment_with_audience', '', nil)).to eq(nil) + expect(project_instance.get_variation('test_experiment_with_audience', nil, nil)).to eq(nil) + expect(spy_logger).to have_received(:log).twice.with(Logger::ERROR, 'User ID cannot be empty.') + end + it 'should have get_variation return expected variation when there are no audiences' do expect(project_instance.get_variation('test_experiment', 'test_user')) .to eq(config_body['experiments'][0]['variations'][0]['key']) @@ -1012,10 +1024,12 @@ class InvalidErrorHandler; end expect(spy_logger).to have_received(:log).once.with(Logger::ERROR, 'Variable key cannot be empty.') end - it 'should return nil if user_id is nil' do + it 'should return nil if user_id is empty or nil' do expect(project_instance.get_feature_variable_integer('integer_single_variable_feature', 'integer_variable', nil, user_attributes)) .to eq(nil) - expect(spy_logger).to have_received(:log).once.with(Logger::ERROR, 'User ID cannot be empty.') + expect(project_instance.get_feature_variable_integer('integer_single_variable_feature', 'integer_variable', '', user_attributes)) + .to eq(nil) + expect(spy_logger).to have_received(:log).twice.with(Logger::ERROR, 'User ID cannot be empty.') end end