demarches-normaliennes/spec/controllers/champs/carte_controller_spec.rb
2024-05-27 10:33:37 +02:00

155 lines
3.7 KiB
Ruby

describe Champs::CarteController, type: :controller do
let(:user) { create(:user) }
let(:procedure) { create(:procedure, :published, types_de_champ_public: [{ type: :carte, options: { cadastres: true } }]) }
let(:dossier) { create(:dossier, user: user, procedure: procedure) }
let(:params) do
{
dossier: {
champs_public_attributes: {
champ.public_id => { value: value }
}
},
position: '1',
dossier_id: champ.dossier_id,
stable_id: champ.stable_id
}
end
let(:champ) { dossier.champs.first }
describe 'features' do
let(:feature) { attributes_for(:geo_area, :polygon) }
let(:geo_area) { create(:geo_area, :selection_utilisateur, :polygon, champ: champ) }
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
feature: feature,
source: GeoArea.sources.fetch(:selection_utilisateur)
}
end
before do
sign_in user
request.accept = "application/json"
request.content_type = "application/json"
end
describe 'POST #create' do
before do
post :create, params: params
end
context 'success' do
it { expect(response.status).to eq 201 }
end
context 'error' do
let(:feature) { attributes_for(:geo_area, :invalid_point) }
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
feature: feature,
source: GeoArea.sources.fetch(:selection_utilisateur)
}
end
it { expect(response.status).to eq 422 }
end
end
describe 'PATCH #update' do
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
id: geo_area.id,
feature: feature
}
end
before do
patch :update, params: params
end
context 'update geometry' do
it { expect(response.status).to eq 204 }
end
context 'update description' do
let(:feature) do
{
properties: {
description: 'un point'
}
}
end
it {
expect(response.status).to eq 204
expect(geo_area.reload.description).to eq('un point')
}
end
context 'error' do
let(:feature) { attributes_for(:geo_area, :invalid_point) }
it { expect(response.status).to eq 422 }
end
end
describe 'DELETE #destroy' do
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
id: geo_area.id
}
end
before do
delete :destroy, params: params
end
it { expect(response.status).to eq 204 }
end
describe 'GET #index' do
render_views
before do
get :index, params: params, format: :turbo_stream
end
context 'without focus' do
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id
}
end
it 'updates the list' do
expect(response.body).not_to include("map:feature:focus")
expect(response.status).to eq 200
end
end
context "update list and focus" do
let(:params) do
{
dossier_id: champ.dossier_id,
stable_id: champ.stable_id,
focus: true
}
end
it 'updates the list and focuses the map' do
expect(response.body).to include(ActionView::RecordIdentifier.dom_id(champ, :geo_areas))
expect(response.body).to include("map:feature:focus")
expect(response.status).to eq 200
end
end
end
end
end