From aeea6804ce793ae68150c0f1058494f3ba11be9f Mon Sep 17 00:00:00 2001 From: Brian Cobb Date: Tue, 28 Aug 2018 13:48:49 -0400 Subject: [PATCH] EventBuilder uses the same logger as Project - Previously, `EventBuilder` was instantiated by `Project` with the value of the `logger` local. However, when `Project` was not instantiated with a custom `logger`, `EventBuilder` would be instantiated with `nil` logger, which would cause `track` to raise a `NoMethodError` when called with tags. - This commit changes the `Project` constructor to pass the `@logger` instance variable to `EventBuilder`, so that they are using the same logger, custom or otherwise. - The added spec fails prior to the constructor change --- lib/optimizely.rb | 2 +- spec/project_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/optimizely.rb b/lib/optimizely.rb index bce9c82b..b11a6f32 100644 --- a/lib/optimizely.rb +++ b/lib/optimizely.rb @@ -79,7 +79,7 @@ def initialize(datafile, event_dispatcher = nil, logger = nil, error_handler = n end @decision_service = DecisionService.new(@config, @user_profile_service) - @event_builder = EventBuilder.new(@config, logger) + @event_builder = EventBuilder.new(@config, @logger) @notification_center = NotificationCenter.new(@logger, @error_handler) end diff --git a/spec/project_spec.rb b/spec/project_spec.rb index c44813a3..2118d01a 100644 --- a/spec/project_spec.rb +++ b/spec/project_spec.rb @@ -459,6 +459,19 @@ class InvalidErrorHandler; end expect(project_instance.event_dispatcher).to have_received(:dispatch_event).with(Optimizely::Event.new(:post, conversion_log_url, params, post_headers)).once end + it 'should properly track an event with tags even when the project does not have a custom logger' do + project_instance = Optimizely::Project.new(config_body_JSON) + + params = @expected_track_event_params + params[:visitors][0][:snapshots][0][:decisions][0][:variation_id] = '111129' + params[:visitors][0][:snapshots][0][:events][0][:tags] = {revenue: 42} + + project_instance.config.set_forced_variation('test_experiment', 'test_user', 'variation') + allow(project_instance.event_dispatcher).to receive(:dispatch_event).with(instance_of(Optimizely::Event)) + project_instance.track('test_event', 'test_user', nil, revenue: 42) + expect(project_instance.event_dispatcher).to have_received(:dispatch_event).with(Optimizely::Event.new(:post, conversion_log_url, params, post_headers)).once + end + it 'should log a message if an exception has occurred during dispatching of the event' do allow(project_instance.event_dispatcher).to receive(:dispatch_event).with(any_args).and_raise(RuntimeError) project_instance.track('test_event', 'test_user')