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