*** Settings *** Documentation Test du widget flexible, avec plusieurs templates et om_requetes Resource resources/resources.robot Test Teardown Run Keyword If Test Failed Capture Page Screenshot Suite Setup Run Keywords No Operation ... AND For Suite Setup ... AND Composition du jeu de données Suite Teardown Run Keywords No Operation ... AND For Suite Teardown *** Test Cases *** Un widget tout simple s'affiche Depuis la page d'accueil admin admin ${widget_tdb_id} = Ajouter un widget flexible avec sa requête et son modèle ... template_content={{greeting }} {{ person }} ... requete_content=SELECT 'hello' AS greeting, 'world' AS person ... widget_libelle=Bienvenue Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Hello world Un widget trop lent affiche une erreur Depuis la page d'accueil admin admin ${widget_tdb_id_ok} = Ajouter un widget flexible avec sa requête et son modèle ... template_content=Je commence à {{ time_1 }} et je finis à {{ time_2 }} ... requete_content=SELECT clock_timestamp() AS time_1, pg_sleep(0.3), clock_timestamp() AS time_2 ... widget_libelle=Faut pas être pressé… ${widget_tdb_id_lent} = Ajouter un widget flexible avec sa requête et son modèle ... template_content=Je commence à {{ time_1 }} et je finis à {{ time_2 }} ... requete_content=SELECT clock_timestamp() AS time_1, pg_sleep(1), clock_timestamp() AS time_2 ... widget_libelle=Faut pas être pressé mais ça c’est un peu de l’abus ! Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id_ok} Je commence à Le widget doit contenir ${widget_tdb_id_lent} Ce widget a mis trop longtemps à s'afficher Un widget avec deux requêtes SQL fonctionne Depuis la page d'accueil admin admin # Installation du widget ${uuid}= Set Variable jai2requetes ${widget_libelle}= Set Variable J’ai deux requêtes Ajouter la requête ... code=048_${uuid}_req_1 ... libelle=Requête pour ${widget_libelle} ... type=sql ... requete=SELECT 'Bonjour' AS greeting Ajouter la requête ... code=048_${uuid}_req_2 ... libelle=Requête pour ${widget_libelle} ... type=sql ... requete=SELECT 'le monde' AS person &{tpl} = Create Dictionary ... libelle=048_${uuid} template ... code={{greeting }} {{ person }} ${tpl.id}= Ajouter template ${tpl} &{widget} = Create Dictionary ... libelle=048 ${uuid} ${widget_libelle} ... type=file - le contenu du widget provient d'un script sur le serveur ... script=flexible ... arguments=template_id=${tpl.id}\nom_requetes_codes=048_${uuid}_req_1,048_${uuid}_req_2 Ajouter un widget ${widget} &{args_om_dashboard} = Create Dictionary ... om_widget=${widget.libelle} ... om_profil=${PROFIL_DEDIE} ... bloc=C1 ... position=1 ${widget_tdb_id} = Ajouter le widget au tableau de bord du profil depuis l'URL ${args_om_dashboard} # Vérification Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Bonjour le monde Une erreur SQL dans le widget ne fait pas planter toute la page Depuis la page d'accueil admin admin ${widget_tdb_id} = Ajouter un widget flexible avec sa requête et son modèle ... template_content=De toutes façons je n'utilise même pas les résultats de la requête ... requete_content=SELECT * FROM openads.cettetablenexistepasoups ... widget_libelle=Oups, je suis planté # On s'attends à une erreur ici sur la page d’accueil : on l'ignore à la connexion Run Keyword And Ignore Error Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget ne doit pas contenir ${widget_tdb_id} De toutes façons je n'utilise même pas les résultats de la requête Le widget doit contenir ${widget_tdb_id} Erreur de base de données. Contactez votre administrateur. # On supprime le widget planté pour ne pas trop influencer les tests suivants avec un message d’erreur sur la page [Teardown] Run Keywords No Operation ... AND Run Keyword If Test Failed Capture Page Screenshot ... AND Run Keyword And Ignore Error Depuis la page d'accueil admin admin ... AND Supprimer le tableau de bord depuis l'URL par l'identifiant ${widget_tdb_id} Un widget sans modèle configuré affiche une erreur de configuration Depuis la page d'accueil admin admin ${uuid}= Evaluate uuid.uuid4() modules=uuid Ajouter la requête ... code=048_${uuid}_req ... libelle=Requête pour widget sans template ... type=sql ... requete=SELECT 'hello' AS greeting ${widget_tdb_id} = Ajouter un widget flexible avec ces arguments ... arguments=om_requetes_codes=048_${uuid}_req ... widget_libelle=Sans template Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Pas de modèle configuré pour ce widget Un widget sans requête configurée affiche une erreur de configuration Depuis la page d'accueil admin admin ${uuid}= Evaluate uuid.uuid4() modules=uuid &{tpl} = Create Dictionary ... libelle=048_${uuid} template sans requête ... code=Bonjour monde ${tpl.id}= Ajouter template ${tpl} ${widget_tdb_id} = Ajouter un widget flexible avec ces arguments ... arguments=template_id=${tpl.id} ... widget_libelle=Sans requête Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Pas de requête configurée pour ce widget Un widget avec un code de requête inexistant affiche une erreur de configuration Depuis la page d'accueil admin admin ${uuid}= Set Variable code_requete_inexistant &{tpl} = Create Dictionary ... libelle=048_${uuid} template requête inexistante ... code=Bonjour monde ${tpl.id}= Ajouter template ${tpl} ${widget_tdb_id} = Ajouter un widget flexible avec ces arguments ... arguments=template_id=${tpl.id}\nom_requetes_codes=048_code_qui_nexiste_pas ... widget_libelle=Requête inexistante Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Une des requêtes configurées pour ce widget n'existe pas Un widget avec un template Twig invalide affiche une erreur Depuis la page d'accueil admin admin ${widget_tdb_id} = Ajouter un widget flexible avec sa requête et son modèle ... template_content={{ syntaxe twig invalide ... requete_content=SELECT 'hello' AS greeting ... widget_libelle=Template invalide Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget doit contenir ${widget_tdb_id} Erreur lors de l'affichage du widget. Une requête sans résultat ne plante pas le widget Depuis la page d'accueil admin admin ${widget_tdb_id} = Ajouter un widget flexible avec sa requête et son modèle ... template_content=On affiche du texte même si la requête ne retouren rien {{ greeting }} ... requete_content=SELECT 'hello' AS greeting WHERE false ... widget_libelle=Requête sans résultat Depuis la page d'accueil ${user_dedie} ${user_dedie} Le widget ne doit pas contenir ${widget_tdb_id} On affiche du texte même si la requête ne retouren rien {{ greeting }} *** Variables *** ${user_dedie}= test_048 ${PROFIL_DEDIE}= TEST_048_WIDGET_FLEXIBLE *** Keywords *** Composition du jeu de données Depuis la page d'accueil admin admin # Créer un utilisateur avec un profil spécifique pour utiliser les widgets créés dans ce test Ajouter le profil depuis le menu ${PROFIL_DEDIE} Ajouter l'utilisateur ... nom=${user_dedie}_user ... email=${user_dedie}@openads.example.net ... login=${user_dedie} ... password=${user_dedie} ... profil=${PROFIL_DEDIE} ... collectivite=agglo Le widget doit contenir [Arguments] ... ${widget_id} ... ${expected} ... ${message}=None ... ${ignore_case}=False Selenium2Library.Element Should Contain css=#widget_${widget_id} ${expected} ${message} ${ignore_case} Le widget ne doit pas contenir [Arguments] ... ${widget_id} ... ${expected} ... ${message}=None ... ${ignore_case}=False Selenium2Library.Element Should Not Contain css=#widget_${widget_id} ${expected} ${message} ${ignore_case} Ajouter un widget flexible avec ces arguments [Arguments] ... ${arguments} ... ${widget_libelle} ${uuid}= Evaluate uuid.uuid4() modules=uuid &{widget} = Create Dictionary ... libelle=048 ${uuid} ${widget_libelle} ... type=file - le contenu du widget provient d'un script sur le serveur ... script=flexible ... arguments=${arguments} Ajouter un widget ${widget} &{args_om_dashboard} = Create Dictionary ... om_widget=${widget.libelle} ... om_profil=${PROFIL_DEDIE} ... bloc=C1 ... position=1 ${widget_tdb_id} = Ajouter le widget au tableau de bord du profil depuis l'URL ${args_om_dashboard} [Return] ${widget_tdb_id} Ajouter un widget flexible avec sa requête et son modèle [Arguments] ... ${template_content} ... ${requete_content} ... ${widget_libelle} # On génère un identifiant unique pour ce widget ${uuid}= Evaluate uuid.uuid4() modules=uuid Ajouter la requête ... code=048_${uuid}_req ... libelle=Requête pour ${widget_libelle} ... type=sql ... requete=${requete_content} &{tpl} = Create Dictionary ... libelle=048_${uuid} template ... code=${template_content} ${tpl.id}= Ajouter template ${tpl} &{widget} = Create Dictionary ... libelle=048 ${uuid} ${widget_libelle} ... type=file - le contenu du widget provient d'un script sur le serveur ... script=flexible ... arguments=template_id=${tpl.id}\nom_requetes_codes=048_${uuid}_req Ajouter un widget ${widget} &{args_om_dashboard} = Create Dictionary ... om_widget=${widget.libelle} ... om_profil=${PROFIL_DEDIE} ... bloc=C1 ... position=2 ${widget_tdb_id} = Ajouter le widget au tableau de bord du profil depuis l'URL ${args_om_dashboard} [Return] ${widget_tdb_id}