kun

un outil de sondage - retour accueil

git clone git://bebou.netlib.re/kun
Log | Files | Refs | README |

commit 458b6e9ac153d6b164acedd29cd47a1d9e368a21
parent af4587239aba0d893f3d25eb49e50634aefbe101
Auterice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Fri, 20 Sep 2024 20:05:16 +0200

Ajout de tests !

L'idée est saugrenue et certainement pas bonne

tests.sh déroule tout un scénario et on capture sa sortie, à la fois
stout et stderr. On stocke ça dans un fichier de référence. Quand on
veut tester on fait "make test", on joue le scénario et on check si la
sortie est identique avec un diff.

Problèmes :

  * on teste pas séparement les deux sorties, j'ai l'intuition que c'est
    pas une bonne idée
  * on teste pas l'état des dossiers et fichiers de sondage alors que
    c'est ce qui importe vraiment, on teste ce que les fonctions veulent
    nous en faire voir
  * puisque la sortie change à chaque fois du fait de l'utilisation de
    mktemp il faut baliser toutes les aprtie changeantes avec des {}
    (les id en l'occurence) pour les filtrer dans la sortie. Ca me
    paraît pas fou même si pour le moment ça fonctionne. Il faudra
    probablement envisager de nettoyer les inputs utilisateurices (les
    noms par ex) pour qu'il n'y ait pas de {} dedans.

Diffstat:
Mcommands.sh | 38+++++++++++++++++++-------------------
Mmakefile | 8++++++++
Atests/reference | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atests/tests.sh | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 172 insertions(+), 19 deletions(-)

diff --git a/commands.sh b/commands.sh @@ -12,8 +12,8 @@ create() { else $EDITOR $id/question fi if [ -s "$id/question" ];then - _success "id du sondage : ${id##/tmp/kun.}" - printf ">create %s\n" $(echo "$id" | cut -d'.' -f2) + _success "id du sondage : {${id##/tmp/kun.}}" + printf ">create {%s}\n" $(echo "$id" | cut -d'.' -f2) else _die "sondage vide, il n'a pas été créé" fi } @@ -41,10 +41,10 @@ addanswer() { fi [ -f "$repfile" ] || { _die "Erreur dans l'écriture de la réponse";return 1;} - _success "réponse $idrep de $name soumise au sondage $id" + _success "réponse {$idrep} de $name soumise au sondage {$id}" _success "recap de la réponse :" _success "$(cat $repfile)" - printf ">addanswer %s %s %s\n" "$id" "$name" "$idrep" + printf ">addanswer {%s} %s {%s}\n" "$id" "$name" "$idrep" printf "%s\n" $(cat $repfile) } @@ -63,10 +63,10 @@ modifyanswer() { fi [ -f "$repfile" ] || { _die "Erreur dans l'écriture de la réponse";return 1;} - _success "réponse $idrep de $name soumise au sondage $id" + _success "réponse {$idrep} de $name soumise au sondage {$id}" _success "recap de la réponse :" _success "$(cat $repfile)" - printf ">modifyanswer %s %s %s\n" "$id" "$name" "$idrep" + printf ">modifyanswer {%s} %s {%s}\n" "$id" "$name" "$idrep" printf "%s\n" $(cat $repfile) } @@ -77,10 +77,10 @@ deletequestion() { id="${1:?missing parameter}" _questionexists "$id" || { _die "Sondage n'existe pas"; return 1; } - rm -rf /tmp/kun.$id || { _die "Erreur dans la suppression de $id"; return 1; } + rm -rf /tmp/kun.$id || { _die "Erreur dans la suppression de {$id}"; return 1; } - _success "Sondage $id supprimé" - printf ">deletequestion %s" "$id" + _success "Sondage {$id} supprimé" + printf ">deletequestion {%s}\n" "$id" } # supprimer une réponse @@ -92,10 +92,10 @@ deleteanswer() { _questionexists "$id" || { _die "Sondage n'existe pas"; return 1; } _answerexists "$id" "$idrep" || { _die "Réponse n'existe pas"; return 1; } rm /tmp/kun.$id/*-$idrep \ - || { _die "Erreur dans la suppression de la réponse $idrep du sondage $id"; return 1; } + || { _die "Erreur dans la suppression de la réponse {$idrep} du sondage {$id}"; return 1; } - _success "Question $idrep du sondage $id supprimée" - printf ">deleteanswer %s %s\n" "$id" "$idrep" + _success "Question {$idrep} du sondage {$id} supprimée" + printf ">deleteanswer {%s} {%s}\n" "$id" "$idrep" } # voir les résultats d'une question @@ -105,10 +105,10 @@ results() { id="${1:?missing parameter}" _questionexists "$id" || { _die "Sondage n'existe pas"; return 2; } - _ananswerexists "$id" || { _die "Le sondage $id n'a pas encore de réponse"; return 1; } + _ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; } answers=$(find /tmp/kun.$id -type f -not -name question) - printf ">results %s\n" "$id" + printf ">results {%s}\n" "$id" cat $answers | sort | uniq -c | sort -rn } @@ -120,10 +120,10 @@ getpeople() { id="${1:?missing parameter}" _questionexists "$id" || { _die "Sondage n'existe pas"; return 2; } - _ananswerexists "$id" || { _die "Le sondage $id n'a pas encore de réponse"; return 1; } + _ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; } - answers=$(find /tmp/kun.$id -type f -not -name question) - printf ">getpeople %s\n" "$id" + answers=$(find /tmp/kun.$id -type f -not -name question | sort) + printf ">getpeople {%s}\n" "$id" printf "%s\n" $answers | cut -d'-' -f1 | xargs -n1 basename @@ -136,7 +136,7 @@ getanswer() { id="${1:?missing parameter}";name="${2:?missing parameter}" _nameexists "$id" "$name" \ - || { _die "Cette personne n'a pas répondu à ce sondage";return 1;} - printf ">getanswer %s %s\n" "$id" "$name" + || { _die "$name n'a pas répondu à ce sondage";return 1;} + printf ">getanswer {%s} {%s}\n" "$id" "$name" cat /tmp/kun.$id/$name-* } diff --git a/makefile b/makefile @@ -5,6 +5,14 @@ all: kun kun: kun.sh commands.sh utils.sh < $< sed -E 's,\./utils,/usr/local/share/kun/utils,;s,\./commands,/usr/local/share/kun/commands,' > $@ +test: + @( tests/tests.sh 2>&1 | sed -E 's,\{[^}]+\},{id},g' ) | diff - tests/reference \ + && echo "Réussite" \ + || echo "Echec" + +tests/reference: *.sh tests/tests.sh + ( tests/tests.sh 2>&1 | sed -E 's,\{[^}]+\},{id},g' ) > $@ + install: mkdir -p ${PREFIX}/bin mkdir -p ${PREFIX}/share/kun diff --git a/tests/reference b/tests/reference @@ -0,0 +1,82 @@ + +Les erreurs de paramètres : + +Commande n'existe pas +Commande n'existe pas +./kun.sh: 25: 1: missing parameter +./kun.sh: 25: 2: missing parameter +./kun.sh: 56: 1: missing parameter +./kun.sh: 56: 2: missing parameter +find: ‘/tmp/kun.azdad/’: Aucun fichier ou dossier de ce type +Réponse n'existe pas +./kun.sh: 77: 1: missing parameter +Sondage n'existe pas +./kun.sh: 90: 1: missing parameter +./kun.sh: 90: 2: missing parameter +Sondage n'existe pas +./kun.sh: 105: 1: missing parameter +Sondage n'existe pas +./kun.sh: 120: 1: missing parameter +Sondage n'existe pas +./kun.sh: 136: 1: missing parameter +./kun.sh: 136: 2: missing parameter +find: ‘/tmp/kun.azdazd/’: Aucun fichier ou dossier de ce type +azdazd n'a pas répondu à ce sondage + +Un scénario : + +id du sondage : {id} +réponse {id} de alice soumise au sondage {id} +recap de la réponse : +lundi +mercredi +>results {id} + 1 mercredi + 1 lundi +Ce nom a déjà été pris +réponse {id} de victor soumise au sondage {id} +recap de la réponse : +mercredi +>addanswer {id} victor {id} +mercredi +azdazd n'a pas répondu à ce sondage +>getanswer {id} {id} +mercredi +>results {id} + 2 mercredi + 1 lundi +>getpeople {id} +alice +victor +Réponse n'existe pas +réponse {id} de alice soumise au sondage {id} +recap de la réponse : + +>modifyanswer {id} alice {id} + +>results {id} + 1 mercredi +réponse {id} de alice soumise au sondage {id} +recap de la réponse : +lundi +>modifyanswer {id} alice {id} +lundi +>results {id} + 1 mercredi + 1 lundi +réponse {id} de alice soumise au sondage {id} +recap de la réponse : +mardi +>modifyanswer {id} alice {id} +mardi +>results {id} + 1 mercredi + 1 mardi +Question {id} du sondage {id} supprimée +>deleteanswer {id} {id} +>getpeople {id} +victor +>results {id} + 1 mercredi +Sondage {id} supprimé +>deletequestion {id} diff --git a/tests/tests.sh b/tests/tests.sh @@ -0,0 +1,63 @@ +#! /bin/sh + +rm -rf /tmp/kun.testid + +<<. cat + +Les erreurs de paramètres : + +. + +./kun.sh azdazdazd +./kun.sh "azda;ls" + +./kun.sh addanswer +./kun.sh addanswer azdazd + +./kun.sh modifyanswer +./kun.sh modifyanswer azdad +./kun.sh modifyanswer azdad azdazd + +./kun.sh deletequestion +./kun.sh deletequestion azdad + +./kun.sh deleteanswer +./kun.sh deleteanswer azdazd +./kun.sh deleteanswer azdazd azdazd + +./kun.sh results +./kun.sh results azdazd + +./kun.sh getpeople +./kun.sh getpeople azdazd + +./kun.sh getanswer +./kun.sh getanswer azdazd +./kun.sh getanswer azdazd azdazd + +<<. cat + +Un scénario : + +. + +id=$(./kun.sh create "lundi\nmardi\nmercredi" | tr -d '{}' | cut -f2) +idrep=$(./kun.sh addanswer "$id" alice "lundi\nmercredi" | tr -d '{}' | head -n1 | cut -f4) +./kun.sh results "$id" +./kun.sh addanswer "$id" alice +./kun.sh addanswer "$id" victor "mercredi" +./kun.sh getanswer "$id" azdazd +./kun.sh getanswer "$id" victor +./kun.sh results "$id" +./kun.sh getpeople "$id" +./kun.sh modifyanswer "$id" azdazd "mardi" +./kun.sh modifyanswer "$id" "$idrep" "azdazd" +./kun.sh results "$id" +./kun.sh modifyanswer "$id" "$idrep" "lundi" +./kun.sh results "$id" +./kun.sh modifyanswer "$id" "$idrep" "mardi" +./kun.sh results "$id" +./kun.sh deleteanswer "$id" "$idrep" +./kun.sh getpeople "$id" +./kun.sh results "$id" +./kun.sh deletequestion "$id"