cartodb-4.42/spec/lib/cartodb/redis_vizjson_cache_spec.rb
2024-04-06 05:25:13 +00:00

71 lines
2.3 KiB
Ruby

require 'spec_helper_min'
require_relative '../../../lib/cartodb/redis_vizjson_cache'
require 'mock_redis'
require 'ostruct'
require_relative '../../support/redis_test_doubles'
require_relative '../../../lib/carto/uuidhelper'
describe CartoDB::Visualization::RedisVizjsonCache do
include Carto::UUIDHelper
# http and https
PROTOCOL_KEYS_COUNT = 2
# v2 and v3 and v3 forcing named/anonymous maps
VIZJSON_VERSION_COUNT = 4
KEYS_PER_VISUALIZATION = PROTOCOL_KEYS_COUNT * VIZJSON_VERSION_COUNT
let(:redis_spy) { RedisDoubles::RedisSpy.new }
let(:redis_mock) { MockRedis.new }
describe '#cached' do
let(:fake_vizjson) { { test: 1 } }
it 'caches by id' do
visualization_id = random_uuid
cache = CartoDB::Visualization::RedisVizjsonCache.new
# Not cached
returned = cache.cached(visualization_id) { fake_vizjson }
returned.should eq fake_vizjson
# Cached
cache.cached(visualization_id) { fake_vizjson2 }
returned.should eq fake_vizjson
end
end
describe '#invalidate' do
it 'deletes all keys from a visualization' do
visualization_id = random_uuid
cache = CartoDB::Visualization::RedisVizjsonCache.new(redis_spy)
cache.invalidate(visualization_id)
deleted = redis_spy.deleted
deleted.count.should eq KEYS_PER_VISUALIZATION
deleted.count { |d| d.match(/:http:/) }.should eq VIZJSON_VERSION_COUNT
deleted.count { |d| d.match(/:https:/) }.should eq VIZJSON_VERSION_COUNT
deleted.count { |d| d.match(/#{visualization_id}/) }.should eq KEYS_PER_VISUALIZATION
end
end
describe '#purge' do
it 'deletes all keys from all visualizations from redis' do
vs = [OpenStruct.new(id: random_uuid), OpenStruct.new(id: random_uuid)]
cache = CartoDB::Visualization::RedisVizjsonCache.new(redis_spy)
cache.purge(vs)
deleted = redis_spy.deleted
deleted.count.should eq vs.count * KEYS_PER_VISUALIZATION
deleted.count { |d| d.match(/:http:/) }.should eq vs.count * VIZJSON_VERSION_COUNT
deleted.count { |d| d.match(/:https:/) }.should eq vs.count * VIZJSON_VERSION_COUNT
deleted.count { |d| d.match(/#{vs[0].id}/) }.should eq KEYS_PER_VISUALIZATION
deleted.count { |d| d.match(/#{vs[1].id}/) }.should eq KEYS_PER_VISUALIZATION
end
end
end