Merge branch 'dev'
This commit is contained in:
commit
5dbc1840e9
58 changed files with 38 additions and 1401 deletions
|
@ -58,17 +58,11 @@ class Admin::ProceduresController < AdminController
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@procedure ||= Procedure.new
|
@procedure ||= Procedure.new
|
||||||
@procedure.module_api_carto ||= ModuleAPICarto.new
|
|
||||||
@availability = Procedure::PATH_AVAILABLE
|
@availability = Procedure::PATH_AVAILABLE
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@procedure = Procedure.new(procedure_params)
|
@procedure = Procedure.new(procedure_params)
|
||||||
|
|
||||||
if @procedure.valid?
|
|
||||||
@procedure.module_api_carto = ModuleAPICarto.new
|
|
||||||
end
|
|
||||||
|
|
||||||
@path = @procedure.path
|
@path = @procedure.path
|
||||||
@availability = Procedure.path_availability(current_administrateur, @procedure.path)
|
@availability = Procedure.path_availability(current_administrateur, @procedure.path)
|
||||||
|
|
||||||
|
@ -268,7 +262,7 @@ class Admin::ProceduresController < AdminController
|
||||||
if Flipflop.publish_draft?
|
if Flipflop.publish_draft?
|
||||||
editable_params << :path
|
editable_params << :path
|
||||||
end
|
end
|
||||||
params.require(:procedure).permit(*editable_params, :duree_conservation_dossiers_dans_ds, :duree_conservation_dossiers_hors_ds, :for_individual, :individual_with_siret, :ask_birthday, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id)
|
params.require(:procedure).permit(*editable_params, :duree_conservation_dossiers_dans_ds, :duree_conservation_dossiers_hors_ds, :for_individual, :individual_with_siret, :ask_birthday).merge(administrateur_id: current_administrateur.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -61,11 +61,7 @@ module NewUser
|
||||||
@dossier.update!(autorisation_donnees: true)
|
@dossier.update!(autorisation_donnees: true)
|
||||||
flash.notice = "Identité enregistrée"
|
flash.notice = "Identité enregistrée"
|
||||||
|
|
||||||
if @dossier.use_legacy_carto?
|
|
||||||
redirect_to users_dossier_carte_path(@dossier.id)
|
|
||||||
else
|
|
||||||
redirect_to brouillon_dossier_path(@dossier)
|
redirect_to brouillon_dossier_path(@dossier)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
flash.now.alert = @dossier.individual.errors.full_messages
|
flash.now.alert = @dossier.individual.errors.full_messages
|
||||||
render :identite
|
render :identite
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
class Users::CarteController < UsersController
|
|
||||||
before_action only: [:show] do
|
|
||||||
authorized_routes? self.class
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
@dossier = current_user_dossier
|
|
||||||
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
flash.alert = t('errors.messages.dossier_not_found')
|
|
||||||
redirect_to url_for(root_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
geo_json = clean_json_latlngs(params[:selection])
|
|
||||||
dossier = current_user_dossier
|
|
||||||
|
|
||||||
dossier.quartier_prioritaires.each(&:destroy)
|
|
||||||
dossier.cadastres.each(&:destroy)
|
|
||||||
|
|
||||||
if geo_json.present?
|
|
||||||
ModuleApiCartoService.save_qp!(dossier, geo_json)
|
|
||||||
ModuleApiCartoService.save_cadastre!(dossier, geo_json)
|
|
||||||
end
|
|
||||||
|
|
||||||
dossier.update!(json_latlngs: geo_json)
|
|
||||||
|
|
||||||
redirect_to brouillon_dossier_path(dossier)
|
|
||||||
end
|
|
||||||
|
|
||||||
def zones
|
|
||||||
@dossier = current_user_dossier
|
|
||||||
@data = {}
|
|
||||||
|
|
||||||
geo_json = JSON.parse(params.fetch(:selection, '[]'))
|
|
||||||
|
|
||||||
if geo_json.first == ["error", "TooManyPolygons"]
|
|
||||||
@error = true
|
|
||||||
else
|
|
||||||
if @dossier.procedure.module_api_carto.quartiers_prioritaires?
|
|
||||||
quartiers_prioritaires = ModuleApiCartoService.generate_qp(geo_json)
|
|
||||||
@dossier.quartier_prioritaires.build(quartiers_prioritaires)
|
|
||||||
@data[:quartiersPrioritaires] = quartiers_prioritaires
|
|
||||||
end
|
|
||||||
|
|
||||||
if @dossier.procedure.module_api_carto.cadastre?
|
|
||||||
cadastres = ModuleApiCartoService.generate_cadastre(geo_json)
|
|
||||||
@dossier.cadastres.build(cadastres)
|
|
||||||
@data[:cadastres] = cadastres
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.route_authorization
|
|
||||||
{
|
|
||||||
states: [Dossier.states.fetch(:brouillon), Dossier.states.fetch(:en_construction)],
|
|
||||||
api_carto: true
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def clean_json_latlngs(json_latlngs)
|
|
||||||
# a polygon must contain at least 4 points
|
|
||||||
# https://tools.ietf.org/html/rfc7946#section-3.1.6
|
|
||||||
if json_latlngs.present?
|
|
||||||
multipolygone = JSON.parse(json_latlngs)
|
|
||||||
if multipolygone.first == ["error", "TooManyPolygons"]
|
|
||||||
[].to_json
|
|
||||||
else
|
|
||||||
multipolygone.reject! { |polygone| polygone.count < 4 }
|
|
||||||
if multipolygone.present?
|
|
||||||
multipolygone.to_json
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,35 +0,0 @@
|
||||||
class UsersController < ApplicationController
|
|
||||||
before_action :authenticate_user!
|
|
||||||
|
|
||||||
def index
|
|
||||||
redirect_to root_path
|
|
||||||
end
|
|
||||||
|
|
||||||
def current_user_dossier(dossier_id = nil)
|
|
||||||
dossier_id ||= params[:dossier_id] || params[:id]
|
|
||||||
|
|
||||||
dossier = Dossier.find(dossier_id)
|
|
||||||
|
|
||||||
if !current_user.owns_or_invite?(dossier)
|
|
||||||
raise ActiveRecord::RecordNotFound
|
|
||||||
end
|
|
||||||
|
|
||||||
dossier
|
|
||||||
end
|
|
||||||
|
|
||||||
def authorized_routes?(controller)
|
|
||||||
if !UserRoutesAuthorizationService.authorized_route?(controller, current_user_dossier)
|
|
||||||
redirect_to_root_path 'Le statut de votre dossier n\'autorise pas cette URL'
|
|
||||||
end
|
|
||||||
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
redirect_to_root_path 'Vous n’avez pas accès à ce dossier.'
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def redirect_to_root_path(message)
|
|
||||||
flash.alert = message
|
|
||||||
redirect_to url_for root_path
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,52 +0,0 @@
|
||||||
import { CREATE } from 'leaflet-freedraw';
|
|
||||||
import { on } from '@utils';
|
|
||||||
import { getData } from '../shared/data';
|
|
||||||
import {
|
|
||||||
initMap,
|
|
||||||
geocodeAddress,
|
|
||||||
drawUserSelection,
|
|
||||||
drawCadastre,
|
|
||||||
drawQuartiersPrioritaires,
|
|
||||||
addFreeDrawEvents
|
|
||||||
} from '../shared/carte';
|
|
||||||
|
|
||||||
function initialize() {
|
|
||||||
const element = document.getElementById('map');
|
|
||||||
|
|
||||||
if (element) {
|
|
||||||
const data = getData('carto');
|
|
||||||
const map = initMap(element, data.position, true);
|
|
||||||
|
|
||||||
addAddressSelectEvent(map);
|
|
||||||
|
|
||||||
on('#new', 'click', () => {
|
|
||||||
map.freeDraw.mode(CREATE);
|
|
||||||
});
|
|
||||||
|
|
||||||
const cartoDrawZones = data => {
|
|
||||||
drawCadastre(map, data, true);
|
|
||||||
drawQuartiersPrioritaires(map, data, true);
|
|
||||||
};
|
|
||||||
|
|
||||||
window.DS = { cartoDrawZones };
|
|
||||||
|
|
||||||
// draw external polygons
|
|
||||||
cartoDrawZones(data);
|
|
||||||
|
|
||||||
// draw user polygon
|
|
||||||
drawUserSelection(map, data, true);
|
|
||||||
addFreeDrawEvents(map, 'input[name=selection]');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addEventListener('turbolinks:load', initialize);
|
|
||||||
|
|
||||||
function addAddressSelectEvent(map) {
|
|
||||||
on(
|
|
||||||
'#search-by-address input[type=address]',
|
|
||||||
'autocomplete:select',
|
|
||||||
(_, { label }) => {
|
|
||||||
geocodeAddress(map, label);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -11,8 +11,6 @@ import '../shared/autocomplete';
|
||||||
import '../shared/remote-input';
|
import '../shared/remote-input';
|
||||||
import '../shared/franceconnect';
|
import '../shared/franceconnect';
|
||||||
|
|
||||||
import '../old_design/carto';
|
|
||||||
|
|
||||||
// Start Rails helpers
|
// Start Rails helpers
|
||||||
Rails.start();
|
Rails.start();
|
||||||
Turbolinks.start();
|
Turbolinks.start();
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
class Cadastre < ApplicationRecord
|
|
||||||
belongs_to :dossier, touch: true
|
|
||||||
|
|
||||||
def geometry
|
|
||||||
JSON.parse(read_attribute(:geometry))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -20,8 +20,6 @@ class Dossier < ApplicationRecord
|
||||||
has_many :pieces_justificatives, dependent: :destroy
|
has_many :pieces_justificatives, dependent: :destroy
|
||||||
has_many :champs, -> { public_only.ordered }, dependent: :destroy
|
has_many :champs, -> { public_only.ordered }, dependent: :destroy
|
||||||
has_many :champs_private, -> { private_only.ordered }, class_name: 'Champ', dependent: :destroy
|
has_many :champs_private, -> { private_only.ordered }, class_name: 'Champ', dependent: :destroy
|
||||||
has_many :quartier_prioritaires, dependent: :destroy
|
|
||||||
has_many :cadastres, dependent: :destroy
|
|
||||||
has_many :commentaires, dependent: :destroy
|
has_many :commentaires, dependent: :destroy
|
||||||
has_many :invites, dependent: :destroy
|
has_many :invites, dependent: :destroy
|
||||||
has_many :follows
|
has_many :follows
|
||||||
|
@ -74,8 +72,6 @@ class Dossier < ApplicationRecord
|
||||||
piece_justificative_file_attachment: :blob
|
piece_justificative_file_attachment: :blob
|
||||||
],
|
],
|
||||||
pieces_justificatives: [],
|
pieces_justificatives: [],
|
||||||
quartier_prioritaires: [],
|
|
||||||
cadastres: [],
|
|
||||||
etablissement: [],
|
etablissement: [],
|
||||||
individual: [],
|
individual: [],
|
||||||
user: [])
|
user: [])
|
||||||
|
@ -247,20 +243,10 @@ class Dossier < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def use_legacy_carto?
|
|
||||||
procedure.use_legacy_carto?
|
|
||||||
end
|
|
||||||
|
|
||||||
def expose_legacy_carto_api?
|
def expose_legacy_carto_api?
|
||||||
procedure.expose_legacy_carto_api?
|
procedure.expose_legacy_carto_api?
|
||||||
end
|
end
|
||||||
|
|
||||||
def user_geometry
|
|
||||||
if json_latlngs.present?
|
|
||||||
UserGeometry.new(json_latlngs)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def geo_position
|
def geo_position
|
||||||
if etablissement.present?
|
if etablissement.present?
|
||||||
point = ApiAdresse::PointAdapter.new(etablissement.geo_adresse).geocode
|
point = ApiAdresse::PointAdapter.new(etablissement.geo_adresse).geocode
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
class ModuleAPICarto < ApplicationRecord
|
class ModuleAPICarto < ApplicationRecord
|
||||||
belongs_to :procedure
|
belongs_to :procedure
|
||||||
|
|
||||||
validates :use_api_carto, presence: true, allow_blank: true, allow_nil: false
|
|
||||||
validates :quartiers_prioritaires, presence: true, allow_blank: true, allow_nil: false
|
|
||||||
validates :cadastre, presence: true, allow_blank: true, allow_nil: false
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,7 +32,6 @@ class Procedure < ApplicationRecord
|
||||||
|
|
||||||
accepts_nested_attributes_for :types_de_champ, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
accepts_nested_attributes_for :types_de_champ, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
||||||
accepts_nested_attributes_for :types_de_piece_justificative, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
accepts_nested_attributes_for :types_de_piece_justificative, :reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true
|
||||||
accepts_nested_attributes_for :module_api_carto
|
|
||||||
accepts_nested_attributes_for :types_de_champ_private
|
accepts_nested_attributes_for :types_de_champ_private
|
||||||
|
|
||||||
mount_uploader :logo, ProcedureLogoUploader
|
mount_uploader :logo, ProcedureLogoUploader
|
||||||
|
@ -131,12 +130,8 @@ class Procedure < ApplicationRecord
|
||||||
publiee? || archivee?
|
publiee? || archivee?
|
||||||
end
|
end
|
||||||
|
|
||||||
def use_legacy_carto?
|
|
||||||
module_api_carto.use_api_carto? && !module_api_carto.migrated?
|
|
||||||
end
|
|
||||||
|
|
||||||
def expose_legacy_carto_api?
|
def expose_legacy_carto_api?
|
||||||
module_api_carto.use_api_carto? && module_api_carto.migrated?
|
module_api_carto&.use_api_carto? && module_api_carto&.migrated?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Warning: dossier after_save build_default_champs must be removed
|
# Warning: dossier after_save build_default_champs must be removed
|
||||||
|
@ -207,7 +202,6 @@ class Procedure < ApplicationRecord
|
||||||
procedure = self.deep_clone(include:
|
procedure = self.deep_clone(include:
|
||||||
{
|
{
|
||||||
types_de_piece_justificative: nil,
|
types_de_piece_justificative: nil,
|
||||||
module_api_carto: nil,
|
|
||||||
attestation_template: nil,
|
attestation_template: nil,
|
||||||
types_de_champ: :drop_down_list,
|
types_de_champ: :drop_down_list,
|
||||||
types_de_champ_private: :drop_down_list
|
types_de_champ_private: :drop_down_list
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
class QuartierPrioritaire < ApplicationRecord
|
|
||||||
belongs_to :dossier, touch: true
|
|
||||||
|
|
||||||
def geometry
|
|
||||||
JSON.parse(read_attribute(:geometry))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,40 +0,0 @@
|
||||||
class UserGeometry
|
|
||||||
alias :read_attribute_for_serialization :send
|
|
||||||
|
|
||||||
def initialize(json_latlngs)
|
|
||||||
@json_latlngs = json_latlngs
|
|
||||||
end
|
|
||||||
|
|
||||||
def geometry
|
|
||||||
to_geo_json(@json_latlngs)
|
|
||||||
end
|
|
||||||
|
|
||||||
def type_de_champ
|
|
||||||
{
|
|
||||||
id: -1,
|
|
||||||
libelle: 'user_geometry',
|
|
||||||
type_champ: 'user_geometry',
|
|
||||||
order_place: -1,
|
|
||||||
descripton: ''
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def to_geo_json(json_latlngs)
|
|
||||||
json = JSON.parse(json_latlngs)
|
|
||||||
|
|
||||||
coordinates = json.map do |lat_longs|
|
|
||||||
outbounds = lat_longs.map do |lat_long|
|
|
||||||
[lat_long['lng'], lat_long['lat']]
|
|
||||||
end
|
|
||||||
|
|
||||||
[outbounds]
|
|
||||||
end
|
|
||||||
|
|
||||||
{
|
|
||||||
type: 'MultiPolygon',
|
|
||||||
coordinates: coordinates
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -11,7 +11,7 @@ class ChampSerializer < ActiveModel::Serializer
|
||||||
|
|
||||||
def value
|
def value
|
||||||
case object
|
case object
|
||||||
when GeoArea, UserGeometry, Cadastre, QuartierPrioritaire
|
when GeoArea
|
||||||
object.geometry
|
object.geometry
|
||||||
when Champs::CarteChamp
|
when Champs::CarteChamp
|
||||||
if object.value.present?
|
if object.value.present?
|
||||||
|
@ -40,7 +40,7 @@ class ChampSerializer < ActiveModel::Serializer
|
||||||
|
|
||||||
def type_de_champ
|
def type_de_champ
|
||||||
case object
|
case object
|
||||||
when GeoArea, UserGeometry, Cadastre, QuartierPrioritaire
|
when GeoArea
|
||||||
legacy_type_de_champ
|
legacy_type_de_champ
|
||||||
else
|
else
|
||||||
object.type_de_champ
|
object.type_de_champ
|
||||||
|
@ -76,28 +76,18 @@ class ChampSerializer < ActiveModel::Serializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def legacy_carto_libelle
|
def legacy_carto_libelle
|
||||||
case object
|
|
||||||
when UserGeometry, Cadastre, QuartierPrioritaire
|
|
||||||
object.class.name.underscore.tr('_', ' ')
|
|
||||||
else
|
|
||||||
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
|
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
|
||||||
'user geometry'
|
'user geometry'
|
||||||
else
|
else
|
||||||
object.source.to_s.tr('_', ' ')
|
object.source.to_s.tr('_', ' ')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def legacy_carto_type_champ
|
def legacy_carto_type_champ
|
||||||
case object
|
|
||||||
when UserGeometry, Cadastre, QuartierPrioritaire
|
|
||||||
object.class.name.underscore
|
|
||||||
else
|
|
||||||
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
|
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
|
||||||
'user_geometry'
|
'user_geometry'
|
||||||
else
|
else
|
||||||
object.source.to_s
|
object.source.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,14 +28,7 @@ class DossierSerializer < ActiveModel::Serializer
|
||||||
def champs
|
def champs
|
||||||
champs = object.champs.to_a
|
champs = object.champs.to_a
|
||||||
|
|
||||||
if object.use_legacy_carto?
|
if object.expose_legacy_carto_api?
|
||||||
champs += object.quartier_prioritaires
|
|
||||||
champs += object.cadastres
|
|
||||||
|
|
||||||
if object.user_geometry.present?
|
|
||||||
champs << object.user_geometry
|
|
||||||
end
|
|
||||||
elsif object.expose_legacy_carto_api?
|
|
||||||
champ_carte = champs.find do |champ|
|
champ_carte = champs.find do |champ|
|
||||||
champ.type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:carte)
|
champ.type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:carte)
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,6 +37,10 @@ class ProcedureSerializer < ActiveModel::Serializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def geographic_information
|
def geographic_information
|
||||||
|
if object.expose_legacy_carto_api?
|
||||||
object.module_api_carto
|
object.module_api_carto
|
||||||
|
else
|
||||||
|
ModuleAPICarto.new(procedure: object)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,28 +1,4 @@
|
||||||
class ModuleApiCartoService
|
class ModuleApiCartoService
|
||||||
def self.save_qp!(dossier, json_latlngs)
|
|
||||||
if dossier.procedure.module_api_carto.quartiers_prioritaires?
|
|
||||||
qp_list = generate_qp(JSON.parse(json_latlngs))
|
|
||||||
|
|
||||||
qp_list.each do |qp|
|
|
||||||
qp[:dossier_id] = dossier.id
|
|
||||||
qp[:geometry] = qp[:geometry].to_json
|
|
||||||
QuartierPrioritaire.create(qp)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.save_cadastre!(dossier, json_latlngs)
|
|
||||||
if dossier.procedure.module_api_carto.cadastre?
|
|
||||||
cadastre_list = generate_cadastre JSON.parse(json_latlngs)
|
|
||||||
|
|
||||||
cadastre_list.each do |cadastre|
|
|
||||||
cadastre[:dossier_id] = dossier.id
|
|
||||||
cadastre[:geometry] = cadastre[:geometry].to_json
|
|
||||||
Cadastre.create(cadastre)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.generate_qp(coordinates)
|
def self.generate_qp(coordinates)
|
||||||
coordinates.flat_map do |coordinate|
|
coordinates.flat_map do |coordinate|
|
||||||
ApiCarto::QuartiersPrioritairesAdapter.new(
|
ApiCarto::QuartiersPrioritairesAdapter.new(
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
class UserRoutesAuthorizationService
|
|
||||||
def self.authorized_route?(controller, dossier)
|
|
||||||
auth = controller.route_authorization
|
|
||||||
|
|
||||||
auth[:states].include?(dossier.state) &&
|
|
||||||
(auth[:api_carto].nil? ? true : auth[:api_carto] == dossier.use_legacy_carto?)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
%p
|
%p
|
||||||
Pour le consulter, merci de vous rendre sur
|
Pour le consulter, merci de vous rendre sur
|
||||||
= messagerie_dossier_url(@dossier)
|
= link_to messagerie_dossier_url(@dossier), messagerie_dossier_url(@dossier), target: '_blank'
|
||||||
|
|
||||||
%p
|
%p
|
||||||
Bonne journée,
|
Bonne journée,
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
= yield
|
= yield
|
||||||
|
|
||||||
%p ---
|
%footer
|
||||||
|
%p
|
||||||
%p.footer
|
—
|
||||||
|
%br
|
||||||
%strong
|
%strong
|
||||||
Merci de ne pas répondre à cet email. Pour vous adresser à votre administration, passez directement par votre
|
Merci de ne pas répondre à cet email. Pour vous adresser à votre administration, passez directement par votre
|
||||||
= succeed '.' do
|
= succeed '.' do
|
||||||
|
|
|
@ -17,22 +17,6 @@
|
||||||
- if champs.any?
|
- if champs.any?
|
||||||
= render partial: "shared/dossiers/champs", locals: { champs: champs, dossier: @dossier, demande_seen_at: nil, profile: 'instructeur' }
|
= render partial: "shared/dossiers/champs", locals: { champs: champs, dossier: @dossier, demande_seen_at: nil, profile: 'instructeur' }
|
||||||
|
|
||||||
- if @dossier.use_legacy_carto?
|
|
||||||
%h3 Cartographie
|
|
||||||
- if @dossier.quartier_prioritaires.any?
|
|
||||||
%h4 Quartiers prioritaires
|
|
||||||
%table
|
|
||||||
- @dossier.quartier_prioritaires.each do |q|
|
|
||||||
%tr
|
|
||||||
%td= q.nom
|
|
||||||
|
|
||||||
- if @dossier.cadastres.any?
|
|
||||||
%h4 Parcelles cadastrales
|
|
||||||
%table
|
|
||||||
- @dossier.cadastres.each do |p|
|
|
||||||
%tr
|
|
||||||
%td= "Parcelle n° #{p.numero} - Feuille #{p.code_arr} #{p.section} #{p.feuille}"
|
|
||||||
|
|
||||||
- if @dossier.types_de_piece_justificative.any?
|
- if @dossier.types_de_piece_justificative.any?
|
||||||
%h3 Pièces jointes
|
%h3 Pièces jointes
|
||||||
|
|
||||||
|
|
|
@ -24,12 +24,4 @@
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= link_to 'Utiliser un autre numéro SIRET', siret_dossier_path(@dossier), class: 'button'
|
= link_to 'Utiliser un autre numéro SIRET', siret_dossier_path(@dossier), class: 'button'
|
||||||
|
|
||||||
- if @dossier.use_legacy_carto?
|
|
||||||
/ Until the old layout is gone, we need to disable turbolinks
|
|
||||||
/ to avoid the map loading twice (once for the turbolinks preview,
|
|
||||||
/ once when turbolinks notices the layout are differents and reloads
|
|
||||||
/ the page.)
|
|
||||||
= link_to 'Continuer avec ces informations', users_dossier_carte_path(@dossier), class: 'button primary', data: { turbolinks: false }
|
|
||||||
- else
|
|
||||||
= link_to 'Continuer avec ces informations', brouillon_dossier_path(@dossier), class: 'button primary'
|
= link_to 'Continuer avec ces informations', brouillon_dossier_path(@dossier), class: 'button primary'
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
:javascript
|
|
||||||
DATA.push({
|
|
||||||
carto: {
|
|
||||||
position: #{raw(dossier.geo_position.to_json)},
|
|
||||||
selection: #{raw(ensure_safe_json(dossier.json_latlngs))},
|
|
||||||
cadastres: #{raw(dossier.cadastres.to_json)},
|
|
||||||
quartiersPrioritaires: #{raw(dossier.quartier_prioritaires.to_json)}
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -15,11 +15,6 @@
|
||||||
.card
|
.card
|
||||||
= render partial: "shared/dossiers/champs", locals: { champs: champs, demande_seen_at: demande_seen_at, profile: profile }
|
= render partial: "shared/dossiers/champs", locals: { champs: champs, demande_seen_at: demande_seen_at, profile: profile }
|
||||||
|
|
||||||
- if dossier.use_legacy_carto?
|
|
||||||
.tab-title Cartographie
|
|
||||||
.card
|
|
||||||
= render partial: "shared/dossiers/map", locals: { dossier: dossier }
|
|
||||||
|
|
||||||
- if dossier.types_de_piece_justificative.any?
|
- if dossier.types_de_piece_justificative.any?
|
||||||
.tab-title Pièces jointes
|
.tab-title Pièces jointes
|
||||||
.card
|
.card
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
- if dossier.json_latlngs.nil?
|
|
||||||
%h2.empty-text Non renseigné
|
|
||||||
- else
|
|
||||||
#map
|
|
||||||
|
|
||||||
- if dossier.quartier_prioritaires.any?
|
|
||||||
.card-title Quartiers prioritaires
|
|
||||||
%ul
|
|
||||||
- dossier.quartier_prioritaires.each do |q|
|
|
||||||
%li= q.nom
|
|
||||||
|
|
||||||
- if dossier.cadastres.any?
|
|
||||||
.card-title Parcelles cadastrales
|
|
||||||
%ul
|
|
||||||
- dossier.cadastres.each do |p|
|
|
||||||
%li
|
|
||||||
= "Parcelle n° #{p.numero} - Feuille #{p.code_arr} #{p.section} #{p.feuille}"
|
|
||||||
|
|
||||||
= render partial: 'shared/champs/carte/init', locals: { dossier: dossier }
|
|
|
@ -1,8 +0,0 @@
|
||||||
#carte-page.row
|
|
||||||
.col-md-12.col-lg-12
|
|
||||||
#map.carte.edit
|
|
||||||
|
|
||||||
%span.zones
|
|
||||||
= render partial: 'zones', locals: { dossier: dossier, error: @error }
|
|
||||||
|
|
||||||
= render partial: 'shared/champs/carte/init', locals: { dossier: dossier }
|
|
|
@ -1,25 +0,0 @@
|
||||||
- if dossier.procedure.module_api_carto.quartiers_prioritaires?
|
|
||||||
.col-md-9.col-lg-9#qp.col-md-3.col-lg-3.list
|
|
||||||
%h3.text-info Quartiers prioritaires
|
|
||||||
- if dossier.quartier_prioritaires.blank?
|
|
||||||
Aucun quartier prioritaire sur les zones séléctionnées
|
|
||||||
- else
|
|
||||||
%ul
|
|
||||||
- dossier.quartier_prioritaires.each do |qp|
|
|
||||||
%li #{qp.commune} : #{qp.nom}
|
|
||||||
|
|
||||||
- if error.present?
|
|
||||||
%b Merci de dessiner une surface plus petite afin de récupérer les quartiers prioritaires.
|
|
||||||
|
|
||||||
- if dossier.procedure.module_api_carto.cadastre?
|
|
||||||
.col-md-9.col-lg-9#cadastre.col-md-3.col-lg-3.list
|
|
||||||
%h3.text-warning Parcelles cadastrales
|
|
||||||
- if dossier.cadastres.blank?
|
|
||||||
Aucune parcelle cadastrale sur les zones séléctionnées
|
|
||||||
- else
|
|
||||||
%ul
|
|
||||||
- dossier.cadastres.each do |cadastre|
|
|
||||||
%li Parcelle nº #{cadastre.numero} - Feuille #{cadastre.code_arr} #{cadastre.section} #{cadastre.feuille}
|
|
||||||
|
|
||||||
- if error.present?
|
|
||||||
%b Merci de dessiner une surface plus petite afin de récupérer les parcelles cadastrales.
|
|
|
@ -1,28 +0,0 @@
|
||||||
.row#carto-page
|
|
||||||
.col-lg-12.col-md-12.col-sm-12.col-xs-12
|
|
||||||
%h2
|
|
||||||
Localisation
|
|
||||||
%h4.text-primary
|
|
||||||
Positionnez-vous et dessinez sur la carte la zone d'action de votre demande.
|
|
||||||
%br
|
|
||||||
|
|
||||||
.content{ style: 'margin-bottom: 60px;' }
|
|
||||||
%button#new.btn.btn-md.btn-success{ type: 'button' }
|
|
||||||
%i.fa.fa-pencil
|
|
||||||
Ajouter une zone
|
|
||||||
|
|
||||||
%span#search-by-address{ style: 'margin-left: 20px;' }
|
|
||||||
%input.form-control{ type: :address, data: { autocomplete: 'address' }, placeholder: 'Rechercher une adresse' }
|
|
||||||
%br
|
|
||||||
%br
|
|
||||||
|
|
||||||
= render partial: 'users/carte/map', locals: { dossier: @dossier }
|
|
||||||
|
|
||||||
= form_tag(url_for({ controller: :carte, action: :save, dossier_id: @dossier.id }), class: 'form-inline', method: 'POST') do
|
|
||||||
%br
|
|
||||||
%input{ type: 'hidden', value: "#{@dossier.json_latlngs}", name: 'selection', data: { remote: true, url: users_dossier_carte_zones_path(@dossier), method: 'POST' } }
|
|
||||||
|
|
||||||
- if @dossier.brouillon?
|
|
||||||
= render partial: '/layouts/etape_suivante'
|
|
||||||
- else
|
|
||||||
= render partial: '/layouts/modifications_terminees'
|
|
|
@ -1,2 +0,0 @@
|
||||||
DS.cartoDrawZones(<%= raw(@data.to_json) %>);
|
|
||||||
<%= render_to_element('.zones', partial: 'zones', locals: { dossier: @dossier, error: @error }) %>
|
|
|
@ -1,80 +0,0 @@
|
||||||
namespace :after_party do
|
|
||||||
desc 'Deployment task: migrate_carto_to_carte'
|
|
||||||
task migrate_carto_to_carte: :environment do
|
|
||||||
def add_champ_carte_if_needed(procedure)
|
|
||||||
champ_carte = procedure.types_de_champ_ordered.to_a.find do |type_de_champ|
|
|
||||||
type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:carte)
|
|
||||||
end
|
|
||||||
|
|
||||||
if champ_carte
|
|
||||||
puts "Procedure##{procedure.id} already migrated to use champ carte"
|
|
||||||
else
|
|
||||||
add_champ_carte(procedure)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_champ_carte(procedure)
|
|
||||||
qp = !!procedure.module_api_carto.quartiers_prioritaires
|
|
||||||
ca = !!procedure.module_api_carto.cadastre
|
|
||||||
|
|
||||||
puts "Creating champ carte on Procedure##{procedure.id} with qp:#{qp} and ca:#{ca}..."
|
|
||||||
|
|
||||||
procedure.types_de_champ.update_all('order_place = order_place + 1')
|
|
||||||
type_de_champ = procedure.types_de_champ.create(
|
|
||||||
order_place: 0,
|
|
||||||
libelle: 'Cartographie',
|
|
||||||
type_champ: TypeDeChamp.type_champs.fetch(:carte),
|
|
||||||
quartiers_prioritaires: qp,
|
|
||||||
cadastres: ca,
|
|
||||||
mandatory: true
|
|
||||||
)
|
|
||||||
|
|
||||||
procedure.dossiers.each do |dossier|
|
|
||||||
champ = type_de_champ.champ.create(dossier: dossier, value: dossier.json_latlngs)
|
|
||||||
|
|
||||||
if ca && !dossier.cadastres.empty?
|
|
||||||
puts "Creating Cadastres on Dossier##{dossier.id}..."
|
|
||||||
dossier.cadastres.each do |cadastre|
|
|
||||||
champ.geo_areas.create(
|
|
||||||
source: GeoArea.sources.fetch(:cadastre),
|
|
||||||
geometry: cadastre.geometry,
|
|
||||||
surface_intersection: cadastre.surface_intersection,
|
|
||||||
surface_parcelle: cadastre.surface_parcelle,
|
|
||||||
numero: cadastre.numero,
|
|
||||||
feuille: cadastre.feuille,
|
|
||||||
section: cadastre.section,
|
|
||||||
code_dep: cadastre.code_dep,
|
|
||||||
nom_com: cadastre.nom_com,
|
|
||||||
code_com: cadastre.code_com,
|
|
||||||
code_arr: cadastre.code_arr
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if qp && !dossier.quartier_prioritaires.empty?
|
|
||||||
puts "Creating Quartiers Prioritaires on Dossier##{dossier.id}..."
|
|
||||||
dossier.quartier_prioritaires.each do |qp|
|
|
||||||
champ.geo_areas.create(
|
|
||||||
source: GeoArea.sources.fetch(:quartier_prioritaire),
|
|
||||||
geometry: qp.geometry,
|
|
||||||
code: qp.code,
|
|
||||||
nom: qp.nom,
|
|
||||||
commune: qp.commune
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
procedure.module_api_carto.update(migrated: true)
|
|
||||||
end
|
|
||||||
|
|
||||||
Procedure.includes(:types_de_champ, dossiers: [:cadastres, :quartier_prioritaires])
|
|
||||||
.joins(:module_api_carto)
|
|
||||||
.where(module_api_cartos: { use_api_carto: true, migrated: nil })
|
|
||||||
.find_each do |procedure|
|
|
||||||
add_champ_carte_if_needed(procedure)
|
|
||||||
end
|
|
||||||
|
|
||||||
AfterParty::TaskRecord.create version: '20181030155307'
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -12,9 +12,6 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
let(:organisation) { 'Organisation de test' }
|
let(:organisation) { 'Organisation de test' }
|
||||||
let(:direction) { 'Direction de test' }
|
let(:direction) { 'Direction de test' }
|
||||||
let(:cadre_juridique) { 'cadre juridique' }
|
let(:cadre_juridique) { 'cadre juridique' }
|
||||||
let(:use_api_carto) { '0' }
|
|
||||||
let(:quartiers_prioritaires) { '0' }
|
|
||||||
let(:cadastre) { '0' }
|
|
||||||
let(:duree_conservation_dossiers_dans_ds) { 3 }
|
let(:duree_conservation_dossiers_dans_ds) { 3 }
|
||||||
let(:duree_conservation_dossiers_hors_ds) { 6 }
|
let(:duree_conservation_dossiers_hors_ds) { 6 }
|
||||||
|
|
||||||
|
@ -27,12 +24,7 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
direction: direction,
|
direction: direction,
|
||||||
cadre_juridique: cadre_juridique,
|
cadre_juridique: cadre_juridique,
|
||||||
duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds,
|
duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds,
|
||||||
duree_conservation_dossiers_hors_ds: duree_conservation_dossiers_hors_ds,
|
duree_conservation_dossiers_hors_ds: duree_conservation_dossiers_hors_ds
|
||||||
module_api_carto_attributes: {
|
|
||||||
use_api_carto: use_api_carto,
|
|
||||||
quartiers_prioritaires: quartiers_prioritaires,
|
|
||||||
cadastre: cadastre
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,8 +247,6 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
let(:description) { 'blabla' }
|
let(:description) { 'blabla' }
|
||||||
let(:organisation) { 'plop' }
|
let(:organisation) { 'plop' }
|
||||||
let(:direction) { 'plap' }
|
let(:direction) { 'plap' }
|
||||||
let(:use_api_carto) { '1' }
|
|
||||||
let(:cadastre) { '1' }
|
|
||||||
let(:duree_conservation_dossiers_dans_ds) { 7 }
|
let(:duree_conservation_dossiers_dans_ds) { 7 }
|
||||||
let(:duree_conservation_dossiers_hors_ds) { 5 }
|
let(:duree_conservation_dossiers_hors_ds) { 5 }
|
||||||
|
|
||||||
|
@ -273,14 +263,6 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
it { expect(subject.duree_conservation_dossiers_hors_ds).to eq(duree_conservation_dossiers_hors_ds) }
|
it { expect(subject.duree_conservation_dossiers_hors_ds).to eq(duree_conservation_dossiers_hors_ds) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'procedure module api carto attributs in database' do
|
|
||||||
subject { procedure.module_api_carto }
|
|
||||||
|
|
||||||
it { expect(subject.use_api_carto).to be_truthy }
|
|
||||||
it { expect(subject.quartiers_prioritaires).to be_falsey }
|
|
||||||
it { expect(subject.cadastre).to be_truthy }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to redirect_to(edit_admin_procedure_path id: procedure.id) }
|
it { is_expected.to redirect_to(edit_admin_procedure_path id: procedure.id) }
|
||||||
it { expect(flash[:notice]).to be_present }
|
it { expect(flash[:notice]).to be_present }
|
||||||
end
|
end
|
||||||
|
@ -293,14 +275,6 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
describe 'flash message is present' do
|
describe 'flash message is present' do
|
||||||
it { expect(flash[:alert]).to be_present }
|
it { expect(flash[:alert]).to be_present }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'procedure module api carto attributs in database' do
|
|
||||||
subject { procedure.module_api_carto }
|
|
||||||
|
|
||||||
it { expect(subject.use_api_carto).to be_falsey }
|
|
||||||
it { expect(subject.quartiers_prioritaires).to be_falsey }
|
|
||||||
it { expect(subject.cadastre).to be_falsey }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when procedure is brouillon' do
|
context 'when procedure is brouillon' do
|
||||||
|
@ -334,7 +308,6 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
|
|
||||||
it { expect(subject.for_individual).not_to eq procedure_params[:for_individual] }
|
it { expect(subject.for_individual).not_to eq procedure_params[:for_individual] }
|
||||||
it { expect(subject.individual_with_siret).not_to eq procedure_params[:individual_with_siret] }
|
it { expect(subject.individual_with_siret).not_to eq procedure_params[:individual_with_siret] }
|
||||||
it { expect(subject.use_legacy_carto?).not_to eq procedure_params[:module_api_carto_attributes][:use_api_carto] }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
||||||
describe API::V1::DossiersController do
|
describe API::V1::DossiersController do
|
||||||
let(:admin) { create(:administrateur) }
|
let(:admin) { create(:administrateur) }
|
||||||
let(:token) { admin.renew_api_token }
|
let(:token) { admin.renew_api_token }
|
||||||
let(:procedure) { create(:procedure, :with_api_carto, :with_two_type_de_piece_justificative, :with_type_de_champ, :with_type_de_champ_private, administrateur: admin) }
|
let(:procedure) { create(:procedure, :with_two_type_de_piece_justificative, :with_type_de_champ, :with_type_de_champ_private, administrateur: admin) }
|
||||||
let(:wrong_procedure) { create(:procedure) }
|
let(:wrong_procedure) { create(:procedure) }
|
||||||
|
|
||||||
it { expect(described_class).to be < APIController }
|
it { expect(described_class).to be < APIController }
|
||||||
|
@ -253,46 +253,6 @@ describe API::V1::DossiersController do
|
||||||
it { expect(subject[:type_champ]).to eq('text') }
|
it { expect(subject[:type_champ]).to eq('text') }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the dossier includes a quartier prioritaire' do
|
|
||||||
before do
|
|
||||||
dossier.quartier_prioritaires << create(:quartier_prioritaire)
|
|
||||||
end
|
|
||||||
|
|
||||||
subject do
|
|
||||||
super().find { |champ| champ[:type_de_champ][:type_champ] == 'quartier_prioritaire' }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(subject[:type_de_champ]).to match({ id: -1, libelle: 'quartier prioritaire', type_champ: 'quartier_prioritaire', order_place: -1, descripton: '' }) }
|
|
||||||
it { expect(subject[:value]).to match(dossier.quartier_prioritaires.first.geometry.symbolize_keys) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when the dossier includes a cadastre' do
|
|
||||||
before do
|
|
||||||
dossier.cadastres << create(:cadastre)
|
|
||||||
end
|
|
||||||
|
|
||||||
subject do
|
|
||||||
super().find { |champ| champ[:type_de_champ][:type_champ] == 'cadastre' }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(subject[:type_de_champ]).to match({ id: -1, libelle: 'cadastre', type_champ: 'cadastre', order_place: -1, descripton: '' }) }
|
|
||||||
it { expect(subject[:value]).to match(dossier.cadastres.first.geometry.symbolize_keys) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when the dossier includes some user geometry' do
|
|
||||||
before do
|
|
||||||
dossier.json_latlngs = '[[{"lat": 2.0, "lng": 102.0}, {"lat": 3.0, "lng": 103.0}, {"lat": 2.0, "lng": 102.0}]]'
|
|
||||||
dossier.save
|
|
||||||
end
|
|
||||||
|
|
||||||
subject do
|
|
||||||
super().find { |champ| champ[:type_de_champ][:type_champ] == 'user_geometry' }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(subject[:type_de_champ]).to match({ id: -1, libelle: 'user geometry', type_champ: 'user_geometry', order_place: -1, descripton: '' }) }
|
|
||||||
it { expect(subject[:value]).to match(UserGeometry.new(dossier.json_latlngs).geometry) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'champs_private' do
|
describe 'champs_private' do
|
||||||
|
|
|
@ -25,8 +25,7 @@ describe API::V1::ProceduresController, type: :controller do
|
||||||
it { is_expected.to have_http_status(200) }
|
it { is_expected.to have_http_status(200) }
|
||||||
|
|
||||||
describe 'body' do
|
describe 'body' do
|
||||||
let(:module_api_carto) { create(:module_api_carto, use_api_carto: true, quartiers_prioritaires: true, cadastre: true) }
|
let(:procedure) { create(:procedure, :with_type_de_champ, :with_two_type_de_piece_justificative, administrateur: admin) }
|
||||||
let(:procedure) { create(:procedure, :with_type_de_champ, :with_two_type_de_piece_justificative, module_api_carto: module_api_carto, administrateur: admin) }
|
|
||||||
let(:response) { get :show, params: { id: procedure.id, token: token } }
|
let(:response) { get :show, params: { id: procedure.id, token: token } }
|
||||||
|
|
||||||
subject { JSON.parse(response.body, symbolize_names: true)[:procedure] }
|
subject { JSON.parse(response.body, symbolize_names: true)[:procedure] }
|
||||||
|
@ -65,16 +64,6 @@ describe API::V1::ProceduresController, type: :controller do
|
||||||
it { expect(subject[:libelle]).to eq(pj.libelle) }
|
it { expect(subject[:libelle]).to eq(pj.libelle) }
|
||||||
it { expect(subject[:description]).to eq(pj.description) }
|
it { expect(subject[:description]).to eq(pj.description) }
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to have_key(:geographic_information) }
|
|
||||||
|
|
||||||
describe 'geographic_information' do
|
|
||||||
subject { super()[:geographic_information] }
|
|
||||||
|
|
||||||
it { expect(subject[:use_api_carto]).to be_truthy }
|
|
||||||
it { expect(subject[:quartiers_prioritaires]).to be_truthy }
|
|
||||||
it { expect(subject[:cadastre]).to be_truthy }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -175,14 +175,6 @@ describe NewUser::DossiersController, type: :controller do
|
||||||
it do
|
it do
|
||||||
expect(response).to redirect_to(brouillon_dossier_path(dossier))
|
expect(response).to redirect_to(brouillon_dossier_path(dossier))
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'on a procedure with carto' do
|
|
||||||
let(:procedure) { create(:procedure, :for_individual, :with_api_carto) }
|
|
||||||
|
|
||||||
it do
|
|
||||||
expect(response).to redirect_to(users_dossier_carte_path(dossier))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the identite cannot be updated by the user' do
|
context 'when the identite cannot be updated by the user' do
|
||||||
|
|
|
@ -1,242 +0,0 @@
|
||||||
shared_examples 'carte_controller_spec' do
|
|
||||||
describe 'GET #show' do
|
|
||||||
describe 'before_action authorized_routes?' do
|
|
||||||
context 'when dossier’s procedure have api carto actived' do
|
|
||||||
context 'when dossier does not have a valid state' do
|
|
||||||
before do
|
|
||||||
dossier.state = Dossier.states.fetch(:en_instruction)
|
|
||||||
dossier.save
|
|
||||||
|
|
||||||
get :show, params: { dossier_id: dossier.id }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to redirect_to root_path }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier’s procedure does not have api carto actived' do
|
|
||||||
let(:dossier) { create(:dossier) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
get :show, params: { dossier_id: dossier.id }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to redirect_to(root_path) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'user is not connected' do
|
|
||||||
before do
|
|
||||||
sign_out user
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'redirects to users/sign_in' do
|
|
||||||
get :show, params: { dossier_id: dossier.id }
|
|
||||||
expect(response).to redirect_to('/users/sign_in')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http success if carto is activated' do
|
|
||||||
get :show, params: { dossier_id: dossier.id }
|
|
||||||
expect(response).to have_http_status(:success)
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when procedure not have activate api carto' do
|
|
||||||
it 'redirection on user dossier list' do
|
|
||||||
get :show, params: { dossier_id: dossier_with_no_carto.id }
|
|
||||||
expect(response).to redirect_to(root_path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier id not exist' do
|
|
||||||
it 'redirection on user dossier list' do
|
|
||||||
get :show, params: { dossier_id: bad_dossier_id }
|
|
||||||
expect(response).to redirect_to(root_path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like "not owner of dossier", :show
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'POST #save' do
|
|
||||||
context 'it cleans json_latlngs' do
|
|
||||||
let(:dossier) { create(:dossier, state: Dossier.states.fetch(:en_construction)) }
|
|
||||||
let(:json_latlngs) { multipolygon.to_json }
|
|
||||||
|
|
||||||
before do
|
|
||||||
post :save, params: { dossier_id: dossier.id, selection: json_latlngs }
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs is invalid' do
|
|
||||||
let(:multipolygon) do
|
|
||||||
[
|
|
||||||
[
|
|
||||||
{ lat: 1, lng: 1 },
|
|
||||||
{ lat: 1, lng: 2 },
|
|
||||||
{ lat: 1, lng: 1 }
|
|
||||||
]
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(dossier.json_latlngs).to be_nil }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs is valid' do
|
|
||||||
let(:multipolygon) do
|
|
||||||
[
|
|
||||||
[
|
|
||||||
{ lat: 1, lng: 1 },
|
|
||||||
{ lat: 1, lng: 2 },
|
|
||||||
{ lat: 2, lng: 2 },
|
|
||||||
{ lat: 1, lng: 1 }
|
|
||||||
]
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
it { expect(dossier.json_latlngs).to eq(json_latlngs) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'En train de modifier la localisation' do
|
|
||||||
let(:dossier) { create(:dossier, state: Dossier.states.fetch(:en_construction)) }
|
|
||||||
before do
|
|
||||||
post :save, params: { dossier_id: dossier.id, selection: '' }
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'Redirection vers le formulaire de la procedure' do
|
|
||||||
expect(response).to redirect_to(brouillon_dossier_path(dossier))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'Save quartier prioritaire' do
|
|
||||||
let(:module_api_carto) { create(:module_api_carto, :with_quartiers_prioritaires) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
allow_any_instance_of(ApiCarto::QuartiersPrioritairesAdapter)
|
|
||||||
.to receive(:results)
|
|
||||||
.and_return([{ :code => "QPCODE1234", :nom => "QP de test", :commune => "Paris", :geometry => { :type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]] } }])
|
|
||||||
|
|
||||||
post :save, params: { dossier_id: dossier.id, selection: json_latlngs }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs params is empty' do
|
|
||||||
context 'when dossier have quartier prioritaire in database' do
|
|
||||||
let!(:dossier) { create(:dossier, :with_two_quartier_prioritaires) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when value is empty' do
|
|
||||||
let(:json_latlngs) { '' }
|
|
||||||
it { expect(dossier.quartier_prioritaires.size).to eq(0) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when value is empty array' do
|
|
||||||
let(:json_latlngs) { '[]' }
|
|
||||||
it { expect(dossier.quartier_prioritaires.size).to eq(0) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs params is informed' do
|
|
||||||
let(:json_latlngs) { '[[{"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}]]' }
|
|
||||||
|
|
||||||
it { expect(dossier.quartier_prioritaires.size).to eq(1) }
|
|
||||||
|
|
||||||
describe 'Quartier Prioritaire' do
|
|
||||||
subject { QuartierPrioritaire.last }
|
|
||||||
|
|
||||||
it { expect(subject.code).to eq('QPCODE1234') }
|
|
||||||
it { expect(subject.commune).to eq('Paris') }
|
|
||||||
it { expect(subject.nom).to eq('QP de test') }
|
|
||||||
it { expect(subject.dossier_id).to eq(dossier.id) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'Save cadastre' do
|
|
||||||
let(:module_api_carto) { create(:module_api_carto, :with_cadastre) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
allow_any_instance_of(ApiCarto::CadastreAdapter)
|
|
||||||
.to receive(:results)
|
|
||||||
.and_return([{ :surface_intersection => "0.0006", :surface_parcelle => 11252.692583090324, :numero => "0013", :feuille => 1, :section => "CD", :code_dep => "30", :nom_com => "Le Grau-du-Roi", :code_com => "133", :code_arr => "000", :geometry => { :type => "MultiPolygon", :coordinates => [[[[4.134084, 43.5209193], [4.1346615, 43.5212035], [4.1346984, 43.521189], [4.135096, 43.5213848], [4.1350839, 43.5214122], [4.1352697, 43.521505], [4.1356278, 43.5211065], [4.1357402, 43.5207188], [4.1350935, 43.5203936], [4.135002, 43.5204366], [4.1346051, 43.5202412], [4.134584, 43.5202472], [4.1345572, 43.5202551], [4.134356, 43.5203137], [4.1342488, 43.5203448], [4.134084, 43.5209193]]]] } }])
|
|
||||||
|
|
||||||
post :save, params: { dossier_id: dossier.id, selection: json_latlngs }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs params is empty' do
|
|
||||||
context 'when dossier have cadastres in database' do
|
|
||||||
let!(:dossier) { create(:dossier, :with_two_cadastres) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when value is empty' do
|
|
||||||
let(:json_latlngs) { '' }
|
|
||||||
it { expect(dossier.cadastres.size).to eq(0) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when value is empty array' do
|
|
||||||
let(:json_latlngs) { '[]' }
|
|
||||||
it { expect(dossier.cadastres.size).to eq(0) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when json_latlngs params is informed' do
|
|
||||||
let(:json_latlngs) { '[[{"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}]]' }
|
|
||||||
|
|
||||||
it { expect(dossier.cadastres.size).to eq(1) }
|
|
||||||
|
|
||||||
describe 'Cadastre' do
|
|
||||||
subject { Cadastre.last }
|
|
||||||
|
|
||||||
it { expect(subject.surface_intersection).to eq('0.0006') }
|
|
||||||
it { expect(subject.surface_parcelle).to eq(11252.6925830903) }
|
|
||||||
it { expect(subject.numero).to eq('0013') }
|
|
||||||
it { expect(subject.feuille).to eq(1) }
|
|
||||||
it { expect(subject.section).to eq('CD') }
|
|
||||||
it { expect(subject.code_dep).to eq('30') }
|
|
||||||
it { expect(subject.nom_com).to eq('Le Grau-du-Roi') }
|
|
||||||
it { expect(subject.code_com).to eq('133') }
|
|
||||||
it { expect(subject.code_arr).to eq('000') }
|
|
||||||
it { expect(subject.geometry).to eq({ "type" => "MultiPolygon", "coordinates" => [[[[4.134084, 43.5209193], [4.1346615, 43.5212035], [4.1346984, 43.521189], [4.135096, 43.5213848], [4.1350839, 43.5214122], [4.1352697, 43.521505], [4.1356278, 43.5211065], [4.1357402, 43.5207188], [4.1350935, 43.5203936], [4.135002, 43.5204366], [4.1346051, 43.5202412], [4.134584, 43.5202472], [4.1345572, 43.5202551], [4.134356, 43.5203137], [4.1342488, 43.5203448], [4.134084, 43.5209193]]]] }) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'POST #zones' do
|
|
||||||
let(:module_api_carto) { create(:module_api_carto, :with_quartiers_prioritaires) }
|
|
||||||
render_views
|
|
||||||
|
|
||||||
before do
|
|
||||||
allow_any_instance_of(ApiCarto::QuartiersPrioritairesAdapter)
|
|
||||||
.to receive(:results)
|
|
||||||
.and_return([{ :code => "QPCODE1234", :geometry => { :type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]] } }])
|
|
||||||
|
|
||||||
post :zones, params: { dossier_id: dossier.id, selection: json_latlngs.to_json }, format: 'js'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when coordinates are empty' do
|
|
||||||
let(:json_latlngs) { [] }
|
|
||||||
|
|
||||||
it 'Quartier Prioritaire Adapter does not call' do
|
|
||||||
expect(response.body).to include("DS.cartoDrawZones({\"quartiersPrioritaires\":[]});")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when coordinates are informed' do
|
|
||||||
let(:json_latlngs) { [[{ "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 }]] }
|
|
||||||
|
|
||||||
it { expect(response.body).not_to be_nil }
|
|
||||||
it { expect(response.body).to include('QPCODE1234') }
|
|
||||||
it { expect(response.body).to include('MultiPolygon') }
|
|
||||||
it { expect(response.body).to include('[2.38715792094576,48.8723062632126]') }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,36 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'controllers/users/carte_controller_shared_example'
|
|
||||||
|
|
||||||
RSpec.describe Users::CarteController, type: :controller do
|
|
||||||
let(:bad_adresse) { 'babouba' }
|
|
||||||
|
|
||||||
let(:module_api_carto) { create(:module_api_carto, :with_api_carto) }
|
|
||||||
let(:procedure) { create(:procedure, module_api_carto: module_api_carto) }
|
|
||||||
let(:dossier) { create(:dossier, procedure: procedure) }
|
|
||||||
|
|
||||||
let(:owner_user) { dossier.user }
|
|
||||||
let(:invite_by_user) { create :user, email: 'invite@plop.com' }
|
|
||||||
|
|
||||||
let(:dossier_with_no_carto) { create(:dossier) }
|
|
||||||
let!(:etablissement) { create(:etablissement, dossier: dossier) }
|
|
||||||
let(:bad_dossier_id) { Dossier.count + 1000 }
|
|
||||||
let(:adresse) { etablissement.geo_adresse }
|
|
||||||
|
|
||||||
before do
|
|
||||||
create :invite, dossier: dossier, user: invite_by_user, email: invite_by_user.email
|
|
||||||
|
|
||||||
sign_in user
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when sign in user is the owner' do
|
|
||||||
let(:user) { owner_user }
|
|
||||||
|
|
||||||
it_should_behave_like "carte_controller_spec"
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when sign in user is an invite by owner' do
|
|
||||||
let(:user) { invite_by_user }
|
|
||||||
|
|
||||||
it_should_behave_like "carte_controller_spec"
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,43 +0,0 @@
|
||||||
shared_examples 'current_user_dossier_spec' do
|
|
||||||
context 'when no dossier_id is filled' do
|
|
||||||
it { expect { subject.current_user_dossier }.to raise_error ActiveRecord::RecordNotFound }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier_id is given as a param' do
|
|
||||||
context 'when dossier id is valid' do
|
|
||||||
it 'returns current user dossier' do
|
|
||||||
expect(subject.current_user_dossier dossier.id).to eq(dossier)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier id is incorrect' do
|
|
||||||
it { expect { subject.current_user_dossier 666 }.to raise_error ActiveRecord::RecordNotFound }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when no params[] is given' do
|
|
||||||
context 'when dossier id is valid' do
|
|
||||||
before do
|
|
||||||
subject.params[:dossier_id] = dossier.id
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns current user dossier' do
|
|
||||||
expect(subject.current_user_dossier).to eq(dossier)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier id is incorrect' do
|
|
||||||
it { expect { subject.current_user_dossier }.to raise_error ActiveRecord::RecordNotFound }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when dossier_id is given as a param' do
|
|
||||||
before do
|
|
||||||
subject.params[:dossier_id] = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns dossier with the id on params past' do
|
|
||||||
expect(subject.current_user_dossier dossier.id).to eq(dossier)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,30 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
require 'controllers/users_controller_shared_example'
|
|
||||||
|
|
||||||
describe UsersController, type: :controller do
|
|
||||||
describe '#current_user_dossier' do
|
|
||||||
let(:owner_user) { create(:user) }
|
|
||||||
let(:invite_user) { create :user, email: 'invite@plop.com' }
|
|
||||||
let(:not_invite_user) { create :user, email: 'not_invite@plop.com' }
|
|
||||||
|
|
||||||
let(:dossier) { create(:dossier, user: owner_user) }
|
|
||||||
|
|
||||||
context 'when user is the owner' do
|
|
||||||
before do
|
|
||||||
sign_in owner_user
|
|
||||||
end
|
|
||||||
|
|
||||||
it_should_behave_like "current_user_dossier_spec"
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user is invite by the owner' do
|
|
||||||
before do
|
|
||||||
create :invite, email: invite_user.email, dossier: dossier, user: invite_user
|
|
||||||
sign_in invite_user
|
|
||||||
end
|
|
||||||
|
|
||||||
it_should_behave_like "current_user_dossier_spec"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,8 +0,0 @@
|
||||||
FactoryBot.define do
|
|
||||||
factory :cadastre do
|
|
||||||
numero { '001' }
|
|
||||||
feuille { 1 }
|
|
||||||
section { 'OM' }
|
|
||||||
geometry { '{"type": "MultiPolygon", "coordinates": [[[[2.37112834276229, 48.8773116214902], [2.37163254350824, 48.8775780792784], [2.37112834276229, 48.8773116214902]]]]}' }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -31,20 +31,6 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
trait :with_two_quartier_prioritaires do
|
|
||||||
after(:build) do |dossier, _evaluator|
|
|
||||||
dossier.quartier_prioritaires << create(:quartier_prioritaire)
|
|
||||||
dossier.quartier_prioritaires << create(:quartier_prioritaire)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :with_two_cadastres do
|
|
||||||
after(:build) do |dossier, _evaluator|
|
|
||||||
dossier.cadastres << create(:cadastre)
|
|
||||||
dossier.cadastres << create(:cadastre)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :archived do
|
trait :archived do
|
||||||
archived { true }
|
archived { true }
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
FactoryBot.define do
|
|
||||||
factory :module_api_carto do
|
|
||||||
use_api_carto { false }
|
|
||||||
quartiers_prioritaires { false }
|
|
||||||
cadastre { false }
|
|
||||||
|
|
||||||
trait :with_api_carto do
|
|
||||||
use_api_carto { true }
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :with_quartiers_prioritaires do
|
|
||||||
use_api_carto { true }
|
|
||||||
quartiers_prioritaires { true }
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :with_cadastre do
|
|
||||||
use_api_carto { true }
|
|
||||||
cadastre { true }
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :with_qp_and_cadastre do
|
|
||||||
use_api_carto { true }
|
|
||||||
quartiers_prioritaires { true }
|
|
||||||
cadastre { true }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -29,13 +29,6 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
after(:build) do |procedure, _evaluator|
|
|
||||||
if procedure.module_api_carto.nil?
|
|
||||||
module_api_carto = create(:module_api_carto)
|
|
||||||
procedure.module_api_carto = module_api_carto
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :with_path do
|
trait :with_path do
|
||||||
path { generate(:published_path) }
|
path { generate(:published_path) }
|
||||||
end
|
end
|
||||||
|
@ -52,12 +45,6 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
trait :with_api_carto do
|
|
||||||
after(:build) do |procedure, _evaluator|
|
|
||||||
procedure.module_api_carto.use_api_carto = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
trait :for_individual do
|
trait :for_individual do
|
||||||
after(:build) do |procedure, _evaluator|
|
after(:build) do |procedure, _evaluator|
|
||||||
procedure.for_individual = true
|
procedure.for_individual = true
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
FactoryBot.define do
|
|
||||||
factory :quartier_prioritaire do
|
|
||||||
code { 'QPcode' }
|
|
||||||
commune { 'Paris' }
|
|
||||||
nom { 'Test des QP' }
|
|
||||||
geometry { '{"type": "MultiPolygon", "coordinates": [[[[2.37112834276229, 48.8773116214902], [2.37163254350824, 48.8775780792784], [2.37112834276229, 48.8773116214902]]]]}' }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -11,7 +11,7 @@ feature 'Creating a new dossier:' do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the procedure has identification by individual' do
|
context 'when the procedure has identification by individual' do
|
||||||
let(:procedure) { create(:procedure, :published, :for_individual, :with_api_carto, :with_type_de_champ, :with_two_type_de_piece_justificative, ask_birthday: ask_birthday) }
|
let(:procedure) { create(:procedure, :published, :for_individual, :with_type_de_champ, :with_two_type_de_piece_justificative, ask_birthday: ask_birthday) }
|
||||||
let(:ask_birthday) { false }
|
let(:ask_birthday) { false }
|
||||||
let(:expected_birthday) { nil }
|
let(:expected_birthday) { nil }
|
||||||
|
|
||||||
|
@ -25,9 +25,6 @@ feature 'Creating a new dossier:' do
|
||||||
it do
|
it do
|
||||||
click_button('Continuer')
|
click_button('Continuer')
|
||||||
|
|
||||||
expect(page).to have_current_path(users_dossier_carte_path(procedure.dossiers.last.id))
|
|
||||||
click_button('Etape suivante')
|
|
||||||
|
|
||||||
expect(page).to have_current_path(brouillon_dossier_path(procedure.dossiers.last))
|
expect(page).to have_current_path(brouillon_dossier_path(procedure.dossiers.last))
|
||||||
|
|
||||||
expect(user.dossiers.first.individual.birthdate).to eq(expected_birthday)
|
expect(user.dossiers.first.individual.birthdate).to eq(expected_birthday)
|
||||||
|
@ -61,7 +58,7 @@ feature 'Creating a new dossier:' do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when identifying through SIRET' do
|
context 'when identifying through SIRET' do
|
||||||
let(:procedure) { create(:procedure, :published, :with_api_carto, :with_type_de_champ, :with_two_type_de_piece_justificative) }
|
let(:procedure) { create(:procedure, :published, :with_type_de_champ, :with_two_type_de_piece_justificative) }
|
||||||
let(:dossier) { procedure.dossiers.last }
|
let(:dossier) { procedure.dossiers.last }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -86,9 +83,6 @@ feature 'Creating a new dossier:' do
|
||||||
expect(page).to have_content('OCTO-TECHNOLOGY')
|
expect(page).to have_content('OCTO-TECHNOLOGY')
|
||||||
click_on 'Continuer avec ces informations'
|
click_on 'Continuer avec ces informations'
|
||||||
|
|
||||||
expect(page).to have_current_path(users_dossier_carte_path(dossier))
|
|
||||||
click_button('Etape suivante')
|
|
||||||
|
|
||||||
expect(page).to have_current_path(brouillon_dossier_path(dossier))
|
expect(page).to have_current_path(brouillon_dossier_path(dossier))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
feature 'drawing a zone with freedraw' do
|
|
||||||
let(:user) { create(:user) }
|
|
||||||
let(:module_api_carto) { create(:module_api_carto, :with_api_carto) }
|
|
||||||
let(:procedure) { create(:procedure, module_api_carto: module_api_carto) }
|
|
||||||
let(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, user: user) }
|
|
||||||
|
|
||||||
context 'when user is not logged in' do
|
|
||||||
before do
|
|
||||||
visit users_dossier_carte_path dossier_id: dossier.id
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'he is redirected to login page' do
|
|
||||||
expect(page).to have_css('#new_user')
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'he logs in and he is redirected to carte page', vcr: { cassette_name: 'drawing_a_zone_with_freedraw_redirected_to_carte_page' } do
|
|
||||||
within('#new_user') do
|
|
||||||
page.find_by_id('user_email').set user.email
|
|
||||||
page.find_by_id('user_password').set user.password
|
|
||||||
page.click_on 'Se connecter'
|
|
||||||
end
|
|
||||||
expect(page).to have_css('.content #map')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when user is logged in' do
|
|
||||||
before do
|
|
||||||
login_as user, scope: :user
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when he is visiting the map page' do
|
|
||||||
before do
|
|
||||||
visit users_dossier_carte_path dossier_id: dossier.id
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when procedure have api carto activated' do
|
|
||||||
scenario 'he is redirected to carte page', vcr: { cassette_name: 'drawing_a_zone_with_freedraw_redirected_to_carte_page' } do
|
|
||||||
expect(page).to have_css('.content #map')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when procedure does not have api carto activated' do
|
|
||||||
let(:module_api_carto) { create(:module_api_carto) }
|
|
||||||
|
|
||||||
scenario 'he is redirect to user dossiers index' do
|
|
||||||
expect(page).to have_css('.dossiers-table')
|
|
||||||
end
|
|
||||||
|
|
||||||
scenario 'alert message is present' do
|
|
||||||
expect(page).to have_content('Le statut de votre dossier n\'autorise pas cette URL')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,39 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe '2018_10_30_migrate_carto_to_carte' do
|
|
||||||
let(:rake_task) { Rake::Task['after_party:migrate_carto_to_carte'] }
|
|
||||||
let(:procedure) { create(:procedure, :published, :with_api_carto) }
|
|
||||||
let(:dossier) { create(:dossier, :with_two_quartier_prioritaires, :with_two_cadastres) }
|
|
||||||
|
|
||||||
def run_task
|
|
||||||
procedure.module_api_carto.quartiers_prioritaires = true
|
|
||||||
procedure.module_api_carto.cadastre = true
|
|
||||||
procedure.module_api_carto.save
|
|
||||||
procedure.dossiers << dossier
|
|
||||||
|
|
||||||
rake_task.invoke
|
|
||||||
procedure.reload
|
|
||||||
dossier.reload
|
|
||||||
end
|
|
||||||
|
|
||||||
after { rake_task.reenable }
|
|
||||||
|
|
||||||
context 'on happy path' do
|
|
||||||
before do
|
|
||||||
run_task
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
expect(procedure.module_api_carto.migrated?).to be_truthy
|
|
||||||
expect(dossier.cadastres.count).to eq(2)
|
|
||||||
expect(dossier.quartier_prioritaires.count).to eq(2)
|
|
||||||
expect(dossier.champs.first.type_champ).to eq('carte')
|
|
||||||
expect(dossier.champs.first.order_place).to eq(0)
|
|
||||||
expect(dossier.champs.first.libelle).to eq('Cartographie')
|
|
||||||
expect(dossier.champs.first.geo_areas.count).to eq(4)
|
|
||||||
expect(dossier.champs.first.mandatory?).to be_truthy
|
|
||||||
expect(dossier.champs.first.cadastres?).to be_truthy
|
|
||||||
expect(dossier.champs.first.quartiers_prioritaires?).to be_truthy
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -34,7 +34,7 @@ RSpec.describe NotificationMailer, type: :mailer do
|
||||||
|
|
||||||
it { expect(mail.subject).to eq(email_template.subject_for_dossier) }
|
it { expect(mail.subject).to eq(email_template.subject_for_dossier) }
|
||||||
it { expect(mail.body).to include(email_template.body_for_dossier) }
|
it { expect(mail.body).to include(email_template.body_for_dossier) }
|
||||||
it { expect(mail.body).to have_selector('.footer') }
|
it { expect(mail.body).to have_selector('footer') }
|
||||||
|
|
||||||
it_behaves_like "create a commentaire not notified"
|
it_behaves_like "create a commentaire not notified"
|
||||||
end
|
end
|
||||||
|
@ -50,7 +50,7 @@ RSpec.describe NotificationMailer, type: :mailer do
|
||||||
it do
|
it do
|
||||||
expect(mail.subject).to eq(email_template.subject)
|
expect(mail.subject).to eq(email_template.subject)
|
||||||
expect(mail.body).to include(email_template.body)
|
expect(mail.body).to include(email_template.body)
|
||||||
expect(mail.body).to have_selector('.footer')
|
expect(mail.body).to have_selector('footer')
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like "create a commentaire not notified"
|
it_behaves_like "create a commentaire not notified"
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe Cadastre do
|
|
||||||
it { is_expected.to have_db_column(:surface_intersection) }
|
|
||||||
it { is_expected.to have_db_column(:surface_parcelle) }
|
|
||||||
it { is_expected.to have_db_column(:numero) }
|
|
||||||
it { is_expected.to have_db_column(:feuille) }
|
|
||||||
it { is_expected.to have_db_column(:section) }
|
|
||||||
it { is_expected.to have_db_column(:code_dep) }
|
|
||||||
it { is_expected.to have_db_column(:nom_com) }
|
|
||||||
it { is_expected.to have_db_column(:code_com) }
|
|
||||||
it { is_expected.to have_db_column(:code_arr) }
|
|
||||||
it { is_expected.to have_db_column(:geometry) }
|
|
||||||
|
|
||||||
it { is_expected.to belong_to(:dossier) }
|
|
||||||
end
|
|
|
@ -754,18 +754,6 @@ describe Dossier do
|
||||||
it { is_expected.to eq(modif_date) }
|
it { is_expected.to eq(modif_date) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a quartier_prioritaire is modified' do
|
|
||||||
before { dossier.quartier_prioritaires << create(:quartier_prioritaire) }
|
|
||||||
|
|
||||||
it { is_expected.to eq(modif_date) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when a cadastre is modified' do
|
|
||||||
before { dossier.cadastres << create(:cadastre) }
|
|
||||||
|
|
||||||
it { is_expected.to eq(modif_date) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when a commentaire is modified' do
|
context 'when a commentaire is modified' do
|
||||||
before { dossier.commentaires << create(:commentaire) }
|
before { dossier.commentaires << create(:commentaire) }
|
||||||
|
|
||||||
|
@ -802,51 +790,6 @@ describe Dossier do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'geometry' do
|
|
||||||
let(:dossier) { create(:dossier, json_latlngs: json_latlngs) }
|
|
||||||
let(:json_latlngs) { nil }
|
|
||||||
|
|
||||||
subject{ dossier.user_geometry }
|
|
||||||
|
|
||||||
context 'when there are no map' do
|
|
||||||
it { is_expected.to eq(nil) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when there are 2 polygones' do
|
|
||||||
let(:json_latlngs) do
|
|
||||||
'[[{"lat": 2.0, "lng": 102.0}, {"lat": 3.0, "lng": 103.0}, {"lat": 2.0, "lng": 102.0}],
|
|
||||||
[{"lat": 2.0, "lng": 102.0}, {"lat": 3.0, "lng": 103.0}, {"lat": 2.0, "lng": 102.0}]]'
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:expected) do
|
|
||||||
{
|
|
||||||
"type": "MultiPolygon",
|
|
||||||
"coordinates":
|
|
||||||
[
|
|
||||||
[
|
|
||||||
[
|
|
||||||
[102.0, 2.0],
|
|
||||||
[103.0, 3.0],
|
|
||||||
[102.0, 2.0]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
[
|
|
||||||
[102.0, 2.0],
|
|
||||||
[103.0, 3.0],
|
|
||||||
[102.0, 2.0]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
subject{ dossier.user_geometry.geometry }
|
|
||||||
|
|
||||||
it { is_expected.to eq(expected) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#delete_and_keep_track" do
|
describe "#delete_and_keep_track" do
|
||||||
let(:dossier) { create(:dossier) }
|
let(:dossier) { create(:dossier) }
|
||||||
let(:deleted_dossier) { DeletedDossier.find_by!(dossier_id: dossier.id) }
|
let(:deleted_dossier) { DeletedDossier.find_by!(dossier_id: dossier.id) }
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe ModuleAPICarto do
|
|
||||||
describe 'assocations' do
|
|
||||||
it { is_expected.to belong_to(:procedure) }
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'attributes' do
|
|
||||||
it { is_expected.to have_db_column(:use_api_carto) }
|
|
||||||
it { is_expected.to have_db_column(:quartiers_prioritaires) }
|
|
||||||
it { is_expected.to have_db_column(:cadastre) }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -357,7 +357,6 @@ describe Procedure do
|
||||||
|
|
||||||
it 'should duplicate specific objects with different id' do
|
it 'should duplicate specific objects with different id' do
|
||||||
expect(subject.id).not_to eq(procedure.id)
|
expect(subject.id).not_to eq(procedure.id)
|
||||||
expect(subject.module_api_carto).to have_same_attributes_as(procedure.module_api_carto)
|
|
||||||
|
|
||||||
expect(subject.types_de_piece_justificative.size).to eq procedure.types_de_piece_justificative.size
|
expect(subject.types_de_piece_justificative.size).to eq procedure.types_de_piece_justificative.size
|
||||||
expect(subject.types_de_champ.size).to eq procedure.types_de_champ.size
|
expect(subject.types_de_champ.size).to eq procedure.types_de_champ.size
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe QuartierPrioritaire do
|
|
||||||
it { is_expected.to have_db_column(:code) }
|
|
||||||
it { is_expected.to have_db_column(:nom) }
|
|
||||||
it { is_expected.to have_db_column(:commune) }
|
|
||||||
it { is_expected.to have_db_column(:geometry) }
|
|
||||||
|
|
||||||
it { is_expected.to belong_to(:dossier) }
|
|
||||||
|
|
||||||
describe 'geometry' do
|
|
||||||
let(:qp) { create :quartier_prioritaire, geometry: qp_geometry }
|
|
||||||
let(:qp_geometry) { File.open('spec/fixtures/files/qp_geometry_value.txt').read }
|
|
||||||
|
|
||||||
subject { qp.geometry }
|
|
||||||
|
|
||||||
it { is_expected.to eq JSON.parse(qp_geometry) }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -18,7 +18,7 @@ describe DossierSerializer do
|
||||||
context 'champs' do
|
context 'champs' do
|
||||||
subject { super()[:champs] }
|
subject { super()[:champs] }
|
||||||
|
|
||||||
let(:dossier) { create(:dossier, :en_construction, :with_two_quartier_prioritaires, procedure: create(:procedure, :published, :with_api_carto, :with_type_de_champ)) }
|
let(:dossier) { create(:dossier, :en_construction, procedure: create(:procedure, :published, :with_type_de_champ)) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
dossier.champs << create(:champ_carte)
|
dossier.champs << create(:champ_carte)
|
||||||
|
@ -29,12 +29,11 @@ describe DossierSerializer do
|
||||||
end
|
end
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(subject.size).to eq(8)
|
expect(subject.size).to eq(6)
|
||||||
|
|
||||||
expect(subject[0][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:text))
|
expect(subject[0][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:text))
|
||||||
expect(subject[1][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:carte))
|
expect(subject[1][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:carte))
|
||||||
expect(subject[2][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:siret))
|
expect(subject[2][:type_de_champ][:type_champ]).to eq(TypeDeChamp.type_champs.fetch(:siret))
|
||||||
expect(subject[7][:type_de_champ][:type_champ]).to eq('quartier_prioritaire')
|
|
||||||
|
|
||||||
expect(subject[1][:geo_areas].size).to eq(0)
|
expect(subject[1][:geo_areas].size).to eq(0)
|
||||||
expect(subject[2][:etablissement]).to be_present
|
expect(subject[2][:etablissement]).to be_present
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe UserRoutesAuthorizationService do
|
|
||||||
describe '#authorize_route?' do
|
|
||||||
let(:module_api_carto) { create :module_api_carto, use_api_carto: use_api_carto }
|
|
||||||
let(:procedure) { create :procedure, module_api_carto: module_api_carto }
|
|
||||||
let(:dossier) { create :dossier, procedure: procedure, state: state }
|
|
||||||
|
|
||||||
let(:use_api_carto) { false }
|
|
||||||
|
|
||||||
subject { described_class.authorized_route? controller, dossier }
|
|
||||||
|
|
||||||
describe 'carte' do
|
|
||||||
let(:controller) { Users::CarteController }
|
|
||||||
|
|
||||||
context 'when use_api_carto is false' do
|
|
||||||
describe 'brouillon' do
|
|
||||||
let(:state) { Dossier.states.fetch(:brouillon) }
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'en_construction' do
|
|
||||||
let(:state) { Dossier.states.fetch(:en_construction) }
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'accepte' do
|
|
||||||
let(:state) { Dossier.states.fetch(:accepte) }
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when use_api_carto is true' do
|
|
||||||
let(:use_api_carto) { true }
|
|
||||||
|
|
||||||
describe 'brouillon' do
|
|
||||||
let(:state) { Dossier.states.fetch(:brouillon) }
|
|
||||||
it { is_expected.to be_truthy }
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'en_construction' do
|
|
||||||
let(:state) { Dossier.states.fetch(:en_construction) }
|
|
||||||
it { is_expected.to be_truthy }
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'accepte' do
|
|
||||||
let(:state) { Dossier.states.fetch(:accepte) }
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe 'new_user/dossiers/brouillon.html.haml', type: :view do
|
describe 'new_user/dossiers/brouillon.html.haml', type: :view do
|
||||||
let(:procedure) { create(:procedure, :with_api_carto, :with_two_type_de_piece_justificative, :with_notice, for_individual: true) }
|
let(:procedure) { create(:procedure, :with_two_type_de_piece_justificative, :with_notice, for_individual: true) }
|
||||||
let(:dossier) { create(:dossier, :with_entreprise, :with_service, state: Dossier.states.fetch(:brouillon), procedure: procedure) }
|
let(:dossier) { create(:dossier, :with_entreprise, :with_service, state: Dossier.states.fetch(:brouillon), procedure: procedure) }
|
||||||
let(:footer) { view.content_for(:footer) }
|
let(:footer) { view.content_for(:footer) }
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe 'new_user/dossiers/identite.html.haml', type: :view do
|
describe 'new_user/dossiers/identite.html.haml', type: :view do
|
||||||
let(:dossier) { create(:dossier, :with_entreprise, :with_service, state: Dossier.states.fetch(:brouillon), procedure: create(:procedure, :with_api_carto, :with_two_type_de_piece_justificative, for_individual: true)) }
|
let(:dossier) { create(:dossier, :with_entreprise, :with_service, state: Dossier.states.fetch(:brouillon), procedure: create(:procedure, :with_two_type_de_piece_justificative, for_individual: true)) }
|
||||||
let(:footer) { view.content_for(:footer) }
|
let(:footer) { view.content_for(:footer) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -59,12 +59,4 @@ describe 'shared/dossiers/demande.html.haml', type: :view do
|
||||||
expect(rendered).to have_text('Pièces jointes')
|
expect(rendered).to have_text('Pièces jointes')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the dossier uses maps' do
|
|
||||||
let(:procedure) { create(:procedure, :published, :with_api_carto) }
|
|
||||||
|
|
||||||
it 'renders the maps infos' do
|
|
||||||
expect(rendered).to have_text('Cartographie')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe 'shared/dossiers/map.html.haml', type: :view do
|
|
||||||
subject do
|
|
||||||
render(partial: 'shared/dossiers/map.html.haml', locals: { dossier: dossier })
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "javascript variables printing" do
|
|
||||||
let(:dossier) { create(:dossier, json_latlngs: json_latlngs) }
|
|
||||||
|
|
||||||
context 'with a correct json' do
|
|
||||||
let(:json_latlngs) { "[[{\"lat\":50.659255436656736,\"lng\":3.080635070800781},{\"lat\":50.659255436656736,\"lng\":3.079690933227539},{\"lat\":50.659962770886516,\"lng\":3.0800342559814453},{\"lat\":50.659962770886516,\"lng\":3.0811500549316406},{\"lat\":50.659255436656736,\"lng\":3.080635070800781}]]" }
|
|
||||||
|
|
||||||
before { subject }
|
|
||||||
|
|
||||||
it { expect(rendered).to have_content('selection: [[{"lat":50.659255436656736,"lng":3.080635070800781},{"lat":50.659255436656736,"lng":3.079690933227539},{"lat":50.659962770886516,"lng":3.0800342559814453},{"lat":50.659962770886516,"lng":3.0811500549316406},{"lat":50.659255436656736,"lng":3.080635070800781}]],') }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'without a correct json' do
|
|
||||||
let(:json_latlngs) { "dossier" }
|
|
||||||
|
|
||||||
before { subject }
|
|
||||||
|
|
||||||
it { expect(rendered).to have_content('selection: {},') }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,60 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe 'users/carte/show.html.haml', type: :view do
|
|
||||||
let(:state) { Dossier.states.fetch(:brouillon) }
|
|
||||||
let(:dossier) { create(:dossier, state: state) }
|
|
||||||
let(:dossier_id) { dossier.id }
|
|
||||||
|
|
||||||
before do
|
|
||||||
assign(:dossier, dossier)
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'sur la page de la carte d\'une demande' do
|
|
||||||
before do
|
|
||||||
render
|
|
||||||
end
|
|
||||||
it 'le formulaire envoie vers /users/dossiers/:dossier_id/carte en #POST' do
|
|
||||||
expect(rendered).to have_selector("form[action='/users/dossiers/#{dossier_id}/carte'][method=post]")
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'la carte est bien présente' do
|
|
||||||
expect(rendered).to have_selector('#map')
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'présence des inputs hidden' do
|
|
||||||
it 'stockage du json des polygons dessinés' do
|
|
||||||
expect(rendered).to have_selector('input[type=hidden][name=selection]', visible: false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'si la page précédente n\'est pas la page du dossier' do
|
|
||||||
it 'le bouton "Etape suivante" est présent' do
|
|
||||||
expect(rendered).to have_selector('#etape_suivante')
|
|
||||||
end
|
|
||||||
|
|
||||||
# it 'le bouton Etape suivante possède un onclick correct' do
|
|
||||||
# expect(rendered).to have_selector('input[type=submit][id=etape_suivante][onclick=\'submit_check_draw(event)\']')
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'si la page précédente est la page du dossier' do
|
|
||||||
let(:state) { Dossier.states.fetch(:en_construction) }
|
|
||||||
|
|
||||||
it 'le bouton "Etape suivante" n\'est pas présent' do
|
|
||||||
expect(rendered).to_not have_selector('#etape_suivante')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'le bouton "Modification terminé" est présent' do
|
|
||||||
expect(rendered).to have_selector('#modification_terminee')
|
|
||||||
end
|
|
||||||
|
|
||||||
# it 'le bouton "Modification terminé" possède un onclick correct' do
|
|
||||||
# expect(rendered).to have_selector('input[type=submit][id=modification_terminee][onclick=\'submit_check_draw(event)\']')
|
|
||||||
# end
|
|
||||||
|
|
||||||
it 'le lien de retour à la page du dossier est présent' do
|
|
||||||
expect(rendered).to have_selector("a[href='/dossiers/#{dossier_id}']")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue