94 lines
2.3 KiB
Ruby
94 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe DatabaseEventTracking, :snowplow do
|
|
before do
|
|
allow(Gitlab::Tracking).to receive(:database_event).and_call_original
|
|
end
|
|
|
|
let(:test_class) do
|
|
Class.new(ActiveRecord::Base) do
|
|
include DatabaseEventTracking
|
|
|
|
self.table_name = 'application_setting_terms'
|
|
|
|
self::SNOWPLOW_ATTRIBUTES = %w[id].freeze # rubocop:disable RSpec/LeakyConstantDeclaration
|
|
end
|
|
end
|
|
|
|
subject(:create_test_class_record) { test_class.create!(id: 1, terms: "") }
|
|
|
|
context 'if event emmiter failed' do
|
|
before do
|
|
allow(Gitlab::Tracking).to receive(:database_event).and_raise(StandardError) # rubocop:disable RSpec/ExpectGitlabTracking
|
|
end
|
|
|
|
it 'tracks the exception' do
|
|
expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
|
|
|
|
create_test_class_record
|
|
end
|
|
end
|
|
|
|
context 'if product_intelligence_database_event_tracking FF is off' do
|
|
before do
|
|
stub_feature_flags(product_intelligence_database_event_tracking: false)
|
|
end
|
|
|
|
it 'does not track the event' do
|
|
create_test_class_record
|
|
|
|
expect_no_snowplow_event(tracking_method: :database_event)
|
|
end
|
|
end
|
|
|
|
describe 'event tracking' do
|
|
let(:category) { test_class.to_s }
|
|
let(:event) { 'database_event' }
|
|
|
|
it 'when created' do
|
|
create_test_class_record
|
|
|
|
expect_snowplow_event(
|
|
tracking_method: :database_event,
|
|
category: category,
|
|
action: "#{event}_create",
|
|
label: 'application_setting_terms',
|
|
property: 'create',
|
|
namespace: nil,
|
|
"id" => 1
|
|
)
|
|
end
|
|
|
|
it 'when updated' do
|
|
create_test_class_record
|
|
test_class.first.update!(id: 3)
|
|
|
|
expect_snowplow_event(
|
|
tracking_method: :database_event,
|
|
category: category,
|
|
action: "#{event}_update",
|
|
label: 'application_setting_terms',
|
|
property: 'update',
|
|
namespace: nil,
|
|
"id" => 3
|
|
)
|
|
end
|
|
|
|
it 'when destroyed' do
|
|
create_test_class_record
|
|
test_class.first.destroy!
|
|
|
|
expect_snowplow_event(
|
|
tracking_method: :database_event,
|
|
category: category,
|
|
action: "#{event}_destroy",
|
|
label: 'application_setting_terms',
|
|
property: 'destroy',
|
|
namespace: nil,
|
|
"id" => 1
|
|
)
|
|
end
|
|
end
|
|
end
|