Ecriture des TNR

Structure des répertoires

Le répertoire du dépot vitam-itest est strucutré de la façon suivante :

vitam-itests
                |------- data

Dossier vitam-itests : contient les fichiers de configurations des tests fonctionnels.

Dossier data : contient les éventuels jeux de données nécessaires à l’exécution des tests.

Fichiers de Configuration

Nommage des fichiers

Un fichier regroupe tous les tests à effectuer sur une fonctionnalité. Il ne peut y avoir deux fonctionnalités dans un fichier de configuration.

On va par exemple réaliser :

  • un fichier pour les tests sur l’Ingest
  • un fichier pour les test sur l’accès aux unités archivistiques

Les noms des fichiers sont composés de la façon suivante :

EndPoint-Fonctionnalité.feature

Par exemple :

access-archive-unit.feature
admin-logbook-traceability.feature

Informations transverses

Les fichiers de configuration doivent contenir les informations suivantes qui s’appliqueront ensuite à l’ensemble des scénarios du fichier :

# language : information obligatoire. Correspond à la langue utilisée pour les descriptions. Par exemple :

language : fr.

Annotation : information optionnelle. L’annotation permet par la suite de lancer uniquement un fichier de configuration en ligne de commande en utilisant son annotation en paramètre. Par exemple :

@AccessArchiveUnit

Fonctionnalité : information obligatoire. La fonctionnalité est une description qui permet d’identifier le périmètre testé. Il est notamment repris dans les rapports réalisés à la fin d’une campagne de test. Par exemple :

Fonctionnalité: Recherche une archive unit existante

Contexte : information optionnelle. Les informations contenues dans contexte sont des actions qui vont s’exécuter pour chacun des scénarios. A ce titre, elles s’écrivent comme les actions d’un scénario. Le constexte doit être indenté de 1 par rapport aux autres éléments. Par exemple :

Contexte:
Etant donné les tests effectués sur le tenant 0

Ecriture d’un scénario

Structure d’un scénario

Un scénario correspond à un test. Son nom doit être défini de la façon suivante :

Scénario: Description du scénario

Il doit être sur la même indentation que le contexte, soit 1 par rapport à la fonctionnalité, à l’annotation et au langage.

Un scénario est constitué d’une succession d’actions, chacune décrite sur une ligne.

Les actions sont composées des trois informations suivantes :

  • Contexte
  • Fonction
  • Paramètre (pas toujours obligatoire)

Actions d’étapes : permet d’introduire l’action, de l’insérer par rapport à l’action précédente. La liste des contextes disponibles se trouve en annexe.

Fonction : mobilise, via un langage naturel, une fonction de Vitam. La liste des fonctions disponibles se trouve en annexe.

Paramètre : certaines fonctions ont besoin d’être suivies d’un paramètre. Ils sont listés dans le tableau des fonctionnalités disponibles en annexe.

Les actions doivent être indentées de 1 par rapport aux scénarios.

Exemple d’un scénario constitué de trois actions :

Scénario: SIP au mauvais format
  Etant donné un fichier SIP nommé data/SIP_KO/ZIP/KO_SIP_Mauvais_Format.pdf
  Quand je télécharge le SIP
  Alors le statut final du journal des opérations est KO

Insérer une requète DSL

Certaines fonctions nécessitent l’entrée de requêtes DSL en paramètre. Celles-ci doivent être insérées entre guillemets (” ”), après un retour à la ligne à la suite de la fonction.

Voici un exemple d’une action suivie d’une requête DSL :

Et j'utilise la requête suivante
        """
        { "$roots": [],
                "$query": [
                { "$and": [
                        { "$gte": {
                        "StartDate": "1914-01-01T23:00:00.000Z"
                                } }, {"$lte": {
                                "EndDate": "1918-12-31T22:59:59.000Z"
                                } } ],
                        "$depth": 20}],
                        "$filter": {"$orderby": { "TransactedDate": 1 }
                        }, "$projection": {
                        "$fields": {"TransactedDate": 1, "#id": 1, "Title": 1, "#object": 1, "DescriptionLevel": 1, "EndDate": 1, "StartDate": 1}}}
        """

Insérer un tableau

Certaines fonctions attendent un tableau en paramètre. Les lignes des tableaux doivent simplement être séparées par des “pipes” ( | ).

Voici un exemple de fonction prenant un tableau en paramètre.

  Alors les metadonnées sont
| Title            | Liste des armements |
| DescriptionLevel | Item                |
| StartDate        | 1917-01-01          |
| EndDate          | 1918-01-01          |

Annexes

Liste des actions d’étapes disponibles

Les types d’actions sont les suivants :

  • une situation initial (les acquis) : Etant donné
  • un événement survient : Quand (peut être suivi de Et et/ou Mais)
  • on s’assure de l’obtention de certains résultats : Alors (peut être suivi de Et et/ou Mais)
Action
Etant donné
Quand
Alors
Mais
Et

Liste des fonctions disponibles

Fonctionnalité Doit être suivi par
les tests effectués sur le tenant (*) un tenant
les données du jeu de test du SIP nommé (.*) un fichier
un fichier SIP nommé (.*) un fichier
je télécharge le SIP une autre action
je recherche le journal des opérations une autre action
je télécharge son fichier ATR une autre action
je recherche le JCV de l’unité archivistique dont le titre est (.*) un titre d’unité archivistique
je recherche le JCV du groupe d’objet de l’unité archivistique dont le titre est (.*) un titre d’unité archivistique
le statut final du journal des opérations est (.*) un statut
le[s]? statut[s]? (?:de l’événement|des événements) (.*) (?:est|sont) (.*) un ou plusieur evType et un Statut
l’outcome détail de l’événement (.*) est (.*) un outcome detail et une valeur
l’état final du fichier ATR est (.*) un statut
le fichier ATR contient (.*) balise[s] de type (.*) un nombre et un type de balise
le fichier ATR contient les valeurs (.*) une ou plusieurs valeurs séparées par des virgules
le fichier ATR contient la chaîne de caractères (.*) un texte ou une simple chaîne de caractères
j’utilise la requête suivante une requête
j’utilise le fichier de requête suivant (.*) un fichier
j’utilise dans la requête le GUID de l’unité archivistique pour le titre (.*) un titre d’unité archivistique
j’utilise dans la requête le paramètre (.*) avec la valeur (.*) un nom de paramêtre et une valeur de remplacement
je recherche les unités archivistiques une autre action
je recherche les groupes d’objets des unités archivistiques une autre action
je recherche les groupes d’objets de l’unité archivistique dont le titre est (.*) un titre d’unité archivistique
le nombre de résultat est (.*) un nombre
les metadonnées sont (.*) un tableau
les metadonnées pour le résultat (.*) un nombre et un tableau
je recherche les registres de fonds (.*) une autre action
le nombre de registres de fonds est (.*) un nombre
les metadonnées pour le registre de fond sont un tableau
je recherche les détails du registre des fonds pour le service producteur (.*) un identifiant de service producteur
le nombre de détails du registre des fonds est (.*) un nombre
les metadonnées pour le détail du registre des fonds sont un tableau