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:
M | commands.sh | | | 38 | +++++++++++++++++++------------------- |
M | makefile | | | 8 | ++++++++ |
A | tests/reference | | | 82 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | tests/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 : + +[91mCommande n'existe pas[0m +[91mCommande n'existe pas[0m +./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 +[91mRéponse n'existe pas[0m +./kun.sh: 77: 1: missing parameter +[91mSondage n'existe pas[0m +./kun.sh: 90: 1: missing parameter +./kun.sh: 90: 2: missing parameter +[91mSondage n'existe pas[0m +./kun.sh: 105: 1: missing parameter +[91mSondage n'existe pas[0m +./kun.sh: 120: 1: missing parameter +[91mSondage n'existe pas[0m +./kun.sh: 136: 1: missing parameter +./kun.sh: 136: 2: missing parameter +find: ‘/tmp/kun.azdazd/’: Aucun fichier ou dossier de ce type +[91mazdazd n'a pas répondu à ce sondage[0m + +Un scénario : + +[92mid du sondage : {id}[0m +[92mréponse {id} de alice soumise au sondage {id}[0m +[92mrecap de la réponse :[0m +[92mlundi +mercredi[0m +>results {id} + 1 mercredi + 1 lundi +[91mCe nom a déjà été pris[0m +[92mréponse {id} de victor soumise au sondage {id}[0m +[92mrecap de la réponse :[0m +[92mmercredi[0m +>addanswer {id} victor {id} +mercredi +[91mazdazd n'a pas répondu à ce sondage[0m +>getanswer {id} {id} +mercredi +>results {id} + 2 mercredi + 1 lundi +>getpeople {id} +alice +victor +[91mRéponse n'existe pas[0m +[92mréponse {id} de alice soumise au sondage {id}[0m +[92mrecap de la réponse :[0m +[92m[0m +>modifyanswer {id} alice {id} + +>results {id} + 1 mercredi +[92mréponse {id} de alice soumise au sondage {id}[0m +[92mrecap de la réponse :[0m +[92mlundi[0m +>modifyanswer {id} alice {id} +lundi +>results {id} + 1 mercredi + 1 lundi +[92mréponse {id} de alice soumise au sondage {id}[0m +[92mrecap de la réponse :[0m +[92mmardi[0m +>modifyanswer {id} alice {id} +mardi +>results {id} + 1 mercredi + 1 mardi +[92mQuestion {id} du sondage {id} supprimée[0m +>deleteanswer {id} {id} +>getpeople {id} +victor +>results {id} + 1 mercredi +[92mSondage {id} supprimé[0m +>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"