From 103d37e8da9b50d70010d1d6dcdc87f572850000 Mon Sep 17 00:00:00 2001 From: Samuelfaure Date: Wed, 8 Jan 2025 12:14:17 +0100 Subject: [PATCH] Cucumber tests for API Impot Particulier production With more generic cucumber step for API Impot Particulier with stage_type --- .../habilitation_en_plusieurs_paliers.feature | 2 +- .../api_impot_particulier/production.feature | 15 ++++++++++-- .../api_impot_particulier/sandbox.feature | 3 ++- .../sandbox_gestion_des_scopes.feature | 2 +- ...articuliers_editeur_extra_contacts.feature | 2 +- .../api_impot_particulier_steps.rb | 10 -------- .../authorization_requests_steps.rb | 23 ++++++++++++++----- .../support/authorization_request_helpers.rb | 17 +++++++++----- 8 files changed, 46 insertions(+), 28 deletions(-) delete mode 100644 features/step_definitions/api_impot_particulier_steps.rb diff --git a/features/habilitation_en_plusieurs_paliers.feature b/features/habilitation_en_plusieurs_paliers.feature index 76103229b..f9147dff5 100644 --- a/features/habilitation_en_plusieurs_paliers.feature +++ b/features/habilitation_en_plusieurs_paliers.feature @@ -30,7 +30,7 @@ Fonctionnalité: Interactions avec des habilitations en plusieurs paliers (bac Alors il n'y a pas de bouton "Démarrer ma demande d’habilitation en production" Scénario: Il y a un badge sandbox lors du démarrage d'une habilitation de bac à sable - Quand je veux remplir une demande pour API Impot Particulier via le formulaire "Demande libre (Bac à sable)" en bac à sable + Quand je veux remplir une demande pour "API Impôt Particulier" via le formulaire "Demande libre (Bac à sable)" à l'étape "Bac à sable" Et que je clique sur "Débuter ma demande" Alors il y a un badge "Bac à sable" diff --git a/features/habilitations/dgfip/api_impot_particulier/production.feature b/features/habilitations/dgfip/api_impot_particulier/production.feature index 012e545ce..9688cfe35 100644 --- a/features/habilitations/dgfip/api_impot_particulier/production.feature +++ b/features/habilitations/dgfip/api_impot_particulier/production.feature @@ -4,10 +4,10 @@ Fonctionnalité: Soumission d'une demande d'habilitation API Impôt Particulier Contexte: Sachant que je suis un demandeur Et que je me connecte - Et que j'ai 1 demande d'habilitation "API Impôt Particulier" à l'étape "Bac à sable" validée + Et que j'ai 1 demande d'habilitation "API Impôt Particulier" via le formulaire "" à l'étape "Bac à sable" validée Et que je me rends sur mon tableau de bord - Scénario: Je soumets une demande d'habilitation valide + Plan du scénario: Je soumets une demande d'habilitation valide Quand je clique sur "Démarrer ma demande d’habilitation en production" Et que je clique sur "Débuter ma demande" @@ -25,3 +25,14 @@ Fonctionnalité: Soumission d'une demande d'habilitation API Impôt Particulier Alors il y a un message de succès contenant "soumise avec succès" Et je suis sur la page "Demandes et habilitations" + + Exemples: + | Nom du formulaire | + + | Demande libre (Bac à sable) | + | Stationnement résidentiel (Bac à sable) | + | Place en crèche (Bac à sable) | + | Activités périscolaires (Bac à sable) | + | Cantine scolaire (Bac à sable) | + | Aides sociales facultatives (Bac à sable) | + | Carte de transport (Bac à sable) | diff --git a/features/habilitations/dgfip/api_impot_particulier/sandbox.feature b/features/habilitations/dgfip/api_impot_particulier/sandbox.feature index 968e28ea3..6ec3f706a 100644 --- a/features/habilitations/dgfip/api_impot_particulier/sandbox.feature +++ b/features/habilitations/dgfip/api_impot_particulier/sandbox.feature @@ -6,7 +6,8 @@ Fonctionnalité: Soumission d'une demande d'habilitation API Impôt Particulier Et que je me connecte Plan du scénario: Je soumets une demande d'habilitation valide - Quand je veux remplir une demande pour API Impot Particulier via le formulaire "" en bac à sable + Quand je veux remplir une demande pour "API Impôt Particulier" via le formulaire "" à l'étape "Bac à sable" + * je clique sur "Débuter ma demande" * je renseigne les infos de bases du projet * je clique sur "Suivant" diff --git a/features/habilitations/dgfip/api_impot_particulier/sandbox_gestion_des_scopes.feature b/features/habilitations/dgfip/api_impot_particulier/sandbox_gestion_des_scopes.feature index ec44fa59a..2a8474117 100644 --- a/features/habilitations/dgfip/api_impot_particulier/sandbox_gestion_des_scopes.feature +++ b/features/habilitations/dgfip/api_impot_particulier/sandbox_gestion_des_scopes.feature @@ -5,7 +5,7 @@ Fonctionnalité: Soumission d'une demande d'habilitation API Impôts Particulier Sachant que je suis un demandeur Et que je me connecte - Quand je veux remplir une demande pour API Impot Particulier via le formulaire "Demande libre (Bac à sable)" en bac à sable + Quand je veux remplir une demande pour "API Impôt Particulier" via le formulaire "Demande libre (Bac à sable)" à l'étape "Bac à sable" * je clique sur "Débuter ma demande" * je renseigne les infos de bases du projet * je clique sur "Suivant" diff --git a/features/habilitations/dgfip/api_impots_particuliers_editeur_extra_contacts.feature b/features/habilitations/dgfip/api_impots_particuliers_editeur_extra_contacts.feature index e91bc781a..975611ca9 100644 --- a/features/habilitations/dgfip/api_impots_particuliers_editeur_extra_contacts.feature +++ b/features/habilitations/dgfip/api_impots_particuliers_editeur_extra_contacts.feature @@ -4,7 +4,7 @@ Fonctionnalité: Soumission d'une demande d'habilitation API Impôts Particulier Contexte: Sachant que je suis un demandeur Et que je me connecte - Quand je veux remplir une demande pour API Impot Particulier via le formulaire "Demande libre (Bac à sable)" en bac à sable + Quand je veux remplir une demande pour "API Impôt Particulier" via le formulaire "Demande libre (Bac à sable)" à l'étape "Bac à sable" * je clique sur "Débuter ma demande" * je renseigne les infos de bases du projet * je clique sur "Suivant" diff --git a/features/step_definitions/api_impot_particulier_steps.rb b/features/step_definitions/api_impot_particulier_steps.rb deleted file mode 100644 index 56784f2ad..000000000 --- a/features/step_definitions/api_impot_particulier_steps.rb +++ /dev/null @@ -1,10 +0,0 @@ -Quand('je veux remplir une demande pour API Impot Particulier via le formulaire {string} en bac à sable') do |authorization_request_form_name| - authorization_request_forms = AuthorizationRequestForm.where( - name: authorization_request_form_name, - authorization_request_class: AuthorizationRequest::APIImpotParticulierSandbox - ) - - raise "More than one form found for #{authorization_request_form_name} for API Impot Particulier" if authorization_request_forms.count > 1 - - visit new_authorization_request_form_path(form_uid: authorization_request_forms.first.uid) -end diff --git a/features/step_definitions/authorization_requests_steps.rb b/features/step_definitions/authorization_requests_steps.rb index e3e6f073d..0770f8f1a 100644 --- a/features/step_definitions/authorization_requests_steps.rb +++ b/features/step_definitions/authorization_requests_steps.rb @@ -45,6 +45,17 @@ visit new_authorization_request_form_path(form_uid: authorization_request_forms.first.uid) end +Quand('je veux remplir une demande pour {string} via le formulaire {string} à l\'étape {string}') do |authorization_request_name, authorization_request_form_name, stage| + authorization_request_forms = AuthorizationRequestForm.where( + name: authorization_request_form_name, + authorization_request_class: find_authorization_request_class_from_name(authorization_request_name, extract_stage_type(stage)), + ) + + raise "More than one form found for #{authorization_request_name} and #{authorization_request_form_name}" if authorization_request_forms.count > 1 + + visit new_authorization_request_form_path(form_uid: authorization_request_forms.first.uid) +end + Quand('je veux remplir une demande pour {string} via le formulaire {string} de l\'éditeur {string}') do |authorization_request_name, authorization_request_form_name, service_provider_name| authorization_request_forms = AuthorizationRequestForm.where( name: authorization_request_form_name, @@ -149,8 +160,8 @@ visit authorization_request_path(authorization_request) end -# https://rubular.com/r/WVasHhgcHlZSir -Quand(/(j'ai|il y a|mon organisation a) (\d+) demandes? d'habilitation "([^"]+)" ?(?:à l'étape "([^"]+)")? ?(?:en )?(.+)?/) do |who, count, type, stage, status| +# https://rubular.com/r/UD2mV5frl1q1oX +Quand(/(j'ai|il y a|mon organisation a) (\d+) demandes? d'habilitation "([^"]+)" ?(?:via le formulaire "([^"]+)")? ?(?:à l'étape "([^"]+)")? ?(?:en )?(.+)?/) do |who, count, type, form, stage, status| # rubocop:disable Metrics/ParameterLists applicant = case who when 'j\'ai' current_user @@ -158,7 +169,7 @@ create(:user, current_organization: current_user.current_organization) end - create_authorization_requests_with_status(type, status, count, stage, applicant:) + create_authorization_requests_with_status(type, status, count, stage, form, applicant:) end Quand("cette dernière demande d'habilitation s'appelait {string}") do |intitule| @@ -176,7 +187,7 @@ organization: foreign_user.current_organization, } - create_authorization_requests_with_status(type, 'soumise', count, nil, options) + create_authorization_requests_with_status(type, 'soumise', count, nil, nil, options) end # https://rubular.com/r/dRUFmK5dzDpjJv @@ -376,12 +387,12 @@ attributes[:organization] = find_or_create_organization_by_name(organization_name) if organization_name.present? if current_user.instructor? - authorization_request = create_authorization_requests_with_status(type, status, 1, nil, attributes).first + authorization_request = create_authorization_requests_with_status(type, status, 1, nil, nil, attributes).first visit instruction_authorization_request_path(authorization_request) else attributes[:applicant] = current_user if attributes[:organization].blank? - authorization_request = create_authorization_requests_with_status(type, status, 1, nil, attributes).first + authorization_request = create_authorization_requests_with_status(type, status, 1, nil, nil, attributes).first visit authorization_request_path(authorization_request) end diff --git a/features/support/authorization_request_helpers.rb b/features/support/authorization_request_helpers.rb index 0fcfe1698..1ca889583 100644 --- a/features/support/authorization_request_helpers.rb +++ b/features/support/authorization_request_helpers.rb @@ -1,5 +1,5 @@ -def find_authorization_request_class_from_name(name) - authorization_definition = find_authorization_definition_from_name(name) +def find_authorization_request_class_from_name(name, stage_type = nil) + authorization_definition = find_authorization_definition_from_name(name, stage_type) AuthorizationRequest.const_get(authorization_definition.id.classify) end @@ -18,9 +18,14 @@ def find_authorization_request_form_from_name(name) AuthorizationRequestForm.where(name:).first end -def find_factory_trait_from_name(name, stage = nil) +def find_factory_trait_from_name(name, stage = nil, form = nil) authorization_definition = find_authorization_definition_from_name(name, extract_stage_type(stage)) + if form && authorization_definition + target_form = authorization_definition.available_forms.find { |f| f.name == form } + return target_form.uid.underscore if target_form + end + return authorization_definition.authorization_request_class.to_s.underscore.split('/').last if authorization_definition authorization_request_form = find_authorization_request_form_from_name(name) @@ -69,7 +74,7 @@ def extract_stage_type(stage) end # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists -def create_authorization_requests_with_status(type, status = nil, count = 1, stage = nil, attributes = {}) +def create_authorization_requests_with_status(type, status = nil, count = 1, stage = nil, form = nil, attributes = {}) attributes[:applicant] ||= FactoryBot.create(:user, current_organization: attributes[:organization]) if status @@ -77,7 +82,7 @@ def create_authorization_requests_with_status(type, status = nil, count = 1, sta :authorization_request, count, extract_state_from_french_status(status), - find_factory_trait_from_name(type, stage), + find_factory_trait_from_name(type, stage, form), organization: attributes[:applicant].current_organization, **attributes, ) @@ -85,7 +90,7 @@ def create_authorization_requests_with_status(type, status = nil, count = 1, sta FactoryBot.create_list( :authorization_request, count, - find_factory_trait_from_name(type, stage), + find_factory_trait_from_name(type, stage, form), organization: attributes[:applicant].current_organization, **attributes, )