*** Settings *** # Documentation Resource resources/resources.robot Suite Setup Run Keywords ... For Suite Setup ... AND Activer le mode service consulté ... AND Activation des options des task ... AND Activation des platau_type_demande ... AND Composition du jeu de données Suite Teardown Run Keywords ... Décomposition du jeu de données ... AND Désactiver le mode service consulté ... AND Desactivation des options des task ... AND For Suite Teardown *** Variables *** ${task_number} 301_005 ${acteur} task_insert_consultation ${collectivite} LIBRECOM_task_insert_consultation *** Test Cases *** Consultation unique, décision unique [Documentation] Récupération d'une décision tacite sur dossier de consultation unique sans décision Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_1} # La décision n'est pas remplie à la base Form Static Value Should Be css=#decision_date ${EMPTY} Form Static Value Should Be css=#decision_texte ${EMPTY} # On ajoute le traitement de la décision ${task_id} = Ajouter une tâche decision ... date_decision=2026-01-05 ... nature_decision=Accord ... tacite=t ... ext_uid_decision=DEC-TEST-001 Déclencher le traitement des tâches par WS # Vérifier que la décision est bien affichée Reload Page Wait Until Page Contains CONSULTATION POUR TEST Form Static Value Should Be css=#decision_date 05/01/2026 Form Static Value Should Be css=#decision_texte Accord (tacite) # Vérifier que la tâche est passée à done &{task_values} = Create Dictionary ... type=decision ... task=${task_id} ... state=done Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} Consultation unique, décisions successives [Documentation] Récupération d'une décision expresse sur le dossier de consultation unique avec décision ... La décision existante (depuis le test précédent) doit être modifiée. ... De plus, on a une décision non tacite, donc la PJ doit être traitée [Setup] Marquer ce test comme échoué si le test précédent est raté # On ajoute le traitement de la décision ${task_id} = Ajouter une tâche decision ... date_decision=2026-01-07 ... nature_decision=Refus ... tacite=f ... nom_fichier=PJ_DECISION_2.pdf ... ext_uid_decision=DEC-TEST-002 Déclencher le traitement des tâches par WS # Vérifier que la décision est bien affichée Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_1} Form Static Value Should Be css=#decision_date 07/01/2026 Form Static Value Should Be css=#decision_texte Refus Form Static File Should Be css=#decision_storage PJ_DECISION_2.pdf contenu_fichier_attendu=Avis de décision expresse Consultations multiples, décision unique [Setup] Marquer ce test comme échoué si le test précédent est raté # car on réutilise le même premier dossier # Création d'un deuxième dossier de consultation pour le même dossier initial, avec le même acteur &{payload_values} = Create Dictionary ... insee=13305 ... service_consultant_insee=13305 ... acteur=${sc_1.acteur} ... dossier_autorisation=${task_number}_task ... external_uids_dossier=${task_number}_doss ... dossier_consultation=${task_number}_cons ... date_demande=${DATE_DDMMYYYY} ... date_consultation=${DATE_DDMMYYYY} ... date_emission=${DATE_DDMMYYYY} ... date_production_notification=${DATE_DDMMYYYY} ${id_task_consultation} = Créer une tâche de type create_di_for_consultation ${payload_values} ${message} = Déclencher le traitement des tâches par WS ${dossier_consultation_acteur_1_dossier_2} = Replace String Using Regexp ${message} ... .*${id_task_consultation}. create_DI_for_consultation PC0130132200001 : dossier instruction '([A-Z0-9 ]+)' créé.* \\1 Set Suite Variable ${dossier_consultation_acteur_1_dossier_2} # On ajoute le traitement de la décision ${task_id} = Ajouter une tâche decision ... date_decision=2026-01-08 ... nature_decision=Accord ... tacite=f ... nom_fichier=PJ_DECISION_3.pdf ... ext_uid_decision=DEC-TEST-003 Déclencher le traitement des tâches par WS # Vérifier que la décision est bien affichée sur le deuxième (=nouveau) dossier de consultation Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_2} Form Static Value Should Be css=#decision_date 08/01/2026 Form Static Value Should Be css=#decision_texte Accord Form Static File Should Be css=#decision_storage PJ_DECISION_3.pdf contenu_fichier_attendu=Avis de décision expresse # Vérifier que la décision est bien affichée sur le premier dossier de consultation Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_1} Form Static Value Should Be css=#decision_date 08/01/2026 Form Static Value Should Be css=#decision_texte Accord Form Static File Should Be css=#decision_storage PJ_DECISION_3.pdf contenu_fichier_attendu=Avis de décision expresse Consultations multiples, décisions successives [Documentation] Une nouvelle décision arrive pour le DAU (décidément, ce dossier est plein de rebondissement). ... Celle-ci doit bien être reflétée sur les deux consultations de l'acteur, ... et on en profite pour vérifier que la PJ est bien supprimée quand la nouvelle décision n'en contient pas [Setup] Marquer ce test comme échoué si le test précédent est raté # car on réutilise le même premier dossier # On ajoute une nouvelle décision ${task_id} = Ajouter une tâche decision ... date_decision=2026-01-09 ... nature_decision=Refus ... tacite=t ... ext_uid_decision=DEC-TEST-004 Déclencher le traitement des tâches par WS # Vérifier que la décision est bien affichée sur le deuxième (=nouveau) dossier de consultation Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_2} Form Static Value Should Be css=#decision_date 09/01/2026 Form Static Value Should Be css=#decision_texte Refus (tacite) Element Should Not Be Visible css=#decision_storage Element Should Not Be Visible css=#lib-decision_storage # si pas de fichier, on ne veut pas voir le champ # Vérifier que la décision est bien affichée sur le premier dossier de consultation Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_1_dossier_1} Form Static Value Should Be css=#decision_date 09/01/2026 Form Static Value Should Be css=#decision_texte Refus (tacite) Element Should Not Be Visible css=#decision_storage Element Should Not Be Visible css=#lib-decision_storage # si pas de fichier, on ne veut pas voir le champ Récupération d'une décision tacite n'impacte pas les autres dossiers de consultation [Documentation] Le traitement des décisions se fait par DAU et par acteur. ... Le dossier de consultation est fait pour un acteur particulier dans openADS. ... En théorie, quand la décision est prise sur le DAU, une tâche est créée pour chaque acteur ... Dans cette test-suite, on simule un cas où la tâche n'est créée que pour 1 acteur (${sc_1.acteur}), ... et on vérifie que la décision n'a pas été modifiée sur le dossier de consultation ... pour le deuxième acteur (${sc_2.acteur}) [Setup] Marquer ce test comme échoué si le test précédent est raté # car si aucune décision n'est traitée, c'est pas étonnant qu'elle ne soit pas prise en compte ici Depuis le contexte du dossier d'instruction ${dossier_consultation_acteur_2_dossier_1} Form Static Value Should Be css=#decision_date ${EMPTY} Form Static Value Should Be css=#decision_texte ${EMPTY} Element Should Not Be Visible css=#decision_storage Element Should Not Be Visible css=#lib-decision_storage # si pas de fichier, on ne veut pas voir le champ *** Keywords *** Composition du jeu de données # En tant qu'admin Depuis la page d'accueil admin admin # Active l'option entité pour la collectivité/le service &{param_entite} = Create Dictionary ... libelle=option_om_collectivite_entity ... valeur=true ... om_collectivite=agglo Gerer le paramètre par WS ${param_entite} &{param_dossier_commune} = Create Dictionary ... libelle=option_dossier_commune ... valeur=true ... om_collectivite=agglo Gerer le paramètre par WS ${param_dossier_commune} &{param_date_depot_mairie} = Create Dictionary ... libelle=option_date_depot_mairie ... valeur=true ... om_collectivite=agglo Gerer le paramètre par WS ${param_date_depot_mairie} &{args_da_type} = Create Dictionary ... affichage_form=CONSULTATION ENTRANTE Modifier le type de dossier d'autorisation Permis de construire ${args_da_type} # Ajout d'une commune sur laquelle portera le dossier &{com_values} = Create Dictionary ... typecom=COM ... com=13305 ... reg=00 ... dep=13 ... arr=305 ... tncc=0 ... ncc=Test-tacite ... nccenr=Test-tacite ... libelle=Test-tacite ... can=40 ... comparent= ... om_validite_debut=07/04/2000 Ajouter commune avec dates validité ${com_values} # Ajout d'un service consulté (=collectivite) &{sc_1} = Create Dictionary ... om_collectivite_libelle=${collectivite} ... departement=13 ... commune=005 ... insee=13005 ... direction_code=InsertTask${task_number} ... direction_libelle=Direction de ${collectivite} ... direction_chef=Chef ... division_code=InsertTask${task_number} ... division_libelle=Division InsertTask ${task_number} ... division_chef=Chef ... guichet_om_utilisateur_nom=InsertTask ${task_number} Guichet ... guichet_om_utilisateur_email=task${task_number}guichet@openads-test.fr ... guichet_om_utilisateur_login=task${task_number}guichet ... guichet_om_utilisateur_pwd=task${task_number}guichet ... instr_om_utilisateur_nom=Task instr ... instr_om_utilisateur_email=tas${task_number}instr@openads-test.fr ... instr_om_utilisateur_login=tas${task_number}instr ... instr_om_utilisateur_pwd=task${task_number}instr ... code_entite=SC1 ... acteur=${acteur} Isolation d'un contexte ${sc_1} Set Suite Variable ${sc_1} &{collectivite_values_platau_acteur_service_consulte} = Create Dictionary ... libelle=platau_acteur_service_consulte ... valeur=${sc_1.acteur} ... om_collectivite=${sc_1.om_collectivite_libelle} Gerer le paramètre par WS ${collectivite_values_platau_acteur_service_consulte} # Ajout d'un deuxième service consulté (=collectivite) &{sc_2} = Create Dictionary ... om_collectivite_libelle=${collectivite}_2 ... departement=13 ... commune=005 ... insee=13005 ... direction_code=InsertTask${task_number}_2 ... direction_libelle=Direction de ${collectivite}_2 ... direction_chef=Chef_2 ... division_code=InsertTask${task_number}_2 ... division_libelle=Division InsertTask ${task_number}_2 ... division_chef=Chef_2 ... guichet_om_utilisateur_nom=InsertTask ${task_number} Guichet ... guichet_om_utilisateur_email=task${task_number}guichet_2@openads-test.fr ... guichet_om_utilisateur_login=task${task_number}guichet_2 ... guichet_om_utilisateur_pwd=task${task_number}guichet_2 ... instr_om_utilisateur_nom=Task instr_2 ... instr_om_utilisateur_email=tas${task_number}instr_2@openads-test.fr ... instr_om_utilisateur_login=tas${task_number}instr_2 ... instr_om_utilisateur_pwd=task${task_number}instr_2 ... code_entite=SC2 ... acteur=${acteur}_2 Isolation d'un contexte ${sc_2} Set Suite Variable ${sc_2} &{collectivite_values_platau_acteur_service_consulte} = Create Dictionary ... libelle=platau_acteur_service_consulte ... valeur=${sc_2.acteur} ... om_collectivite=${sc_2.om_collectivite_libelle} Gerer le paramètre par WS ${collectivite_values_platau_acteur_service_consulte} # ----------------------------------------------------------------------------- # Insertion d'un dossier en mode consultation # Création de deux dossiers de consultations pour les 2 SC &{payload_values} = Create Dictionary ... insee=13305 ... service_consultant_insee=13305 ... acteur=${sc_1.acteur} ... dossier_autorisation=${task_number}_task ... external_uids_dossier=${task_number}_doss ... dossier_consultation=${task_number}_cons_1 ... date_demande=${DATE_DDMMYYYY} ... date_consultation=${DATE_DDMMYYYY} ... date_emission=${DATE_DDMMYYYY} ... date_production_notification=${DATE_DDMMYYYY} ${id_task_consultation_1} = Créer une tâche de type create_di_for_consultation ${payload_values} &{payload_values} = Create Dictionary ... insee=13305 ... service_consultant_insee=13305 ... acteur=${sc_2.acteur} ... dossier_autorisation=${task_number}_task ... external_uids_dossier=${task_number}_doss ... dossier_consultation=${task_number}_cons_2 ... date_demande=${DATE_DDMMYYYY} ... date_consultation=${DATE_DDMMYYYY} ... date_emission=${DATE_DDMMYYYY} ... date_production_notification=${DATE_DDMMYYYY} ${id_task_consultation_2} = Créer une tâche de type create_di_for_consultation ${payload_values} ${message}= Déclencher le traitement des tâches par WS ${dossier_consultation_acteur_1_dossier_1} = Replace String Using Regexp ${message} ... .*${id_task_consultation_1}. create_DI_for_consultation PC0130132200001 : dossier instruction '([A-Z0-9 ]+)' créé.* \\1 Set Suite Variable ${dossier_consultation_acteur_1_dossier_1} ${dossier_consultation_acteur_2_dossier_1} = Replace String Using Regexp ${message} ... .*${id_task_consultation_2}. create_DI_for_consultation PC0130132200001 : dossier instruction '([A-Z0-9 ]+)' créé.* \\1 Set Suite Variable ${dossier_consultation_acteur_2_dossier_1} Décomposition du jeu de données [Documentation] Réinitialisation du jeu de données. # Rétablir l'affichage du type de DA &{args_da_type} = Create Dictionary ... affichage_form=ADS Modifier le type de dossier d'autorisation Permis de construire ${args_da_type} &{param_dossier_commune} = Create Dictionary ... libelle=option_dossier_commune ... valeur=false ... om_collectivite=agglo Gerer le paramètre par WS ${param_dossier_commune} &{param_date_depot_mairie} = Create Dictionary ... libelle=option_date_depot_mairie ... delete=true ... om_collectivite=agglo Gerer le paramètre par WS ${param_date_depot_mairie} &{platau_acteur_service_consulte} = Create Dictionary ... delete=true ... libelle=platau_acteur_service_consulte ... om_collectivite=${sc_1.om_collectivite_libelle} Gerer le paramètre par WS ${platau_acteur_service_consulte} &{param_entite} = Create Dictionary ... delete=true ... libelle=option_om_collectivite_entity ... om_collectivite=agglo Gerer le paramètre par WS ${param_entite} Ajouter une tâche decision [Arguments] ... ${date_decision} ... ${nature_decision} ... ${tacite} ... ${ext_uid_decision} ... ${nom_fichier}=${EMPTY} ... ${dau}=${task_number}_doss ... ${acteur}=${sc_1.acteur} # Récupérer le template de payload JSON, mettre les bonnes valeurs ${json_payload} = Get File ${EXECDIR}${/}binary_files${/}json_payload_decision_sur_consultation_input.json ${json_payload} = Replace String ${json_payload} "tacite": "TST_DEF_VAL" "tacite": "${tacite}" ${json_payload} = Replace String ${json_payload} "nature_decision": "TST_DEF_VAL" "nature_decision": "${nature_decision}" ${json_payload} = Replace String ${json_payload} "date_decision": "TST_DEF_VAL" "date_decision": "${date_decision}" ${json_payload} = Replace String ${json_payload} "acteur": "TST_DEF_VAL" "acteur": "${acteur}" ${json_payload} = Replace String ${json_payload} "decision": "TST_DEF_VAL" "decision": "${ext_uid_decision}" ${json_payload} = Replace String ${json_payload} "dossier": "TST_DEF_VAL" "dossier": "${dau}" ${json_payload} = Replace String ${json_payload} "nom_fichier": "TST_DEF_VAL" "nom_fichier": "${nom_fichier}" # Transformer la payload en dictionnaire pour pouvoir éventuellement retirer le document_numerise ${payload_dict} = To Json ${json_payload} Run Keyword If "${tacite}"=="t" Evaluate $payload_dict.pop('document_numerise', None) # Pas de PJ si décision tacite ${json_string}= Evaluate json.dumps(${payload_dict}) json ${task_values} = Create Dictionary ... type=decision ... json_payload=${json_string} ... category=platau ${id_task_consultation_piece} = Ajouter la tâche par WS ${task_values} [return] ${id_task_consultation_piece}