From fda86a369408f08b5806c3335e0b658d32db0a87 Mon Sep 17 00:00:00 2001
From: Ruben Backx <r.w.backx@tudelft.nl>
Date: Mon, 11 Sep 2023 15:55:07 +0200
Subject: [PATCH] Test demonstration

---
 .../tudelft/queue/service/RequestService.java |  7 +-
 .../repository/LabRequestRepositoryTest.java  | 66 +++++++++++++++++++
 .../queue/service/RequestServiceUnitTest.java | 28 ++++++++
 3 files changed, 95 insertions(+), 6 deletions(-)
 create mode 100644 src/test/java/nl/tudelft/queue/repository/LabRequestRepositoryTest.java
 create mode 100644 src/test/java/nl/tudelft/queue/service/RequestServiceUnitTest.java

diff --git a/src/main/java/nl/tudelft/queue/service/RequestService.java b/src/main/java/nl/tudelft/queue/service/RequestService.java
index 013a04f2c..e9aa7b0cb 100644
--- a/src/main/java/nl/tudelft/queue/service/RequestService.java
+++ b/src/main/java/nl/tudelft/queue/service/RequestService.java
@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
 
 import javax.transaction.Transactional;
 
+import lombok.Setter;
 import nl.tudelft.labracore.api.AssignmentControllerApi;
 import nl.tudelft.labracore.api.ModuleControllerApi;
 import nl.tudelft.labracore.api.QuestionControllerApi;
@@ -90,18 +91,12 @@ public class RequestService {
 	@Autowired
 	private AssignmentControllerApi asApi;
 
-	@Autowired
-	private RoleDTOService roleDTOService;
-
 	@Autowired
 	private PersonCacheManager pCache;
 
 	@Autowired
 	private RoomCacheManager rCache;
 
-	@Autowired
-	private SessionCacheManager sCache;
-
 	@Autowired
 	private ModuleControllerApi mApi;
 
diff --git a/src/test/java/nl/tudelft/queue/repository/LabRequestRepositoryTest.java b/src/test/java/nl/tudelft/queue/repository/LabRequestRepositoryTest.java
new file mode 100644
index 000000000..cfeb8ad0c
--- /dev/null
+++ b/src/test/java/nl/tudelft/queue/repository/LabRequestRepositoryTest.java
@@ -0,0 +1,66 @@
+package nl.tudelft.queue.repository;
+
+import nl.tudelft.queue.model.LabRequest;
+import nl.tudelft.queue.model.embeddables.AllowedRequest;
+import nl.tudelft.queue.model.enums.CommunicationMethod;
+import nl.tudelft.queue.model.enums.Language;
+import nl.tudelft.queue.model.enums.RequestType;
+import nl.tudelft.queue.model.labs.Lab;
+import nl.tudelft.queue.model.labs.RegularLab;
+import nl.tudelft.queue.model.labs.SlottedLab;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import test.dev.DevQueueApplication;
+import test.nodb.NoDbTestQueueApplication;
+import test.test.TestQueueApplication;
+
+import javax.transaction.Transactional;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Transactional
+@SpringBootTest(classes = NoDbTestQueueApplication.class)
+public class LabRequestRepositoryTest {
+
+    @Autowired
+    private LabRepository labRepository;
+    @Autowired
+    private LabRequestRepository labRequestRepository;
+
+    private Lab lab;
+
+    @BeforeEach
+    void setUp() {
+        lab = labRepository.save(RegularLab.builder()
+                .session(1L)
+                .modules(Set.of(1L))
+                .communicationMethod(CommunicationMethod.TA_VISIT_STUDENT)
+                .allowedRequests(Set.of(AllowedRequest.of(1L, RequestType.QUESTION)))
+                .build());
+    }
+
+    @ParameterizedTest
+    @CsvSource({"ENGLISH_ONLY", "DUTCH_ONLY", "ANY"})
+    void anyLanguagePreferenceMatchesAllLabRequestLanguages(Language lrLanguage) {
+        LabRequest request = LabRequest.builder()
+                .requestType(RequestType.QUESTION)
+                .language(lrLanguage)
+                .requester(1L)
+                .studentGroup(1L)
+                .assignment(1L)
+                .session(lab)
+                .build();
+
+        labRequestRepository.save(request);
+
+        assertThat(labRequestRepository.findAll(labRequestRepository.matchesLanguagePreference(Language.ANY)))
+                .containsExactly(request);
+    }
+
+}
diff --git a/src/test/java/nl/tudelft/queue/service/RequestServiceUnitTest.java b/src/test/java/nl/tudelft/queue/service/RequestServiceUnitTest.java
new file mode 100644
index 000000000..0bc0d4b12
--- /dev/null
+++ b/src/test/java/nl/tudelft/queue/service/RequestServiceUnitTest.java
@@ -0,0 +1,28 @@
+package nl.tudelft.queue.service;
+
+import nl.tudelft.queue.model.LabRequest;
+import nl.tudelft.queue.model.Request;
+import nl.tudelft.queue.model.SelectionRequest;
+import nl.tudelft.queue.model.embeddables.RequestEventInfo;
+import nl.tudelft.queue.model.enums.RequestStatus;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.security.access.AccessDeniedException;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.when;
+
+public class RequestServiceUnitTest {
+
+    private final RequestService requestService = new RequestService();
+
+    @Test
+    void rejectSelectedRequestThrowsAccessDeniedException() {
+        SelectionRequest request = SelectionRequest.builder().eventInfo(RequestEventInfo.builder().status(RequestStatus.SELECTED).build()).build();
+        assertThrows(AccessDeniedException.class, () -> requestService.rejectSelectionRequest(request, null, null, null));
+    }
+
+}
-- 
GitLab