From 2f399898465d26cf2b200d2f2b23e5a6165a669b Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 16 Apr 2023 06:42:45 +0200
Subject: [PATCH] Introduce UserServiceTest

---
 .../user/UserServiceTest.java                 | 76 +++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserServiceTest.java

diff --git a/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserServiceTest.java b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserServiceTest.java
new file mode 100644
index 00000000..062bc734
--- /dev/null
+++ b/application/module-language-school/src/test/java/org/fuseri/modulelanguageschool/user/UserServiceTest.java
@@ -0,0 +1,76 @@
+package org.fuseri.modulelanguageschool.user;
+
+import org.fuseri.modulelanguageschool.course.Course;
+import org.fuseri.modulelanguageschool.course.Language;
+import org.fuseri.modulelanguageschool.course.ProficiencyLevel;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+
+@SpringBootTest
+class UserServiceTest {
+
+    @Autowired
+    private UserService userService;
+
+    @MockBean
+    private UserRepository userRepository;
+
+    private static final User USER = new User(
+            "xnovak", UserType.STUDENT, "1234fak", "xnovak@emample.com", "Peter", "Novak", new Address(), Set.of(), new HashMap<>());
+    private static final Course COURSE = new Course("AJ1", 10, Language.ENGLISH, ProficiencyLevel.B2);
+    private static final List<Course> COURSE_LIST = List.of(COURSE);
+    private static final User USER_WITH_ENROLLED_COURSE = new User(
+            "xnovak", UserType.STUDENT, "1234fak", "xnovak@emample.com", "Peter", "Novak", new Address(), Set.of(COURSE), Map.of());
+
+    @Test
+    void find() {
+        when(userRepository.findById(anyLong())).thenReturn(Optional.of(USER));
+        User actualUser = userService.find(anyLong());
+        assertEquals(USER, actualUser);
+    }
+
+    @Test
+    void getEnrolled() {
+        Long id = 1L;
+        when(userRepository.getEnrolled(anyLong())).thenReturn(COURSE_LIST);
+        List<Course> actualCourses = userService.getEnrolled(id);
+        assertEquals(COURSE_LIST, actualCourses);
+    }
+
+    @Test
+    void getFinished() {
+        long id = 1L;
+        when(userRepository.getFinished(anyLong())).thenReturn(COURSE_LIST);
+        List<Course> actualCourses = userService.getFinished(id);
+        assertEquals(COURSE_LIST, actualCourses);
+    }
+
+    @Test
+    void addLanguageProficiency() {
+        long id = 1L;
+        Language language = Language.ENGLISH;
+        ProficiencyLevel proficiencyLevel = ProficiencyLevel.B2;
+        when(userRepository.findById(id)).thenReturn(Optional.of(USER));
+        when(userRepository.save(any(User.class))).thenReturn(USER_WITH_ENROLLED_COURSE);
+
+        User updatedUser = userService.addLanguageProficiency(id, language, proficiencyLevel);
+        assertEquals(USER_WITH_ENROLLED_COURSE, updatedUser);
+        verify(userRepository).findById(id);
+        verify(userRepository).save(any(User.class));
+    }
+}
\ No newline at end of file
-- 
GitLab