118 lines
3.3 KiB
Ruby
118 lines
3.3 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 = UUIDTools::UUID.timestamp_create.to_s
|
||
|
|
||
|
@map_id = UUIDTools::UUID.timestamp_create.to_s
|
||
|
|
||
|
# 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
|