cartodb-4.29/spec/requests/api/json/synchronizations_controller_spec.rb
2020-06-15 10:58:47 +08:00

109 lines
3.4 KiB
Ruby

require_relative '../../../spec_helper'
require_relative 'synchronizations_controller_shared_examples'
require_relative '../../../../app/controllers/api/json/synchronizations_controller'
describe Api::Json::SynchronizationsController do
include_context 'users helper'
it_behaves_like 'synchronization controllers' do
end
before(:each) do
login(@user1)
@user1.sync_tables_enabled = true
@user1.save
end
describe '#create' do
let(:params) do
{
url: "fake_url",
interval: 3600,
content_guessing: true,
type_guessing: true,
create_vis: false
}
end
describe 'for users without sync tables' do
before(:each) do
@user1.sync_tables_enabled = false
@user1.save
end
it 'returns 401' do
post_json api_v1_synchronizations_create_url(params) do |r|
r.status.should eq 401
end
end
it 'creates a synchronization and enqueues a import job for external sources' do
begin
Resque::ImporterJobs.expects(:perform).once
carto_visualization = FactoryGirl.create(:carto_visualization, user_id: @user1.id)
external_source = FactoryGirl.create(:external_source, visualization: carto_visualization)
remote_id = external_source.visualization_id
expect {
post_json api_v1_synchronizations_create_url(params.merge(remote_visualization_id: remote_id)) do |r|
r.status.should eq 200
Carto::Synchronization.find(r.body[:id]).state.should eq Carto::Synchronization::STATE_QUEUED
end
}.to change { Carto::Synchronization.count }.by 1
ensure
external_source.external_data_imports.each(&:destroy)
external_source.destroy
carto_visualization.destroy
end
end
end
it 'creates a synchronization and enqueues a import job' do
Resque::ImporterJobs.expects(:perform).once
expect {
post_json api_v1_synchronizations_create_url(params) do |r|
r.status.should eq 200
Carto::Synchronization.find(r.body[:id]).state.should eq Carto::Synchronization::STATE_QUEUED
end
}.to change { Carto::Synchronization.count }.by 1
end
end
describe '#sync_now' do
it 'syncs... now :D' do
sync = FactoryGirl.create(:carto_synchronization, user_id: @user1.id)
sync.state.should eq Carto::Synchronization::STATE_SUCCESS
Resque::SynchronizationJobs.expects(:perform).once
put_json api_v1_synchronizations_sync_now_url(id: sync.id) do |r|
r.status.should eq 200
sync.reload
sync.state.should eq Carto::Synchronization::STATE_QUEUED
end
end
end
describe '#update' do
it 'updates the interval' do
sync = FactoryGirl.create(:carto_synchronization, user_id: @user1.id)
new_interval = sync.interval * 2
put_json api_v1_synchronizations_update_url(id: sync.id), interval: new_interval do |r|
r.status.should eq 200
sync.reload
sync.interval.should eq new_interval
end
end
end
describe '#destroy' do
it 'destroys a sync' do
sync = FactoryGirl.create(:carto_synchronization, user_id: @user1.id)
Carto::Synchronization.exists?(sync.id).should be_true
delete_json api_v1_synchronizations_update_url(id: sync.id) do |r|
r.status.should eq 204
Carto::Synchronization.exists?(sync.id).should be_false
end
end
end
end