118 lines
3.2 KiB
Ruby
118 lines
3.2 KiB
Ruby
require 'rspec/core'
|
|
require 'rspec/expectations'
|
|
require 'rspec/mocks'
|
|
require 'sequel'
|
|
|
|
require_relative '../../spec_helper'
|
|
require_relative '../../../app/models/visualization/locator'
|
|
require_relative '../../../app/models/visualization'
|
|
require_relative '../../../app/models/visualization/member'
|
|
require_relative '../../doubles/support_tables.rb'
|
|
|
|
include CartoDB
|
|
|
|
describe Visualization::Locator do
|
|
|
|
UUID = 'db0dfb0c-a944-11e3-a51e-30f9edfe5da6'
|
|
|
|
before(:each) do
|
|
support_tables_mock = Doubles::Visualization::SupportTables.new
|
|
Visualization::Relator.any_instance.stubs(:support_tables).returns(support_tables_mock)
|
|
end
|
|
|
|
before do
|
|
bypass_named_maps
|
|
|
|
@db = SequelRails.connection
|
|
Sequel.extension(:pagination)
|
|
|
|
Visualization.repository = DataRepository::Backend::Sequel.new(@db, :visualizations)
|
|
|
|
@user_id = Carto::UUIDHelper.random_uuid
|
|
|
|
@map_id = Carto::UUIDHelper.random_uuid
|
|
|
|
# For relator->permission
|
|
@user_mock = create_mocked_user
|
|
CartoDB::Visualization::Relator.any_instance.stubs(:user).returns(@user_mock)
|
|
|
|
@visualization = Visualization::Member.new(
|
|
{
|
|
name: 'Visualization 1',
|
|
description: 'A sample visualization',
|
|
privacy: 'public',
|
|
type: 'derived',
|
|
map_id: UUID,
|
|
id: @map_id,
|
|
user_id: @user_id
|
|
}
|
|
).store
|
|
|
|
user_fake = model_fake(@map_id, @user_id)
|
|
|
|
@subdomain = 'bogus'
|
|
@locator = Visualization::Locator.new(user_fake)
|
|
end
|
|
|
|
describe '#get' do
|
|
it 'fetches a Visualization::Member if passed an UUID' do
|
|
rehydrated = @locator.get(@visualization.id, @subdomain).first
|
|
|
|
rehydrated.name.should == @visualization.name
|
|
rehydrated.description.should_not be_nil
|
|
end
|
|
|
|
it 'fetches a Visualization::Member if passed a visualization name' do
|
|
Visualization::Collection.any_instance.stubs(:user_shared_vis).returns([])
|
|
rehydrated = @locator.get(@visualization.name, @subdomain).first
|
|
|
|
rehydrated.id.should == @visualization.id
|
|
rehydrated.description.should_not be_nil
|
|
end
|
|
|
|
it 'fetches a Table if passed a table id' do
|
|
user = create_user(quota_in_bytes: 1234567890, table_quota: 10)
|
|
user.stubs(:invalidate_varnish_cache).returns(nil)
|
|
table = Table.new
|
|
table.user_id = user.id
|
|
table.save
|
|
table.reload
|
|
|
|
table_vis = table.table_visualization
|
|
|
|
table = Visualization::Locator.new.get(table.id, user.username)
|
|
table[1].nil?.should eq false
|
|
table[1].id.should eq table_vis.table.id
|
|
|
|
user.destroy
|
|
end
|
|
|
|
it 'returns nil if no visualization or table found' do
|
|
Visualization::Collection.any_instance.stubs(:user_shared_vis).returns([])
|
|
@locator.get('220d2f46-b371-11e4-93f7-080027880ca6', @subdomain).should == [nil, nil]
|
|
end
|
|
end #get
|
|
|
|
def model_fake(map_id=nil, user_id=UUID)
|
|
model_klass = Object.new
|
|
|
|
class << model_klass
|
|
attr_accessor :id
|
|
end
|
|
model_klass.id = user_id
|
|
|
|
def model_klass.where(filter)
|
|
@called_filter = filter
|
|
[OpenStruct.new(
|
|
maps: [OpenStruct.new(id: UUID)],
|
|
id: id
|
|
)]
|
|
end
|
|
|
|
def model_klass.called_filter
|
|
@called_filter
|
|
end
|
|
model_klass
|
|
end #model_fake
|
|
end # Visualization::Locator
|