2208 lines
85 KiB
Ruby
2208 lines
85 KiB
Ruby
|
require 'factories/carto_visualizations'
|
||
|
require 'spec_helper_min'
|
||
|
|
||
|
module Carto
|
||
|
module Tracking
|
||
|
module Events
|
||
|
describe 'Events' do
|
||
|
include Carto::Factories::Visualizations
|
||
|
|
||
|
before(:all) do
|
||
|
@user = FactoryGirl.create(:carto_user, private_maps_enabled: true)
|
||
|
@intruder = FactoryGirl.create(:carto_user)
|
||
|
@map, @table, @table_visualization, @visualization = create_full_visualization(@user)
|
||
|
@visualization.privacy = 'private'
|
||
|
@visualization.save!
|
||
|
@visualization.reload
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
destroy_full_visualization(@map, @table, @table_visualization, @visualization)
|
||
|
@user.destroy
|
||
|
@intruder.destroy
|
||
|
end
|
||
|
|
||
|
def days_with_decimals(time_object)
|
||
|
time_object.to_f / 60 / 60 / 24
|
||
|
end
|
||
|
|
||
|
def check_hash_has_keys(hash, keys)
|
||
|
keys.each do |key|
|
||
|
puts "checking #{key} is not nil"
|
||
|
hash[key].should_not be_nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ExportedMap do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have read access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:is_accesible_by_user?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CreatedMap do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
origin: 'import')
|
||
|
end
|
||
|
|
||
|
it 'requires a origin' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
origin: 'bananas')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe AppliedSql do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError) if @event
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
sql: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a sql' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'can have a node_id' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'bla',
|
||
|
node_id: '1')
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'can have a dataset_id' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'bla',
|
||
|
dataset_id: '1')
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'bla',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
sql: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe AppliedCartocss do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a layer_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
cartocss: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a cartocss' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
user_id: @intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ModifiedStyleForm do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a layer_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a cartocss' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
style_properties: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'requires a style_properties' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla')
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
user_id: @intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
cartocss: 'bla',
|
||
|
style_properties: 'bla')
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe DeletedMap do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe PublishedMap do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_origin,
|
||
|
:lifetime,
|
||
|
:object_created_at,
|
||
|
:plan,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
origin: 'bananas')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CompletedConnection do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
let(:connection) do
|
||
|
{
|
||
|
data_from: 'Manolo',
|
||
|
imported_from: 'Escobar',
|
||
|
sync: true,
|
||
|
file_type: '.manolo'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
connection: connection)
|
||
|
end
|
||
|
|
||
|
it 'requires a connection' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:data_from,
|
||
|
:imported_from,
|
||
|
:sync,
|
||
|
:file_type,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe FailedConnection do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
let(:connection) do
|
||
|
{
|
||
|
data_from: 'Manolo',
|
||
|
imported_from: 'Escobar',
|
||
|
sync: true,
|
||
|
file_type: '.manolo'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, connection: connection)
|
||
|
end
|
||
|
|
||
|
it 'requires a connection' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:data_from,
|
||
|
:imported_from,
|
||
|
:sync,
|
||
|
:file_type,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
connection: connection)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ExceededQuota do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, {})
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id, user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports with optional quota_overage' do
|
||
|
event = @event_class.new(@user.id, user_id: @user.id, quota_overage: 123)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:quota_overage,
|
||
|
:user_active_for,
|
||
|
:user_created_at]
|
||
|
|
||
|
format = @event_class.new(@user.id, user_id: @user.id, quota_overage: 123)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ScoredTrendingMap do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
mapviews: 123)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
mapviews: 123)
|
||
|
end
|
||
|
|
||
|
it 'requires mapviews' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
mapviews: 123,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
mapviews: 123)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
mapviews: 123)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
mapviews: 123)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
mapviews: 123)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_origin,
|
||
|
:map_id,
|
||
|
:map_name,
|
||
|
:mapviews,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
mapviews: 123)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe VisitedPrivatePage do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id, user_id: @user.id, page: 'dashboard')
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'updates dashboard_viewed_at for dashboard visits' do
|
||
|
event = @event_class.new(@user.id, user_id: @user.id, page: 'dashboard')
|
||
|
expect { event.report! }.to(change { @user.reload.dashboard_viewed_at })
|
||
|
end
|
||
|
|
||
|
it 'does not update dashboard_viewed_at for other visits' do
|
||
|
event = @event_class.new(@user.id, user_id: @user.id, page: 'dataset')
|
||
|
expect { event.report! }.to_not(change { @user.reload.dashboard_viewed_at })
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CreatedDataset do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
origin: 'import')
|
||
|
end
|
||
|
|
||
|
it 'requires a origin' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
origin: 'import',
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
origin: 'bananas')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe DeletedDataset do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_origin,
|
||
|
:creation_time]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CreatedAnalysis do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
let(:analysis) do
|
||
|
{
|
||
|
id: 'xxx-xxx-xxx-xxx',
|
||
|
natural_id: 'z3',
|
||
|
type: 'georeference'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires an analysis' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:creation_time,
|
||
|
:analysis_id,
|
||
|
:analysis_natural_id,
|
||
|
:analysis_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ModifiedAnalysis do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
let(:analysis) do
|
||
|
{
|
||
|
id: 'xxx-xxx-xxx-xxx',
|
||
|
natural_id: 'z3',
|
||
|
type: 'georeference'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires an analysis' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:creation_time,
|
||
|
:analysis_id,
|
||
|
:analysis_natural_id,
|
||
|
:analysis_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CreatedWidget do
|
||
|
before(:all) do
|
||
|
@widget = FactoryGirl.create(:widget, layer: @visualization.data_layers.first)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@widget.destroy
|
||
|
end
|
||
|
|
||
|
it 'should validate the widget exists' do
|
||
|
event = Carto::Tracking::Events::CreatedWidget.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
widget_id: random_uuid)
|
||
|
|
||
|
expect { event.report! }.to raise_error(Carto::LoadError)
|
||
|
end
|
||
|
|
||
|
it 'should report when valid widget' do
|
||
|
event = Carto::Tracking::Events::CreatedWidget.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
widget_id: @widget.id)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe DeletedAnalysis do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
let(:analysis) do
|
||
|
{
|
||
|
id: 'xxx-xxx-xxx-xxx',
|
||
|
natural_id: 'z3',
|
||
|
type: 'georeference'
|
||
|
}
|
||
|
end
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
end
|
||
|
|
||
|
it 'requires an analysis' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
analysis: analysis,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#security validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'must have write access to visualization' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
|
||
|
it 'must be reported by user' do
|
||
|
@event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { @event.report! }.to raise_error(Carto::UnauthorizedError)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'reports' do
|
||
|
event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'reports by user with access' do
|
||
|
event = @event_class.new(@intruder.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @intruder.id,
|
||
|
analysis: analysis)
|
||
|
|
||
|
Carto::Visualization.any_instance.stubs(:writable_by?).with(@intruder).returns(true)
|
||
|
|
||
|
expect { event.report! }.to_not raise_error
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properites' do
|
||
|
current_prod_properties = [:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:creation_time,
|
||
|
:analysis_id,
|
||
|
:analysis_natural_id,
|
||
|
:analysis_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
analysis: analysis)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe DownloadedLayer do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a layer_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a format' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a source' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a table_name' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
visible: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a visible' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test')
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any other additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:layer_id,
|
||
|
:format,
|
||
|
:source,
|
||
|
:table_name,
|
||
|
:visible]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
format: 'csv',
|
||
|
source: 'd0',
|
||
|
table_name: 'test',
|
||
|
visible: true)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe DraggedNode do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe CreatedLayer do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
empty: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
user_id: @user.id,
|
||
|
empty: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a layer_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
empty: true)
|
||
|
end
|
||
|
|
||
|
it 'requires a empty' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
empty: true,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:layer_id,
|
||
|
:empty]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
layer_id: @visualization.data_layers.first.id,
|
||
|
empty: true)
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe StyledByValue do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
attribute: 'test',
|
||
|
attribute_type: 'test')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
attribute: 'test',
|
||
|
attribute_type: 'test',
|
||
|
user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'requires an attribute' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
attribute_type: 'test')
|
||
|
end
|
||
|
|
||
|
it 'requires an attribute_type' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
attribute: 'test')
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
attribute: 'test',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:attribute,
|
||
|
:attribute_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
attribute: 'test',
|
||
|
attribute_type: 'test')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe ChangedDefaultGeometry do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe AggregatedGeometries do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
agg_type: 'hexabins',
|
||
|
previous_type: 'simple')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
agg_type: 'hexabins',
|
||
|
previous_agg_type: 'simple')
|
||
|
end
|
||
|
|
||
|
it 'requires a agg_type' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
previous_agg_type: 'simple')
|
||
|
end
|
||
|
it 'requires a previous_agg_type' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
agg_type: 'hexabins')
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
agg_type: 'hexabins',
|
||
|
previous_agg_type: 'simple',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:agg_type,
|
||
|
:previous_agg_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
agg_type: 'test',
|
||
|
previous_agg_type: 'test')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe UsedAdvancedMode do
|
||
|
before (:all) { @event_class = self.class.description.constantize }
|
||
|
after (:all) { @event_class = nil }
|
||
|
|
||
|
describe '#properties validation' do
|
||
|
after(:each) do
|
||
|
expect { @event.report! }.to raise_error(Carto::UnprocesableEntityError)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@event = nil
|
||
|
end
|
||
|
|
||
|
it 'requires a user_id' do
|
||
|
@event = @event_class.new(@user.id, visualization_id: @visualization.id, mode_type: 'sql')
|
||
|
end
|
||
|
|
||
|
it 'requires a visualization_id' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id, mode_type: 'cartocss')
|
||
|
end
|
||
|
|
||
|
it 'requires a mode_type' do
|
||
|
@event = @event_class.new(@user.id, user_id: @user.id, visualization_id: @visualization.id)
|
||
|
end
|
||
|
|
||
|
it 'does not allow adding any additional property' do
|
||
|
@event = @event_class.new(@user.id,
|
||
|
user_id: @user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
mode_type: 'cartocss',
|
||
|
extra: 'extra')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'matches current prod properties' do
|
||
|
current_prod_properties = [:creation_time,
|
||
|
:event_user_id,
|
||
|
:event_origin,
|
||
|
:plan,
|
||
|
:user_active_for,
|
||
|
:user_created_at,
|
||
|
:vis_id,
|
||
|
:privacy,
|
||
|
:type,
|
||
|
:object_created_at,
|
||
|
:lifetime,
|
||
|
:mode_type]
|
||
|
|
||
|
format = @event_class.new(@user.id,
|
||
|
visualization_id: @visualization.id,
|
||
|
user_id: @user.id,
|
||
|
mode_type: 'cartocss')
|
||
|
.instance_eval { @format }
|
||
|
|
||
|
check_hash_has_keys(format.to_segment, current_prod_properties)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|