From a855218d4823692b99d04b6bcb21d1af0642dbee Mon Sep 17 00:00:00 2001
From: Andreas Svanberg <andreass@dsv.su.se>
Date: Wed, 10 Jul 2024 15:41:52 +0200
Subject: [PATCH] Failing test

---
 .../scipro/reflection/ReflectionService.java  |  8 ++++++++
 .../reflection/ReflectionServiceImpl.java     |  5 +++++
 .../reflection/ReflectionServiceTest.java     | 20 +++++++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionService.java b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionService.java
index b4a206bf76..c8f4452497 100644
--- a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionService.java
+++ b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionService.java
@@ -14,4 +14,12 @@ public interface ReflectionService {
      * @return the reflection, or {@code null} if none has been submitted
      */
     String getSubmittedReflection(Project project, User author);
+
+    /**
+     * Used by the supervisor when the currently submitted reflection does not meet the minimum requirements.
+     * This is done individually by author.
+     *
+     * @param author the author whose reflection does not meet the minimum requirements.
+     */
+    void requestNewReflection(Project project, User author);
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java
index ccd23a6244..b6f01c95ae 100644
--- a/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/reflection/ReflectionServiceImpl.java
@@ -45,4 +45,9 @@ class ReflectionServiceImpl implements ReflectionService {
                 .map(Author::getReflection)
                 .orElse(null);
     }
+
+    @Override
+    public void requestNewReflection(Project project, User author) {
+
+    }
 }
diff --git a/core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java b/core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
index 8d8d462e31..6e50b9d975 100644
--- a/core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
@@ -101,6 +101,26 @@ public class ReflectionServiceTest extends IntegrationTest {
         assertTrue(reflectionService.hasReachedReflectionProcess(project));
     }
 
+    @Test
+    public void request_resubmission() {
+        LocalDate seminarDate = scheduleSeminar();
+        clock.setDate(seminarDate.plusDays(1));
+        assertTrue(reflectionService.hasToFillInReflection(project, author),
+                "After the final seminar the author should be required to submit a reflection");
+
+        String myReflection = "my reflection";
+        reflectionService.submitReflection(project, author, myReflection);
+        assertEquals(myReflection, reflectionService.getSubmittedReflection(project, author));
+        assertFalse(reflectionService.hasToFillInReflection(project, author),
+                "After submitting the initial reflection it should no longer be required");
+
+        reflectionService.requestNewReflection(project, author);
+        assertTrue(reflectionService.hasToFillInReflection(project, author),
+                "After supervisor requests resubmission the author should now be required to submit a new reflection");
+        assertEquals(myReflection, reflectionService.getSubmittedReflection(project, author),
+                "The old reflection should be saved to make it easier for the student to update it");
+    }
+
     private LocalDate scheduleSeminar() {
         project.setFinalSeminarRuleExempted(true); // to bypass rough draft approval
         FinalSeminarDetails details = new FinalSeminarDetails("Zoom", false, 1, 1, Language.SWEDISH, Language.ENGLISH, "zoom id 123");