129 lines
4.1 KiB
Ruby
129 lines
4.1 KiB
Ruby
|
require 'spec_helper_min'
|
||
|
require 'factories/carto_visualizations'
|
||
|
|
||
|
describe Carto::RedisExportService do
|
||
|
include Carto::Factories::Visualizations
|
||
|
|
||
|
before(:all) do
|
||
|
sequel_organization = FactoryGirl.create(:organization)
|
||
|
@organization = Carto::Organization.find(sequel_organization.id)
|
||
|
@user = FactoryGirl.create(:carto_user)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@organization.destroy
|
||
|
@user.destroy
|
||
|
end
|
||
|
|
||
|
def with_redis_keys(prefix)
|
||
|
$users_metadata.set("#{prefix}:string", 'something')
|
||
|
$users_metadata.zincrby("#{prefix}:set", 5, 'set_key')
|
||
|
$users_metadata.hset("#{prefix}:hash", 'hash_key', 'qwerty')
|
||
|
|
||
|
yield
|
||
|
ensure
|
||
|
$users_metadata.del("#{prefix}:string", "#{prefix}:set", "#{prefix}:hash")
|
||
|
end
|
||
|
|
||
|
def with_visualization
|
||
|
map, table, table_visualization, visualization = create_full_visualization(@user)
|
||
|
map.save!
|
||
|
table.save!
|
||
|
table_visualization.save!
|
||
|
visualization.save!
|
||
|
|
||
|
yield(visualization)
|
||
|
ensure
|
||
|
map.destroy
|
||
|
table.destroy
|
||
|
table_visualization.destroy
|
||
|
visualization.destroy
|
||
|
end
|
||
|
|
||
|
def with_named_maps(visualization)
|
||
|
$tables_metadata.hset("map_tpl|#{visualization.user.username}", "tpl_#{ visualization.id.tr('-','_') }", { c: 'rand' } )
|
||
|
$tables_metadata.hset("map_tpl|#{visualization.user.username}", "custom_named", { c: 'custom' } )
|
||
|
|
||
|
yield
|
||
|
ensure
|
||
|
$tables_metadata.del("map_tpl|#{visualization.user.username}")
|
||
|
end
|
||
|
|
||
|
def check_export(export, prefix)
|
||
|
expect(export[:redis][:users_metadata].keys.sort).to eq(["#{prefix}:hash", "#{prefix}:set", "#{prefix}:string"])
|
||
|
end
|
||
|
|
||
|
def check_named_maps(export, visualization)
|
||
|
expect(export[:redis][:tables_metadata]["map_tpl|#{visualization.user.username}"].keys).to eq(['custom_named'])
|
||
|
expect(export[:redis][:tables_metadata]["map_tpl|#{visualization.user.username}"]['custom_named']).to eq(Base64.encode64("{:c=>\"custom\"}"))
|
||
|
end
|
||
|
|
||
|
def check_redis(prefix)
|
||
|
expect($users_metadata.get("#{prefix}:string")).to eq('something')
|
||
|
expect($users_metadata.zrange("#{prefix}:set", 0, -1, withscores: true)).to eq([['set_key', 5.0]])
|
||
|
expect($users_metadata.hgetall("#{prefix}:hash")).to eq('hash_key' => 'qwerty')
|
||
|
end
|
||
|
|
||
|
def check_redis_named_maps
|
||
|
expect($tables_metadata.hgetall("map_tpl|#{@user.username}")). to eq("custom_named" => "{:c=>\"custom\"}")
|
||
|
end
|
||
|
|
||
|
let(:service) { Carto::RedisExportService.new }
|
||
|
|
||
|
describe '#export' do
|
||
|
it 'exports an empty dictionary' do
|
||
|
export = service.export_user_json_hash(@user)
|
||
|
expect(export[:redis][:users_metadata]).to eq({})
|
||
|
expect(export[:redis][:tables_metadata]).to eq({})
|
||
|
end
|
||
|
|
||
|
it 'includes all keys under org:name for organizations' do
|
||
|
prefix = "org:#{@organization.name}"
|
||
|
with_redis_keys(prefix) do
|
||
|
export = service.export_organization_json_hash(@organization)
|
||
|
check_export(export, prefix)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'includes all keys under user:username for users' do
|
||
|
prefix = "user:#{@user.username}"
|
||
|
with_redis_keys(prefix) do
|
||
|
export = service.export_user_json_hash(@user)
|
||
|
check_export(export, prefix)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'includes non-cartodb-managed named maps' do
|
||
|
with_visualization do |visualization|
|
||
|
with_named_maps(visualization) do
|
||
|
export = service.export_user_json_hash(@user)
|
||
|
check_named_maps(export, visualization)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe '#export + import' do
|
||
|
it 'copies all keys under org:name for organizations' do
|
||
|
prefix = "org:#{@organization.name}"
|
||
|
export = with_redis_keys(prefix) { service.export_organization_json_hash(@organization) }
|
||
|
service.restore_redis_from_hash_export(export)
|
||
|
check_redis(prefix)
|
||
|
end
|
||
|
|
||
|
it 'copies all keys under user:username for users' do
|
||
|
with_visualization do |visualization|
|
||
|
prefix = "user:#{@user.username}"
|
||
|
export = with_redis_keys(prefix) do
|
||
|
with_named_maps(visualization) do
|
||
|
service.export_user_json_hash(@user)
|
||
|
end
|
||
|
end
|
||
|
service.restore_redis_from_hash_export(export)
|
||
|
check_redis(prefix)
|
||
|
check_redis_named_maps
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|