cartodb/spec/requests/carto/admin/mobile_apps_controller_spec.rb
2020-06-15 10:58:47 +08:00

167 lines
5.6 KiB
Ruby

require_relative '../../../spec_helper_min'
describe Carto::Admin::MobileAppsController do
include Warden::Test::Helpers
TEST_UUID = '00000000-0000-0000-0000-000000000000'.freeze
MOBILE_APP = {
id: TEST_UUID,
name: 'app_name',
description: 'Description of the app',
icon_url: 'http://icon.png',
platform: 'android',
app_id: 'com.app.id',
app_type: 'open'
}.freeze
before(:all) do
@carto_user = FactoryGirl.create(:carto_user, mobile_max_open_users: 10000)
@user = ::User[@carto_user.id]
end
after(:all) do
@user.destroy
end
around(:each) do |example|
Cartodb.with_config(cartodb_central_api: {}, &example)
end
describe '#index' do
it 'loads apps from Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:get_mobile_apps).returns(mobile_apps: [], monthly_users: { open: 10000, private: 0 }).once
login(@user)
get mobile_apps_path
response.status.should eq 200
end
it 'requires login' do
get mobile_apps_path
response.status.should eq 302
end
it 'returns 404 if Central disabled' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(false)
login(@user)
get mobile_apps_path
response.status.should eq 404
end
end
describe '#show' do
it 'loads app from Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:get_mobile_app).returns(id: TEST_UUID, monthly_users: 0, app_type: 'open', platform: 'android').once
login(@user)
get mobile_app_path(id: TEST_UUID)
response.status.should eq 200
end
it 'requires login' do
get mobile_app_path(id: TEST_UUID)
response.status.should eq 302
end
it 'returns 404 if Central disabled' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(false)
login(@user)
get mobile_app_path(id: TEST_UUID)
response.status.should eq 404
end
end
describe '#create' do
let(:create_app) { MOBILE_APP.slice(:name, :description, :icon_url, :platform, :app_id, :app_type) }
it 'creates app in Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:create_mobile_app).returns({}).once
login(@user)
post mobile_apps_path, mobile_app: create_app
response.status.should eq 302
response.location.should end_with 'your_apps/mobile'
end
it 'validates app before sending to Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:create_mobile_app).returns({}).never
login(@user)
post mobile_apps_path, mobile_app: create_app.merge(name: '')
response.status.should eq 200
response.body.should include "Name can't be blank"
end
it 'requires login' do
post mobile_apps_path, mobile_app: create_app
response.status.should eq 302
end
it 'returns 404 if Central disabled' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(false)
login(@user)
post mobile_apps_path, mobile_app: create_app
response.status.should eq 404
end
end
describe '#update' do
let(:update_app) { MOBILE_APP.slice(:name, :description, :icon_url, :app_type) }
it 'updates app in Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:get_mobile_app).returns(MOBILE_APP).once
Cartodb::Central.any_instance.stubs(:update_mobile_app).returns({}).once
login(@user)
put mobile_app_path(id: TEST_UUID), mobile_app: update_app
response.status.should eq 302
response.location.should end_with 'your_apps/mobile/' + TEST_UUID
end
it 'validates app before sending to Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:get_mobile_app).returns(id: TEST_UUID, monthly_users: 0, app_type: 'open', platform: 'android').once
Cartodb::Central.any_instance.stubs(:update_mobile_app).returns(mobile_app: {}).never
login(@user)
put mobile_app_path(id: TEST_UUID), mobile_app: update_app.merge(name: '')
response.status.should eq 200
response.body.should include "Name can't be blank"
end
it 'requires login' do
put mobile_app_path(id: TEST_UUID), mobile_app: update_app
response.status.should eq 302
end
it 'returns 404 if Central disabled' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(false)
login(@user)
put mobile_app_path(id: TEST_UUID), mobile_app: update_app
response.status.should eq 404
end
end
describe '#destroy' do
it 'deletes app in Central' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(true)
Cartodb::Central.any_instance.stubs(:delete_mobile_app).returns({}).once
login(@user)
delete mobile_app_path(id: TEST_UUID), password_confirmation: @carto_user.password
response.status.should eq 302
response.location.should end_with 'your_apps/mobile'
end
it 'requires login' do
delete mobile_app_path(id: TEST_UUID)
response.status.should eq 302
end
it 'returns 404 if Central disabled' do
Cartodb::Central.stubs(:sync_data_with_cartodb_central?).returns(false)
login(@user)
delete mobile_app_path(id: TEST_UUID)
response.status.should eq 404
end
end
end