*** Settings *** Documentation Test de task. # On inclut les mots-clefs Resource resources/resources.robot Test Teardown Run Keyword If Test Failed Capture Page Screenshot # On ouvre/ferme le navigateur au début/à la fin du Test Suite. Suite Setup Run Keywords ... For Suite Setup ... AND Activation des options des task Suite Teardown Run Keywords ... Desactivation des options des task ... AND For Suite Teardown *** Test Cases *** Constitution du jeu de données DI [Documentation] Permet de vérifier le bon fonctionnement de la création des tâches lié à la création d'un dossier d'instruction ... Vérifie aussi qu'il n'y a pas de création d'autre tâche non concerné Depuis la page d'accueil admin admin &{args_dossier1} = Create Dictionary ... om_collectivite=MARSEILLE ... dossier_autorisation_type_detaille=Permis de construire pour une maison individuelle et / ou ses annexes ... demande_type=Dépôt Initial ... terrain_adresse_localite=TEST304AdresseLocalite &{args_petitionnaire1} = Create Dictionary ... qualite=particulier ... particulier_nom=TEST304TASKNOM01 ... particulier_prenom=TEST304TASKPRENOM01 ... localite=TEST304Localite ... om_collectivite=MARSEILLE ${di1} = Ajouter la demande par WS ${args_dossier1} ${args_petitionnaire1} &{donnees_techniques_values} = Create Dictionary ... enga_decla_lieu=TEST304engadelalieu ... enga_decla_date=${DATE_DDMMYYYY} Saisir les données techniques du DI ${di1} ${donnees_techniques_values} ${di1_sans_espace} = Sans espace ${di1} ${di1_da} = Replace String Using Regexp ${di1_sans_espace} [A-Z][0-9]+$ ${EMPTY} Set Suite Variable ${di1} Set Suite Variable ${di1_sans_espace} Set Suite Variable ${di1_da} &{args_dossier2} = Create Dictionary ... om_collectivite=MARSEILLE ... dossier_autorisation_type_detaille=Permis de construire pour une maison individuelle et / ou ses annexes ... demande_type=Dépôt Initial ... terrain_adresse_localite=TEST304AdresseLocalite02 &{args_petitionnaire2} = Create Dictionary ... qualite=particulier ... particulier_nom=TEST304TASKNOM02 ... particulier_prenom=TEST304TASKPRENOM02 ... localite=TEST304Localite02 ... om_collectivite=MARSEILLE ${di2} = Ajouter la demande par WS ${args_dossier2} ${args_petitionnaire2} Saisir les données techniques du DI ${di2} ${donnees_techniques_values} ${di2_sans_espace} = Sans espace ${di2} ${di2_da} = Replace String Using Regexp ${di2_sans_espace} [A-Z][0-9]+$ ${EMPTY} Set Suite Variable ${di2} Set Suite Variable ${di2_sans_espace} Set Suite Variable ${di2_da} &{args_dossier3} = Create Dictionary ... om_collectivite=MARSEILLE ... dossier_autorisation_type_detaille=Permis de construire pour une maison individuelle et / ou ses annexes ... demande_type=Dépôt Initial ... terrain_adresse_localite=TEST304AdresseLocalite02 &{args_petitionnaire3} = Create Dictionary ... qualite=particulier ... particulier_nom=TEST304TASKNOM03 ... particulier_prenom=TEST304TASKPRENOM03 ... localite=TEST304Localite03 ... om_collectivite=MARSEILLE ${di3} = Ajouter la demande par WS ${args_dossier3} ${args_petitionnaire3} Saisir les données techniques du DI ${di3} ${donnees_techniques_values} ${di3_sans_espace} = Sans espace ${di3} ${di3_da} = Replace String Using Regexp ${di3_sans_espace} [A-Z][0-9]+$ ${EMPTY} Set Suite Variable ${di3} Set Suite Variable ${di3_sans_espace} Set Suite Variable ${di3_da} Vérification de l'ajout de la task Suppression pièce lors de la suppression d'une piece de catégorie Plat'AU du dossier d'instruction [Documentation] Permet de vérifier que la tâche Suppression pièce est bien ajouté lors de la suppression d'une pièce du dossier d'instruction. ... Vérifie aussi qu'il n'y a pas de création d'autre tâche non concerné Depuis la page d'accueil admin admin # On ajoute un document numérisé par DI &{document_numerise_values} = Create Dictionary ... uid_upload=testImportManuel.pdf ... date_creation=${DATE_DDMMYYYY} ... document_numerise_type=Test type document numerise de catégorie PLATAU Ajouter une pièce depuis le dossier d'instruction ${di1} ${document_numerise_values} &{task_values} = Create Dictionary ... type=ajout_piece ... dossier=${di1_sans_espace} ... state=new ... link_dossier=${di1_sans_espace} ... stream=output ${id_ajout_piece} = Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} # On vérifie que la tache de création contient bin le fichier testImportManuel.pdf ${json_payload_loaded} = Récupérer le contenu du champ json_payload ${task_values} ${link_piece} = Set Variable ${json_payload_loaded['document_numerise']['path']} ${output_dir} ${output_name}= Télécharger un fichier ${SESSION_COOKIE} ${PROJECT_URL}${link_piece} ${EXECDIR}${/}binary_files${/} ${base64_file} = Run base64 ${output_dir}${output_name} ${base64_model} = Run base64 ${EXECDIR}${/}binary_files${/}testImportManuel.pdf Should Be Equal As Strings ${base64_file} ${base64_model} # On clos la task de création &{task_values_modif} = Create Dictionary ... state=terminé Modifier la task ${id_ajout_piece} ${task_values_modif} La page ne doit pas contenir d'erreur # et on supprime la pièce Supprimer une pièce depuis le dossier d'instruction ${di1} Test type document numerise de catégorie PLATAU # On vérifie si la task de suppression as bien été ajouter &{task_values} = Create Dictionary ... type=suppression_piece ... dossier=${di1_sans_espace} ... state=new ... link_dossier=${di1_sans_espace} ... stream=output ${id_suppression_piece} = Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=3&idx=${id_suppression_piece} Click Element Until No More Element css=#fieldset-form-task-json_payload .collapsible.collapsed Element Should Not Contain css=#json_payload Impossible de recuperer la payload Element Should Contain css=#json_payload "type": "suppression_piece" Element Should Contain css=#json_payload "groupe": "ADS" Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=998&idx=${id_suppression_piece}&category=platau&state=new&type=suppression_piece&stream=output ${json_task} = Get Text css=#form-container Element Should Contain css=#form-container "type":"suppression_piece" ${id_next_task} = Evaluate ${id_suppression_piece} + 1 Vérifier qu'il n'y a pas de création d'autre tâche non concerné id_next_task=${id_next_task} id_dossier=${di1_da} Set Suite Variable ${id_suppression_piece_di1} ${id_suppression_piece} Vérification du comportement de la task suppression_piece avec document_numerise supprimé en externe [Documentation] Simule le cas où un document_numerise a été supprimé en dehors ... d'OpenADS (GED externe) et la payload de la tâche suppression_piece est ... restée vide. Vérifie que l'API retourne une payload partielle exploitable ... contenant l'UID Plat'AU de la pièce et que le formulaire ne crash pas. Depuis la page d'accueil admin admin # On simule l'existence d'un lien Plat'AU pour la pièce, comme si le # connecteur avait traité l'ajout_piece et enregistré l'UID Plat'AU. # En production ce lien persiste même après la suppression du document. Execute SQL INSERT INTO openads.lien_id_interne_uid_externe (lien_id_interne_uid_externe, object, object_id, external_uid, dossier, category) SELECT nextval('openads.lien_id_interne_uid_externe_seq'), 'piece', t.object_id, 'FAKE-PLATAU-PIECE-UID-10915', t.dossier, 'platau' FROM openads.task t WHERE t.task = '${id_suppression_piece_di1}' # On corrompt la payload pour simuler le scénario historique Execute SQL UPDATE openads.task SET json_payload = '{}' WHERE task = '${id_suppression_piece_di1}' # Vérification via l'API REST (action=998) : le connecteur Python doit # recevoir une payload structurée avec le type, l'indicateur de suppression # et l'UID Plat'AU de la pièce pour pouvoir identifier quoi supprimer Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=998&idx=${id_suppression_piece_di1}&category=platau&state=new&type=suppression_piece&stream=output ${api_response} = Get Text css=#form-container Should Contain ${api_response} "type":"suppression_piece" Should Contain ${api_response} "document_numerise_supprime":true Should Contain ${api_response} "piece":"FAKE-PLATAU-PIECE-UID-10915" Should Not Contain ${api_response} Impossible de recuperer la payload # Vérification via le formulaire (action=3) : pas de crash PHP Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=3&idx=${id_suppression_piece_di1} La page ne doit pas contenir d'erreur # Nettoyage Execute SQL UPDATE openads.task SET state = 'canceled' WHERE task = '${id_suppression_piece_di1}' Execute SQL DELETE FROM openads.lien_id_interne_uid_externe WHERE external_uid = 'FAKE-PLATAU-PIECE-UID-10915' Vérification que triggermodifierapres ne crash pas avec payload vide [Documentation] Vérifie que triggermodifierapres() gère proprement le cas où ... la payload en base est vide lors d'un changement de state. ... Le champ json_payload est de type jsonprettyprint (balise pre, pas d'input) ... en mode modifier, il n'est donc pas soumis. triggermofidier() récupère ... la payload depuis la base ('{}') et triggermodifierapres() doit refuser ... la modification sans provoquer de crash PHP. Depuis la page d'accueil admin admin # On remet la tâche en état new avec payload vide Execute SQL UPDATE openads.task SET json_payload = '{}', state = 'new' WHERE task = '${id_suppression_piece_di1}' # On tente de modifier le state via le formulaire &{task_values_modif} = Create Dictionary ... state=terminé Modifier la task ${id_suppression_piece_di1} ${task_values_modif} # Pas de crash PHP (pas d'erreur de base de données, pas d'erreur xdebug). # triggermodifierapres() détecte la payload invalide, log l'erreur et # retourne false, ce qui fait échouer modifier() proprement. La page ne doit pas contenir d'erreur # Vérification que le state n'a PAS changé (modifier() a échoué) Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=3&idx=${id_suppression_piece_di1} La page ne doit pas contenir d'erreur ${state_value} = Get Element Attribute css=#state value Should Be Equal ${state_value} new # Nettoyage Execute SQL UPDATE openads.task SET state = 'canceled' WHERE task = '${id_suppression_piece_di1}' Vérification de la desactivation des tasks de Création pièce lors de la suppression d'une piece de catégorie Plat'AU du dossier d'instruction [Documentation] Permet de vérifier que la tâche Création pièce est bien annulée lors de la suppression d'une pièce du dossier d'instruction. Depuis la page d'accueil admin admin # On ajoute un document numérisé par DI &{document_numerise_values} = Create Dictionary ... uid_upload=testImportManuel.pdf ... date_creation=${DATE_DDMMYYYY} ... document_numerise_type=Test type document numerise de catégorie PLATAU Ajouter une pièce depuis le dossier d'instruction ${di2} ${document_numerise_values} &{task_values} = Create Dictionary ... type=ajout_piece ... dossier=${di2_sans_espace} ... state=new ... link_dossier=${di2_sans_espace} ... stream=output Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} # On supprimme la pièce avant qu'elle soit envoyée à Plat'au Supprimer une pièce depuis le dossier d'instruction ${di2} Test type document numerise de catégorie PLATAU # On vérifie que la task d'Ajout as bien été annulé &{task_values} = Create Dictionary ... type=ajout_piece ... dossier=${di2_sans_espace} ... state=canceled ... link_dossier=${di2_sans_espace} ... stream=output Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} Vérification de la desactivation des tasks de Modification pièce non envoyée et l'ajout d'une task de suppression lors de la suppression d'une piece de catégorie Plat'AU du dossier d'instruction [Documentation] Permet de vérifier que la tâche suppression pièce est bien ajouté lors de la suppression d'une pièce du dossier d'instruction. ... Vérifie aussi que les taches de Modification non envoyée sont annulée. Depuis la page d'accueil admin admin # On ajoute un document numérisé par DI &{document_numerise_values} = Create Dictionary ... uid_upload=testImportManuel.pdf ... date_creation=${DATE_DDMMYYYY} ... document_numerise_type=Test type document numerise de catégorie PLATAU Ajouter une pièce depuis le dossier d'instruction ${di3} ${document_numerise_values} &{task_values} = Create Dictionary ... type=ajout_piece ... dossier=${di3_sans_espace} ... state=new ... link_dossier=${di3_sans_espace} ... stream=output ${id_ajout_piece} = Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} # On clos la task de création &{task_values_modif} = Create Dictionary ... state=terminé Modifier la task ${id_ajout_piece} ${task_values_modif} La page ne doit pas contenir d'erreur # On modifie la piece &{document_numerise_values} = Create Dictionary ... uid_upload=testImportManuel.pdf ... date_creation=${DATE_DDMMYYYY} Modifier une pièce depuis le dossier d'instruction ${di3} Test type document numerise de catégorie PLATAU ${document_numerise_values} # On vérifie l'existence de la tache de modification &{task_values} = Create Dictionary ... type=modification_piece ... dossier=${di3_sans_espace} ... state=new ... link_dossier=${di3_sans_espace} ... stream=output Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} # On supprimme la pièce Supprimer une pièce depuis le dossier d'instruction ${di3} Test type document numerise de catégorie PLATAU # On vérifie que la task de Modification as bien été annulé &{task_values} = Create Dictionary ... type=modification_piece ... dossier=${di3_sans_espace} ... state=canceled ... link_dossier=${di3_sans_espace} ... stream=output Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} # On vérifie si la task de suppression as bien été ajouter &{task_values} = Create Dictionary ... type=suppression_piece ... dossier=${di3_sans_espace} ... state=new ... link_dossier=${di3_sans_espace} ... stream=output ${id_suppression_piece} = Vérifier que la tâche a bien été ajoutée ou modifiée ${task_values} Go To ${PROJECT_URL}/app/index.php?module=form&obj=task&action=3&idx=${id_suppression_piece} Click Element Until No More Element css=#fieldset-form-task-json_payload .collapsible.collapsed Element Should Not Contain css=#json_payload Impossible de recuperer la payload Element Should Contain css=#json_payload "type": "suppression_piece" Element Should Contain css=#json_payload "groupe": "ADS"