*** Settings ***
Documentation Test du widget flexible, avec plusieurs templates et om_requetes
Resource resources/resources.robot
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 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}