Make difference between error and empty geo json

This commit is contained in:
Paul Chavard 2018-11-27 12:15:36 +01:00
parent d7b5030be9
commit febf625dd9
3 changed files with 26 additions and 10 deletions

View file

@ -1,6 +1,9 @@
class Champs::CarteController < ApplicationController
before_action :authenticate_logged_user!
EMPTY_GEO_JSON = '[]'
ERROR_GEO_JSON = ''
def show
@selector = ".carte-#{params[:position]}"
@ -26,13 +29,17 @@ class Champs::CarteController < ApplicationController
end
geo_areas = []
geo_json = geo_json.blank? ? [] : JSON.parse(geo_json)
if geo_json.empty?
if geo_json == EMPTY_GEO_JSON
@champ.value = nil
@champ.geo_areas = []
elsif geo_json == ERROR_GEO_JSON
@error = true
@champ.value = nil
@champ.geo_areas = []
elsif geo_json.present?
else
geo_json = JSON.parse(geo_json)
if @champ.cadastres?
cadastres = ModuleApiCartoService.generate_cadastre(geo_json)
geo_areas += cadastres.map do |cadastre|

View file

@ -107,15 +107,18 @@ export function getCurrentMap(input) {
}
}
const EMPTY_GEO_JSON = '[]';
const ERROR_GEO_JSON = '';
export function addFreeDrawEvents(map, selector) {
const input = findInput(selector);
map.freeDraw.on('markers', ({ latLngs }) => {
if (latLngs.length === 0) {
input.value = '';
input.value = EMPTY_GEO_JSON;
} else if (polygonArea(latLngs) < 300000) {
input.value = JSON.stringify(latLngs);
} else {
input.value = '';
input.value = ERROR_GEO_JSON;
}
fire(input, 'change');

View file

@ -8,7 +8,7 @@ describe Champs::CarteController, type: :controller do
{
dossier: {
champs_attributes: {
'1' => { value: selection.to_json }
'1' => { value: value }
}
},
position: '1',
@ -35,13 +35,18 @@ describe Champs::CarteController, type: :controller do
end
context 'when coordinates are empty' do
let(:selection) { [] }
let(:value) { '[]' }
it { expect(response.body).to include("DS.drawMapData(\".carte-1\", {\"position\":{\"lon\":\"2.428462\",\"lat\":\"46.538192\",\"zoom\":\"13\"},\"selection\":[],\"quartiersPrioritaires\":[],\"cadastres\":[],\"parcellesAgricoles\":[]});") }
it {
expect(assigns(:error)).to eq(nil)
expect(champ.reload.value).to eq(nil)
expect(champ.reload.geo_areas).to eq([])
expect(response.body).to include("DS.drawMapData(\".carte-1\", {\"position\":{\"lon\":\"2.428462\",\"lat\":\"46.538192\",\"zoom\":\"13\"},\"selection\":[],\"quartiersPrioritaires\":[],\"cadastres\":[],\"parcellesAgricoles\":[]});")
}
end
context 'when coordinates are informed' do
let(:selection) { [[{ "lat": 48.87442541960633, "lng": 2.3859214782714844 }, { "lat": 48.87273183590832, "lng": 2.3850631713867183 }, { "lat": 48.87081237174292, "lng": 2.3809432983398438 }, { "lat": 48.8712640169951, "lng": 2.377510070800781 }, { "lat": 48.87510283703279, "lng": 2.3778533935546875 }, { "lat": 48.87544154230615, "lng": 2.382831573486328 }, { "lat": 48.87442541960633, "lng": 2.3859214782714844 }]] }
let(:value) { [[{ "lat": 48.87442541960633, "lng": 2.3859214782714844 }, { "lat": 48.87273183590832, "lng": 2.3850631713867183 }, { "lat": 48.87081237174292, "lng": 2.3809432983398438 }, { "lat": 48.8712640169951, "lng": 2.377510070800781 }, { "lat": 48.87510283703279, "lng": 2.3778533935546875 }, { "lat": 48.87544154230615, "lng": 2.382831573486328 }, { "lat": 48.87442541960633, "lng": 2.3859214782714844 }]].to_json }
it { expect(response.body).not_to be_nil }
it { expect(response.body).to include('MultiPolygon') }
@ -50,9 +55,10 @@ describe Champs::CarteController, type: :controller do
context 'when error' do
let(:geojson) { [[{ "lat": 48.87442541960633, "lng": 2.3859214782714844 }, { "lat": 48.87273183590832, "lng": 2.3850631713867183 }, { "lat": 48.87081237174292, "lng": 2.3809432983398438 }, { "lat": 48.8712640169951, "lng": 2.377510070800781 }, { "lat": 48.87510283703279, "lng": 2.3778533935546875 }, { "lat": 48.87544154230615, "lng": 2.382831573486328 }, { "lat": 48.87442541960633, "lng": 2.3859214782714844 }]] }
let(:selection) { '' }
let(:value) { '' }
it {
expect(assigns(:error)).to eq(true)
expect(champ.reload.value).to eq(nil)
expect(champ.reload.geo_areas).to eq([])
}