From cdcc9ec5922f780b6c51d9581dd5e6ad669a9240 Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Sat, 01 Jul 2023 11:19:15 +0000 Subject: [PATCH] ✨ : compute score for quiz --- src/main/java/fr/univ_lille/gitlab/classrooms/quiz/Quiz.java | 9 ++++++++- src/test/java/fr/univ_lille/gitlab/classrooms/quiz/QuizTest.java | 29 ++++++++++++++++++++++++++++- src/test/resources/quiz/sample.md | 84 ------------------------------------------------------------------------------------ 3 file(s) changed, 36 insertion(s)(+), 86 deletion(s)(-) diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/Quiz.java b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/Quiz.java --- a/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/Quiz.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/quiz/Quiz.java @@ -57,6 +57,13 @@ }); } public boolean isFullyAnswered(){ - return this.questions.stream().allMatch(question -> question.isAnswered()); + return this.questions.stream().allMatch(Question::isAnswered); + } + + /** + * Computes scoring for the quiz. + */ + public long score() { + return this.questions.stream().filter(Question::isCorrect).count(); } } diff --git a/src/test/java/fr/univ_lille/gitlab/classrooms/quiz/QuizTest.java b/src/test/java/fr/univ_lille/gitlab/classrooms/quiz/QuizTest.java --- a/src/test/java/fr/univ_lille/gitlab/classrooms/quiz/QuizTest.java +++ b/src/test/java/fr/univ_lille/gitlab/classrooms/quiz/QuizTest.java @@ -26,7 +26,7 @@ var quiz = Quiz.fromMarkdown(sampleQuizContent, "sample"); assertNotNull(quiz); assertEquals("sample", quiz.getName()); - assertEquals(17, quiz.getQuestions().size()); + assertEquals(2, quiz.getQuestions().size()); } @Test @@ -43,5 +43,32 @@ quiz.getQuestions().forEach(it -> it.answer()); assertTrue(quiz.isFullyAnswered()); + } + + @Test + void shouldHaveAScoreOfZero_whenAllAnswersAreIncorrect(){ + var quiz = Quiz.fromMarkdown(sampleQuizContent, "sample"); + + // answer no questions + assertEquals(0, quiz.score()); + } + + @Test + void shouldHaveAScoreOfOne_whenOneAnswerIsIncorrect(){ + var quiz = Quiz.fromMarkdown(sampleQuizContent, "sample"); + + quiz.getQuestions().get(0).getAnswers().get(1).select(null); + + assertEquals(1, quiz.score()); + } + + @Test + void shouldHaveAScoreOfTwo_whenTwoAnswerAreIncorrect(){ + var quiz = Quiz.fromMarkdown(sampleQuizContent, "sample"); + + quiz.getQuestions().get(0).getAnswers().get(1).select(null); + quiz.getQuestions().get(1).getAnswers().get(3).select(null); + + assertEquals(2, quiz.score()); } } \ No newline at end of file diff --git a/src/test/resources/quiz/sample.md b/src/test/resources/quiz/sample.md --- a/src/test/resources/quiz/sample.md +++ b/src/test/resources/quiz/sample.md @@ -9,87 +9,3 @@ [ ] Ni sur le serveur, ni sur le client [ ] A la fois côté client et côté serveur [ ] Côté client dans un navigateur Internet [x] Côté serveur dans un moteur de servlet - -# En pratique, une servlet est invoquée : -[ ] En lançant un programme dans un terminal -[ ] En instanciant une classe -[ ] Via le protocole FTP -[x] Via le protocole HTTP - -# Une servlet peut servir à générer : -[x] Une page HTML -[x] Un document PDF -[x] Une image -[x] Un flux audio - -# Une servlet est associée à un objet dit singleton car : -[ ] Une servlet traite la requête d’un client et est supprimée -[x] Une seule instance de la servlet est présente dans le moteur de servlets -[ ] Tout le contenu dynamique d’un site web doit être écrit dans une seule servlet -[ ] Une servlet ne peut traiter la requête que d’un seul client à la fois - -# La méthode getParameter permet de : -[ ] Récupérer les paramètres de fonctionnement du serveur Web -[ ] Configurer une servlet avec des options -[x] Récupérer le texte saisi dans un formulaire HTML -[ ] Récupérer des valeurs de paramètres issus d’en-têtes HTTP - -# Une JSP est un programme qui peut contenir du code : -[x] HTML -[x] JavaScript -[ ] PHP -[x] Java - -# Dans une JSP, les balises <% et %> permettent de : -[ ] Faire des opérations de comparaison de valeurs -[ ] Mettre en forme du texte -[x] Déclarer des blocs de code -[ ] Déclarer des commentaires - -# Dans une JSP, la balise <%? : -[ ] Permet de demander à l’utilisateur de saisir un texte -[ ] Permet d’effectuer un test -[ ] Permet d’afficher la valeur d’une expression -[x] N’existe pas - -# Les variables prédéclarées suivantes existent en JSP : -[x] response -[x] session -[x] out -[ ] printIn - -# Les JSP et les servlets sont deux solutions : -[x] Qui permettent de mettre en place des pages web dynamiques -[ ] Qui n’ont aucun point en commun -[x] Qui sont invoquées via le protocole HTTP -[x] Qui utilisent toutes les deux le langage Java - -# Dans une servlet, la méthode doPost : -[x] A la même signature que la méthode service -[x] Permet de traiter le message POST du protocole HTTP -[ ] Permet d’envoyer un mail -[x] Permet de définir des traitements différents selon les requêtes HTTP - -# La notion de session : -[ ] Est nécessairement associée à un login et un mot de passe -[x] Permet de suivre l’activité d’un client -[x] Est identique pour les JSP et les servlet -[x] A une durée de vie maximale - -# Le mécanisme dit Request Dispatcher permet de : -[x] Transférer la réponse d’une servlet à une JSP -[x] Inclure le contenu désigné par un URL HTTP dans une servlet -[ ] Définir des priorités entre différentes requêtes HTTP -[ ] Envoyer la réponse d’une servlet - -# La méthode init d’une servlet : -[x] Est invoquée par le moteur de servlet -[ ] Remplace le constructeur de la classe de la servlet -[x] Définit des traitements d’initialisation de la servlet -[ ] Peut être appelée par le développeur lorsqu’il souhaite réinitialiser une servlet - -# Quel est le port par défaut sur lequel fonctionne HTTP ? -= 80 - -# Par défaut, sur quel port Tomcat délivre-t-il son contenu ? -= 8080 -- tangled.sh