Stub Snowplow before all specs
Based on the discussion at #345488 (closed), one of the ideas worth pursuing is to enable the :snowplow
RSpec metadata globally for all specs. The logic of which it's currently at spec/support/stub_snowplow.rb.
File at eae5f187
# frozen_string_literal: true
module StubSnowplow
def stub_snowplow
# Using a high buffer size to not cause early flushes
buffer_size = 100
# WebMock is set up to allow requests to `localhost`
host = 'localhost'
# rubocop:disable RSpec/AnyInstanceOf
allow_any_instance_of(Gitlab::Tracking::Destinations::Snowplow)
.to receive(:emitter)
.and_return(SnowplowTracker::Emitter.new(host, buffer_size: buffer_size))
# rubocop:enable RSpec/AnyInstanceOf
stub_application_setting(snowplow_enabled: true)
allow(SnowplowTracker::SelfDescribingJson).to receive(:new).and_call_original
allow(Gitlab::Tracking).to receive(:event).and_call_original # rubocop:disable RSpec/ExpectGitlabTracking
end
end
The related POC MR laid out the actual challenges we'd like to overcome with this issue (quoting from #345488 (comment 743214475)):
We need to figure out a better way to spy on
Gitlab::Tracking.event
. As of now, it just expects that the function was called. Not if the function was executed properly. Maybe by throwing instead of an early return from theDestination
👀 (thanks to @pskorupa for the suggestion)
We would need a way to opt-out/disable Snowplow. This can be done with
stub_application_setting(snowplow_enabled: false)
. This method doesn't work at the moment because of the current spy
Testing
All specs related to the module StubSnowplow
should be passing and make sure QA pipelines run smoothly.