*** 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}