Skip to content

Commit

Permalink
ajout de specs pour les formulaires utilisant la validation des numér…
Browse files Browse the repository at this point in the history
…os ANTS
  • Loading branch information
adipasquale committed Nov 20, 2024
1 parent 0b10dd7 commit 519cbad
Show file tree
Hide file tree
Showing 3 changed files with 404 additions and 5 deletions.
88 changes: 88 additions & 0 deletions spec/form_models/admin/user_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,92 @@
subject.save
end
end

describe "validations numéro ANTS" do
let(:duplicate_users_mock) { [] }

include_context "rdv_mairie_api_authentication"

context "numéro de pré-demande ANTS mal formatté" do
let(:user) { build(:user, ants_pre_demande_number: "undeux") }

specify do
expect(subject.valid?).to be false
expect(subject.errors.first.full_message).to eq("Numéro de pré-demande ANTS doit comporter 10 chiffres et lettres")
end
end

context "numéro de pré-demande ANTS valide" do
before { stub_ants_status("VALID12345", status: "validated", appointments: []) }

let(:user) { build(:user, ants_pre_demande_number: "VALID12345") }

specify do
expect(subject).to be_valid
end
end

context "numéro de pré-demande ANTS non-reconnu (unknown)" do
before { stub_ants_status("VALID12345", status: "unknown", appointments: []) }

let(:user) { build(:user, ants_pre_demande_number: "VALID12345") }

specify do
expect(subject.valid?).to be false
expect(subject.errors.first.full_message).to eq("Numéro de pré-demande ANTS n'est pas reconnu par l'ANTS")
end
end

context "numéro de pré-demande ANTS a déjà un appointment" do
before do
stub_ants_status(
"VALID12345",
status: "validated",
appointments: [{ "meeting_point" => "Mairie de Montrouge", "management_url" => "http://rdvsympa.fr/123" }]
)
end

let(:user) { build(:user, ants_pre_demande_number: "VALID12345") }

specify do
expect(subject.valid?).to be false
expect(subject.errors.first.attribute).to eq(:_benign)
expect(subject.errors.first.message).to eq(
<<-TXT.squish
Ce numéro de pré-demande ANTS est déjà utilisé pour un RDV auprès de Mairie de Montrouge.
Veuillez <a href='http://rdvsympa.fr/123' target="_blank">annuler ce RDV<a> avant d'en prendre un nouveau.
TXT
)
end
end

context "numéro de pré-demande ANTS a déjà un appointment mais les avertissements sont ignorés" do
subject { described_class.new(user, ignore_benign_errors: true, view_locals: { current_organisation: organisation }) }

before do
stub_ants_status(
"VALID12345",
status: "validated",
appointments: [{ "meeting_point" => "Mairie de Montrouge", "management_url" => "http://rdvsympa.fr/123" }]
)
end

let(:user) { build(:user, ants_pre_demande_number: "VALID12345") }

specify do
expect(subject.valid?).to be true
end
end

context "l’API ANTS timeoute" do
before { allow(AntsApi).to receive(:status).and_raise(Typhoeus::Errors::TimeoutError) }

let(:user) { build(:user, ants_pre_demande_number: "VALID12345") }

specify do
expect(subject.valid?).to be false
expect(subject.errors.first.full_message).to eq("Numéro de pré-demande ANTS n'a pas pu être validé à cause d'une erreur inattendue. Merci de réessayer dans 30 secondes.")
end
end
end
end
125 changes: 120 additions & 5 deletions spec/form_models/beneficiaire_form_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
}
end

it do
specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Prénom doit être rempli(e)")
end
Expand All @@ -37,7 +37,7 @@
}
end

it do
specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Nom d’usage doit être rempli(e)")
end
Expand All @@ -52,7 +52,7 @@
}
end

it do
specify do
expect(form).to be_invalid
expect(form.benign_errors.first).to eq("Sans numéro de téléphone, aucune notification ne sera envoyée au bénéficiaire")
end
Expand All @@ -67,7 +67,7 @@
}
end

it do
specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Téléphone n'est pas valide")
end
Expand All @@ -82,9 +82,124 @@
}
end

it do
specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Téléphone ne permet pas de recevoir des SMS")
end
end

context "pour un motif demandant un numéro de pré-demande ANTS" do
include_context "rdv_mairie_api_authentication"
let!(:territory) { create(:territory, :mairies) }
let!(:organisation) { create(:organisation, territory:, name: "Mairie de Wavignies") }
let!(:motif_category) { create(:motif_category, :passeport) }
let!(:motif) { create(:motif, organisation:, motif_category:) }
let(:params) do
{
motif_id: motif.id,
first_name: "Steve",
last_name: "Rogne",
phone_number: "0611223344",
ants_pre_demande_number:,
}
end

context "numéro de pré-demande ANTS vide" do
let(:ants_pre_demande_number) { "" }

specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Numéro de pré-demande ANTS doit comporter 10 chiffres et lettres")
end
end

context "numéro de pré-demande ANTS mal formatté" do
let(:ants_pre_demande_number) { "ACSoup" }

specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Numéro de pré-demande ANTS doit comporter 10 chiffres et lettres")
end
end

context "numéro de pré-demande ANTS valide" do
before { stub_ants_status("VALID12345", status: "validated", appointments: []) }

let(:ants_pre_demande_number) { "VALID12345" }

specify do
expect(form).to be_valid
end
end

context "numéro de pré-demande ANTS non-reconnu (status unknown)" do
before { stub_ants_status("VALID12345", status: "unknown", appointments: []) }

let(:ants_pre_demande_number) { "VALID12345" }

specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Numéro de pré-demande ANTS n'est pas reconnu par l'ANTS")
end
end

context "numéro de pré-demande ANTS a déjà un appointment" do
before do
stub_ants_status(
"VALID12345",
status: "validated",
appointments: [{ "meeting_point" => "Mairie de Montrouge", "management_url" => "http://rdvsympa.fr/123" }]
)
end

let(:ants_pre_demande_number) { "VALID12345" }

specify do
expect(form).to be_invalid
expect(form.errors.first.attribute).to eq(:_benign)
expect(form.errors.first.message).to eq(
<<-TXT.squish
Ce numéro de pré-demande ANTS est déjà utilisé pour un RDV auprès de Mairie de Montrouge.
Veuillez <a href='http://rdvsympa.fr/123' target="_blank">annuler ce RDV<a> avant d'en prendre un nouveau.
TXT
)
end
end

context "numéro de pré-demande ANTS a déjà un appointment mais les avertissements sont ignorés" do
before do
stub_ants_status(
"VALID12345",
status: "validated",
appointments: [{ "meeting_point" => "Mairie de Montrouge", "management_url" => "http://rdvsympa.fr/123" }]
)
end

let(:params) do
{
motif_id: motif.id,
first_name: "Steve",
last_name: "Rogne",
phone_number: "0611223344",
ants_pre_demande_number: "VALID12345",
ignore_benign_errors: "true",
}
end

specify do
expect(form).to be_valid
end
end

context "l’API ANTS timeoute" do
before { allow(AntsApi).to receive(:status).and_raise(Typhoeus::Errors::TimeoutError) }

let(:ants_pre_demande_number) { "VALID12345" }

specify do
expect(form).to be_invalid
expect(form.errors.first.full_message).to eq("Numéro de pré-demande ANTS n'a pas pu être validé à cause d'une erreur inattendue. Merci de réessayer dans 30 secondes.")
end
end
end
end
Loading

0 comments on commit 519cbad

Please sign in to comment.