99 lines
3.4 KiB
Ruby
99 lines
3.4 KiB
Ruby
|
require 'spec_helper_min'
|
||
|
require 'carto/visualization_invalidation_service'
|
||
|
require 'factories/carto_visualizations'
|
||
|
|
||
|
describe Carto::VisualizationInvalidationService do
|
||
|
include Carto::Factories::Visualizations
|
||
|
|
||
|
before(:all) do
|
||
|
@user = FactoryGirl.create(:carto_user)
|
||
|
end
|
||
|
|
||
|
after(:all) do
|
||
|
@user.destroy
|
||
|
end
|
||
|
|
||
|
shared_examples_for 'cache invalidator' do
|
||
|
it 'should invalidate all caches: redis/varnish vizjson and embed' do
|
||
|
CartoDB::Visualization::RedisVizjsonCache.any_instance.expects(:invalidate).with(@visualization.id)
|
||
|
CartoDB::Varnish.any_instance.expects(:purge).with(".*#{@visualization.id}:vizjson")
|
||
|
EmbedRedisCache.any_instance.expects(:invalidate).with(@visualization.id)
|
||
|
@service.invalidate
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'on update' do
|
||
|
before(:each) do
|
||
|
@map, @table, @table_visualization, @visualization = create_full_visualization(@user)
|
||
|
@service = Carto::VisualizationInvalidationService.new(@visualization)
|
||
|
end
|
||
|
|
||
|
# NOTE: Not destroying the visualizations in an after hook to avoid it triggering the wrong expectations
|
||
|
|
||
|
it_behaves_like 'cache invalidator'
|
||
|
|
||
|
describe 'named map invalidation' do
|
||
|
it 'should create/update named map' do
|
||
|
Carto::NamedMaps::Api.any_instance.stubs(:show).returns(nil)
|
||
|
Carto::NamedMaps::Api.any_instance.expects(:create).once
|
||
|
@service.invalidate
|
||
|
end
|
||
|
|
||
|
it 'should not create/update named map for maps without layers' do
|
||
|
@map.layers.each(&:destroy)
|
||
|
Carto::NamedMaps::Api.any_instance.stubs(:show).returns(nil)
|
||
|
Carto::NamedMaps::Api.any_instance.expects(:create).never
|
||
|
@service.invalidate
|
||
|
end
|
||
|
|
||
|
it 'should not create/update named map for remote visualizations' do
|
||
|
@visualization.update_attribute(:type, 'remote')
|
||
|
Carto::NamedMaps::Api.any_instance.stubs(:show).returns(nil)
|
||
|
Carto::NamedMaps::Api.any_instance.expects(:create).never
|
||
|
@service.invalidate
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'affected visualizations invalidation' do
|
||
|
before(:each) do
|
||
|
@canonical_service = Carto::VisualizationInvalidationService.new(@table_visualization)
|
||
|
end
|
||
|
|
||
|
it 'should not invalidate cache of related maps by default' do
|
||
|
Carto::VisualizationInvalidationService.expects(:new).never
|
||
|
@canonical_service.invalidate
|
||
|
end
|
||
|
|
||
|
describe 'should invalidate cache of related maps when description changes' do
|
||
|
before(:each) do
|
||
|
@service = @canonical_service
|
||
|
@table_visualization.description = 'wadus'
|
||
|
@table_visualization.save
|
||
|
|
||
|
CartoDB::Visualization::RedisVizjsonCache.any_instance.expects(:invalidate).with(@table_visualization.id)
|
||
|
CartoDB::Varnish.any_instance.expects(:purge).with(".*#{@table_visualization.id}:vizjson")
|
||
|
EmbedRedisCache.any_instance.expects(:invalidate).with(@table_visualization.id)
|
||
|
end
|
||
|
|
||
|
# Should run all invalidations on the affected map, when invalidating the canonical visualization
|
||
|
it_behaves_like 'cache invalidator'
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe 'on destruction' do
|
||
|
before(:all) do
|
||
|
@visualization = FactoryGirl.create(:carto_visualization, user: @user)
|
||
|
@visualization.destroy
|
||
|
@service = Carto::VisualizationInvalidationService.new(@visualization)
|
||
|
end
|
||
|
|
||
|
it_behaves_like 'cache invalidator'
|
||
|
|
||
|
it 'should destroy named map' do
|
||
|
Carto::NamedMaps::Api.any_instance.expects(:destroy).once
|
||
|
@service.invalidate
|
||
|
end
|
||
|
end
|
||
|
end
|