Tests for google_maps_static_image generation

pull/12301/head
Javier Torres 7 years ago
parent 8ab088f6a4
commit c150784f4c

@ -260,6 +260,7 @@ SPEC_HELPER_MIN_SPECS = \
spec/requests/carto/api/analyses_controller_spec.rb \
spec/requests/carto/api/maps_controller_spec.rb \
spec/requests/carto/api/static_notifications_controller_spec.rb \
spec/requests/carto/api/users_controller_spec.rb \
spec/requests/carto/api/visualization_exports_controller_spec.rb \
spec/requests/carto/api/vizjson3_presenter_spec.rb \
spec/requests/carto/superadmin/organizations_controller_spec.rb \

@ -1,3 +1,5 @@
require_dependency 'carto/google_maps_api_signer'
module Carto
module Api
class UsersController < ::Api::ApplicationController
@ -11,25 +13,14 @@ module Carto
end
def google_maps_static_image
styles_definition = JSON.parse(params[:style], symbolize_names: true)
styles = styles_definition.map do |style_definition|
style_parts = []
style_parts << "feature:#{style_definition[:featureType] || 'all'}"
style_parts << "element:#{style_definition[:elementType] || 'all'}"
style_definition[:stylers].each do |styler|
style_parts += styler.map { |k, v| "#{k}:#{v.to_s.gsub('#', '0x')}" }
end
'&style=' + style_parts.join('|')
end
style_string = styles.join('')
style_string = parse_google_maps_styles(params[:style])
base_url = "https://maps.googleapis.com/maps/api/staticmap?center=#{params[:center]}" \
"&mapType=#{params[:mapType]}&size=#{params[:size]}&style=#{style_string}&zoom=#{params[:zoom]}"
"&mapType=#{params[:mapType]}&size=#{params[:size]}#{style_string}&zoom=#{params[:zoom]}"
render(json: { url: Carto::GoogleMapsApiSigner.new(current_user).sign(base_url) })
rescue => e
CartoDB::Logger.error(message: 'Error generating Google API URL', exception: e)
render(json: { errors: 'Error generating static image URL' })
render(json: { errors: 'Error generating static image URL' }, status: 400)
end
def get_authenticated_users
@ -55,6 +46,21 @@ module Carto
private
def parse_google_maps_styles(style_json)
return '' unless style_json
styles_definition = JSON.parse(style_json, symbolize_names: true)
styles = styles_definition.map do |style_definition|
style_parts = []
style_parts << "feature:#{style_definition[:featureType] || 'all'}"
style_parts << "element:#{style_definition[:elementType] || 'all'}"
style_definition[:stylers].each do |styler|
style_parts += styler.map { |k, v| "#{k}:#{v.to_s.gsub('#', '0x')}" }
end
'&style=' + style_parts.join('|')
end
styles.join('')
end
def render_auth_users_data(user, referrer, subdomain, referrer_organization_username=nil)
organization_name = nil

@ -473,7 +473,7 @@ CartoDB::Application.routes.draw do
put '(/user/:user_domain)(/u/:user_domain)/api/v1/perm/:id' => 'permissions#update', as: :api_v1_permissions_update
# URL for Google Maps API
post '(/user/:user_domain)(/u/:user_domain)/api/v1/google_maps_static_image' => 'users#google_maps_static_image'
post '(/user/:user_domain)(/u/:user_domain)/api/v1/google_maps_static_image' => 'users#google_maps_static_image', as: :api_v1_google_maps_static_image
end
scope module: 'api/json', defaults: { format: :json } do

@ -0,0 +1,50 @@
# encoding: utf-8
require_relative '../../../spec_helper_min'
describe Carto::Api::UsersController do
include Warden::Test::Helpers
before(:all) do
@user = create_user
end
before(:each) do
host! "#{@user.username}.localhost.lan"
login_as(@user, scope: @user.username)
end
after(:all) do
@user.destroy
end
describe '#google_maps_static_image' do
let(:params) do
{
mapType: 'roadmap',
size: '300x200',
zoom: 14,
center: '0.12,-7.56',
style: []
}
end
it 'returns error if user does not have Google configured' do
@user.google_maps_key = nil
@user.save
post_json api_v1_google_maps_static_image_url(params) do |response|
expect(response.status).to eq 400
expect(response.body[:errors]).to be
end
end
it 'returns signed google maps URL' do
@user.google_maps_key = 'key=GAdhfasjkd'
@user.save
post_json api_v1_google_maps_static_image_url(params) do |response|
response.status.should be_success
response.body[:url].should eq 'https://maps.googleapis.com/maps/api/staticmap?center=0.12,-7.56&mapType=roadmap&size=300x200&zoom=14&key=GAdhfasjkd'
end
end
end
end
Loading…
Cancel
Save