cartodb-4.42/spec/lib/carto/tracking/services/pubsub_tracker_spec.rb
2024-04-06 05:25:13 +00:00

124 lines
3.5 KiB
Ruby

require 'spec_helper'
require 'carto/tracking/services/pubsub_tracker'
describe PubSubTracker do
describe '#initialize' do
before(:each) do
Singleton.__init__(PubSubTracker)
end
it 'should raise error if creation of new instances is attempted' do
expect {
PubSubTracker.new
}.to raise_error
end
it 'should log an error if an exception occurs during Pubsub initialization' do
Google::Cloud::Pubsub.stubs(:new).raises('Error')
Rails.logger.expects(:error).with(has_entry(message: 'PubSubTracker: initialization error'))
PubSubTracker.instance
end
it 'should log an error if an exception occurs during topic configuration' do
@pubsub = Object.new
@pubsub.stubs(:topic).raises('Error')
Google::Cloud::Pubsub.stubs(:new).returns(@pubsub)
Rails.logger.expects(:error).with(has_entry(message: 'PubSubTracker: initialization error'))
PubSubTracker.instance
end
end
describe '#send_event' do
before(:each) do
Singleton.__init__(PubSubTracker)
@topic_name_and_path = '/projects/project-identifier/topics/topic-name'
@topic = Object.new
@topic.stubs(:name).returns(@topic_name_and_path)
@pubsub = Object.new
@pubsub.stubs(:topic).returns(@topic)
Google::Cloud::Pubsub.stubs(:new).returns(@pubsub)
end
it 'should succeed if topic exists and all parameters are filled' do
success_response = Object.new
success_response.stubs(:succeeded?).returns(true)
success_response
@topic.stubs(:publish).returns(success_response)
user_id = 'ff5d41c7-e599-4876-9646-8ba023031287'
event = 'map_created'
properties = {
user_id: user_id,
organization: 'acme',
event_source: 'builder',
source_domain: '.localhost.lan',
type: 'table',
event_time: Time.now.utc,
plan: 'Individual',
user_created_at: Time.now
}
result = PubSubTracker.instance.send_event(:metrics, user_id, event, properties)
expected_attributes = { user_id: user_id }.merge(properties)
result.should == expected_attributes
end
it 'should log error when no event type is sent' do
Rails.logger.expects(:error).with(message: 'PubSubTracker: error topic key not found')
@topic.stubs(:publish)
PubSubTracker.instance.send_event(nil, 'user_id', 'event_name')
end
it 'should log error when unknown event type sent' do
Rails.logger.expects(:error).with(message: 'PubSubTracker: error topic key fake_topic not found')
@topic.stubs(:publish)
PubSubTracker.instance.send_event(:fake_topic, 'user_id', 'event_name')
end
it 'should do nothing when no user id sent' do
Rails.logger.expects(:error).never
@topic.stubs(:publish)
result = PubSubTracker.instance.send_event(:metrics, '', 'event_name')
result.should == nil
end
it 'should do nothing when not enabled' do
Rails.logger.expects(:error).never
PubSubTracker.any_instance.stubs(:enabled?).returns(false)
result = PubSubTracker.instance.send_event(:metrics, 'user_id', 'disabled')
result.should == nil
end
it 'should log error if publishing did not succeeded' do
Rails.logger.expects(:error).with(has_entry(message: "PubSubTracker: error publishing to topic #{@topic_name_and_path} for event track user"))
@topic.stubs(:publish).yields(nil)
user_id = 'jane'
event = 'track user'
PubSubTracker.instance.send_event(:metrics, user_id, event)
end
end
end