Initial commit
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
require 'spec_helper_min'
|
||||
require 'support/helpers'
|
||||
require 'factories/carto_visualizations'
|
||||
require_dependency 'carto/uuidhelper'
|
||||
|
||||
describe Carto::Api::MapcapsController do
|
||||
include Carto::Factories::Visualizations
|
||||
include HelperMethods
|
||||
|
||||
let(:dummy_mapcap) do
|
||||
dummy = mock
|
||||
dummy.stubs(:id).returns(UUIDTools::UUID.random_create.to_s)
|
||||
dummy
|
||||
end
|
||||
|
||||
before(:all) do
|
||||
FactoryGirl.create(:carto_feature_flag, name: 'editor-3', restricted: false)
|
||||
|
||||
@user = FactoryGirl.create(:carto_user, builder_enabled: true)
|
||||
@intruder = FactoryGirl.create(:carto_user, builder_enabled: true)
|
||||
|
||||
@map, @table, @table_visualization, @visualization = create_full_visualization(@user)
|
||||
end
|
||||
|
||||
before(:each) { bypass_named_maps }
|
||||
|
||||
after(:all) do
|
||||
Carto::FeatureFlag.destroy_all
|
||||
|
||||
@torque_layer.destroy
|
||||
destroy_full_visualization(@map, @table, @table_visualization, @visualization)
|
||||
|
||||
@user.destroy
|
||||
@intruder.destroy
|
||||
end
|
||||
|
||||
def mapcap_should_be_correct(response)
|
||||
new_mapcap_id = response[:id]
|
||||
new_mapcap_id.should_not be_nil
|
||||
|
||||
mapcap = Carto::Mapcap.find(new_mapcap_id)
|
||||
|
||||
expected_response = JSON.parse(Carto::Api::MapcapPresenter.new(mapcap).to_poro.to_json).deep_symbolize_keys
|
||||
|
||||
response.should eq expected_response
|
||||
end
|
||||
|
||||
describe '#create' do
|
||||
after(:all) { Carto::Mapcap.all.each(&:destroy) }
|
||||
|
||||
def create_mapcap_url(user: @user, visualization: @visualization)
|
||||
mapcaps_url(user_domain: user.subdomain, visualization_id: visualization.id, api_key: user.api_key)
|
||||
end
|
||||
|
||||
it 'creates new mapcap' do
|
||||
post_json create_mapcap_url, {} do |response|
|
||||
response.status.should eq 201
|
||||
|
||||
mapcap_should_be_correct(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
it 'should only allow MAX_MAPCAPS_PER_VISUALIZATION mapcaps' do
|
||||
max_mapcaps = Carto::Visualization::MAX_MAPCAPS_PER_VISUALIZATION
|
||||
|
||||
(max_mapcaps + 1).times do
|
||||
post_json create_mapcap_url, {} do |response|
|
||||
response.status.should eq 201
|
||||
|
||||
mapcap_should_be_correct(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
mapcaps = Carto::Mapcap.where(visualization_id: @visualization.id)
|
||||
mapcaps.count == max_mapcaps
|
||||
end
|
||||
|
||||
it 'returns 403 if user does not own the visualization' do
|
||||
post_json create_mapcap_url(user: @intruder), {} do |response|
|
||||
response.status.should eq 403
|
||||
end
|
||||
end
|
||||
|
||||
it 'triggers autoindex regeneration' do
|
||||
::Resque.expects(:enqueue).with(::Resque::UserDBJobs::UserDBMaintenance::AutoIndexTable, @table.id).once
|
||||
post_json create_mapcap_url, {} do |response|
|
||||
response.status.should eq 201
|
||||
|
||||
mapcap_should_be_correct(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
it 'triggers autoindex regeneration for torque layers' do
|
||||
@map.data_layers.first.update_attribute(:kind, 'torque')
|
||||
::Resque.expects(:enqueue).with(::Resque::UserDBJobs::UserDBMaintenance::AutoIndexTable, @table.id).once
|
||||
post_json create_mapcap_url, {} do |response|
|
||||
response.status.should eq 201
|
||||
|
||||
mapcap_should_be_correct(response.body)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#index' do
|
||||
before(:all) do
|
||||
5.times { Carto::Mapcap.create(visualization_id: @visualization.id) }
|
||||
|
||||
@mapcaps = Carto::Mapcap.all
|
||||
end
|
||||
|
||||
after(:all) { @mapcaps.each(&:destroy) }
|
||||
|
||||
def index_mapcap_url(user: @user, visualization: @visualization)
|
||||
mapcaps_url(
|
||||
user_domain: user.subdomain,
|
||||
visualization_id: visualization.id,
|
||||
api_key: user.api_key
|
||||
)
|
||||
end
|
||||
|
||||
it 'indexes all mapcaps' do
|
||||
get_json index_mapcap_url, {} do |response|
|
||||
response.status.should eq 200
|
||||
|
||||
response.body.each do |mapcap_representation|
|
||||
mapcap_should_be_correct(mapcap_representation.deep_symbolize_keys)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns 403 if user does not own the visualization' do
|
||||
get_json index_mapcap_url(user: @intruder), {} do |response|
|
||||
response.status.should eq 403
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#show' do
|
||||
before (:all) { @mapcap = Carto::Mapcap.create(visualization_id: @visualization.id) }
|
||||
after (:all) { @mapcap.destroy }
|
||||
|
||||
def show_mapcap_url(user: @user, visualization: @visualization, mapcap: @mapcap)
|
||||
mapcap_url(
|
||||
user_domain: user.subdomain,
|
||||
visualization_id: visualization.id,
|
||||
id: mapcap.id,
|
||||
api_key: user.api_key
|
||||
)
|
||||
end
|
||||
|
||||
it 'shows a mapcap' do
|
||||
get_json show_mapcap_url, {} do |response|
|
||||
response.status.should eq 200
|
||||
|
||||
mapcap_should_be_correct(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns 404 for an inexistent mapcap' do
|
||||
get_json show_mapcap_url(mapcap: dummy_mapcap) do |response|
|
||||
response.status.should eq 404
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns 403 if user does not own the visualization' do
|
||||
get_json show_mapcap_url(user: @intruder), {} do |response|
|
||||
response.status.should eq 403
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#destroy' do
|
||||
before (:each) { @mapcap = Carto::Mapcap.create(visualization_id: @visualization.id) }
|
||||
after (:each) { @mapcap.destroy if @mapcap }
|
||||
|
||||
def destroy_mapcap_url(user: @user, visualization: @visualization, mapcap: @mapcap)
|
||||
mapcap_url(
|
||||
user_domain: user.subdomain,
|
||||
visualization_id: visualization.id,
|
||||
id: mapcap.id,
|
||||
api_key: user.api_key
|
||||
)
|
||||
end
|
||||
|
||||
it 'destroy a mapcap' do
|
||||
delete_json destroy_mapcap_url, {} do |response|
|
||||
response.status.should eq 204
|
||||
response.body.should be_empty
|
||||
|
||||
Carto::Mapcap.exists?(response.body[:id]).should_not be_true
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns 404 for an inexistent mapcap' do
|
||||
delete_json destroy_mapcap_url(mapcap: dummy_mapcap) do |response|
|
||||
response.status.should eq 404
|
||||
end
|
||||
end
|
||||
|
||||
it 'returns 403 if user does not own the visualization' do
|
||||
delete_json destroy_mapcap_url(user: @intruder), {} do |response|
|
||||
response.status.should eq 403
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user