From 7ee41e0731d048c15fa31df3c9b21a4bd4a9128f Mon Sep 17 00:00:00 2001
From: Filip Bugos <xbugos@fi.muni.cz>
Date: Sun, 16 Apr 2023 20:18:07 +0200
Subject: [PATCH] feat: User service test 16/04/23

---
 .../fi/pa165/core/user/UserServiceTest.java   | 231 ++++++++++++++++++
 1 file changed, 231 insertions(+)
 create mode 100644 core/src/test/java/cz/muni/fi/pa165/core/user/UserServiceTest.java

diff --git a/core/src/test/java/cz/muni/fi/pa165/core/user/UserServiceTest.java b/core/src/test/java/cz/muni/fi/pa165/core/user/UserServiceTest.java
new file mode 100644
index 0000000..78a712f
--- /dev/null
+++ b/core/src/test/java/cz/muni/fi/pa165/core/user/UserServiceTest.java
@@ -0,0 +1,231 @@
+package cz.muni.fi.pa165.core.user;
+
+import cz.muni.fi.pa165.core.company.Company;
+import cz.muni.fi.pa165.core.device.Device;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.openMocks;
+
+public class UserServiceTest {
+    @InjectMocks
+    private UserService userService;
+
+    @Mock
+    private UserRepository userReposiroyMock;
+
+    @BeforeEach
+    void init() {
+        openMocks(this);
+    }
+
+    @Test
+    void shouldGetUserById() {
+
+        User user = User
+                .builder()
+                .username("Test")
+                .build();
+
+        when(userReposiroyMock.findById(user.getId())).thenReturn(Optional.of(user));
+
+        User result = userService.findById(user.getId());
+
+        verify(userReposiroyMock).findById(user.getId());
+
+        assertEquals(user, result);
+    }
+
+    @Test
+    void shouldCreateNewDevice() {
+
+        User user = User
+                .builder()
+                .username("Test")
+                .build();
+
+        when(userReposiroyMock.save(user)).thenReturn(user);
+
+        User createdUser = userService.create(user);
+
+        verify(userReposiroyMock).save(user);
+
+        assertThat(createdUser).isEqualTo(user);
+    }
+
+    @Test
+    void shouldFindUserByName() {
+
+        User user = User
+                .builder()
+                .username("Test")
+                .build();
+
+        when(userReposiroyMock.findByUsername(user.getUsername())).thenReturn(Optional.of(user));
+
+        User result = userService.findByUsername(user.getUsername());
+
+        verify(userReposiroyMock).findByUsername(user.getUsername());
+
+        assertEquals(user, result);
+    }
+
+    @Test
+    void shouldFindAllUserPageableInt() {
+
+        User user1 = User
+                .builder()
+                .username("Test")
+                .build();
+
+        User user2 = User
+                .builder()
+                .username("Test2")
+                .build();
+
+        Page<User> page = new PageImpl<>(List.of(user1, user2));
+
+        int pageNumber = 0;
+        int pageSize = 10;
+
+        when(userReposiroyMock.findAll(PageRequest.of(pageNumber, pageSize))).thenReturn(page);
+
+        Page<User> result = userService.findAllPageableInt(pageNumber);
+
+        verify(userReposiroyMock).findAll(PageRequest.of(pageNumber, pageSize));
+
+        assertThat(result).containsExactlyInAnyOrder(user1, user2);
+    }
+
+    @Test
+    void shouldDeleteUserById() {
+
+        User user = User
+                .builder()
+                .username("Test")
+                .build();
+
+        when(userReposiroyMock.findById(user.getId())).thenReturn(Optional.of(user));
+
+        User deletedUser = userService.deleteById(user.getId());
+
+        verify(userReposiroyMock).findById(user.getId());
+        verify(userReposiroyMock).save(user); // soft delete
+
+        assertNotNull(deletedUser.getDeletedDateTime());
+        assertEquals(user, deletedUser);
+    }
+
+    @Test
+    void shouldUpdateUser() {
+
+        User originalUser = User
+                .builder()
+                .username("Test1")
+                .build();
+
+        User updatedUser = User
+                .builder()
+                .username("Test2")
+                .build();
+
+        when(userReposiroyMock.findById(originalUser.getId())).thenReturn(Optional.of(originalUser));
+
+        when(userReposiroyMock.save(updatedUser)).thenReturn(updatedUser);
+
+        User result = userService.update(updatedUser, originalUser.getId());
+
+        verify(userReposiroyMock).findById(originalUser.getId());
+        verify(userReposiroyMock).save(updatedUser);
+
+        assertEquals(originalUser.getId(), result.getId());
+        assertEquals(updatedUser.getUsername(), result.getUsername());
+    }
+
+    @Test
+    void shouldHardDeleteAllUsers() {
+        userService.hardDeleteAll();
+        verify(userReposiroyMock).deleteAll();
+    }
+
+    @Test
+    void shouldDeleteAllUsers() {
+        var data = List.of(
+                User.builder().username("Test1").build(),
+                User.builder().username("Test2").build()
+        );
+        when(userReposiroyMock.findAll()).thenReturn(data);
+        userService.deleteAll();
+        verify(userReposiroyMock).findAll();
+        verify(userReposiroyMock).saveAll(data);
+    }
+
+    @Test
+    void shouldDeleteAllUsersIds() {
+        User firstUser = User
+                .builder()
+                .username("Test1")
+                .build();
+
+        User secondUser = User
+                .builder()
+                .username("Test2")
+                .build();
+
+        String[] ids = {firstUser.getId(), secondUser.getId()};
+        when(userReposiroyMock.findById(ids[0])).thenReturn(Optional.of(firstUser));
+        when(userReposiroyMock.findById(ids[1])).thenReturn(Optional.of(secondUser));
+
+        userService.deleteAllById(ids);
+
+        verify(userReposiroyMock).save(firstUser);
+        verify(userReposiroyMock).save(secondUser);
+    }
+
+    @Test
+    void shouldFindAllUsers() {
+        var data = List.of(
+                User.builder().username("Test1").build(),
+                User.builder().username("Test2").build()
+        );
+
+        when(userReposiroyMock.findAll()).thenReturn(data);
+        List<User> result = userService.findAll();
+        verify(userReposiroyMock).findAll();
+        assertEquals(data, result);
+    }
+
+    @Test
+    void shouldFindAllUsersPageable() {
+        int pageNumber = 0;
+        int pageSize = 10;
+        Pageable pageable = PageRequest.of(pageNumber, pageSize);
+
+        var data = List.of(
+                User.builder().username("Test1").build(),
+                User.builder().username("Test2").build()
+        );
+
+        Page<User> pageResult = new PageImpl<>(data, pageable, data.size());
+        when(userReposiroyMock.findAll(pageable)).thenReturn(pageResult);
+
+        Page<User> result = userService.findAllPageable(pageable);
+        verify(userReposiroyMock).findAll(pageable);
+
+        assertEquals(pageResult, result);
+    }
+}
-- 
GitLab