From fba9f79bac8e49e017c9959f9a508f5435278f2f Mon Sep 17 00:00:00 2001
From: abdu <abdukiran@gmail.com>
Date: Wed, 2 Oct 2024 22:08:13 +0200
Subject: [PATCH] add integration test for createuser method

---
 .../com/cloudcomputing/todo/dto/UserDTO.java  |  2 +-
 .../com/cloudcomputing/todo/entity/User.java  |  2 +-
 .../todo/mapper/UserMapper.java               |  2 ++
 .../todo/repository/UserRepository.java       |  3 ++
 .../todo/service/UserService.java             | 29 ++++++++++++++++++-
 .../todo/service/UserServiceTest.java         | 28 ++++++++++++++++++
 6 files changed, 63 insertions(+), 3 deletions(-)
 create mode 100644 src/test/java/com/cloudcomputing/todo/service/UserServiceTest.java

diff --git a/src/main/java/com/cloudcomputing/todo/dto/UserDTO.java b/src/main/java/com/cloudcomputing/todo/dto/UserDTO.java
index 7d67424..0472e4d 100644
--- a/src/main/java/com/cloudcomputing/todo/dto/UserDTO.java
+++ b/src/main/java/com/cloudcomputing/todo/dto/UserDTO.java
@@ -6,7 +6,7 @@ import lombok.Setter;
 @Getter
 @Setter
 public class UserDTO {
-    private Long userId;
+    private String userId;
     private String userName;
     private String password;
 }
diff --git a/src/main/java/com/cloudcomputing/todo/entity/User.java b/src/main/java/com/cloudcomputing/todo/entity/User.java
index cc04a36..66026dd 100644
--- a/src/main/java/com/cloudcomputing/todo/entity/User.java
+++ b/src/main/java/com/cloudcomputing/todo/entity/User.java
@@ -10,7 +10,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @Document(collection = "users")
 public class User {
     @Id
-    private Long userId;
+    private String userId;
     private String userName;
     private String passwordHash;
 }
diff --git a/src/main/java/com/cloudcomputing/todo/mapper/UserMapper.java b/src/main/java/com/cloudcomputing/todo/mapper/UserMapper.java
index f36a7d7..b20fda9 100644
--- a/src/main/java/com/cloudcomputing/todo/mapper/UserMapper.java
+++ b/src/main/java/com/cloudcomputing/todo/mapper/UserMapper.java
@@ -2,7 +2,9 @@ package com.cloudcomputing.todo.mapper;
 
 import com.cloudcomputing.todo.dto.UserDTO;
 import com.cloudcomputing.todo.entity.User;
+import org.springframework.stereotype.Component;
 
+@Component
 public class UserMapper {
     public UserDTO entityToDto(User user) {
         UserDTO userDTO = new UserDTO();
diff --git a/src/main/java/com/cloudcomputing/todo/repository/UserRepository.java b/src/main/java/com/cloudcomputing/todo/repository/UserRepository.java
index 9646f9e..c3c6cf2 100644
--- a/src/main/java/com/cloudcomputing/todo/repository/UserRepository.java
+++ b/src/main/java/com/cloudcomputing/todo/repository/UserRepository.java
@@ -4,4 +4,7 @@ import com.cloudcomputing.todo.entity.User;
 import org.springframework.data.mongodb.repository.MongoRepository;
 
 public interface UserRepository extends MongoRepository<User, String> {
+    boolean existsByUserName(String userName);
+    boolean existsByUserId(String userId);
+    User findByUserName(String userName);
 }
diff --git a/src/main/java/com/cloudcomputing/todo/service/UserService.java b/src/main/java/com/cloudcomputing/todo/service/UserService.java
index 4ea7476..7278021 100644
--- a/src/main/java/com/cloudcomputing/todo/service/UserService.java
+++ b/src/main/java/com/cloudcomputing/todo/service/UserService.java
@@ -1,2 +1,29 @@
-package com.cloudcomputing.todo.service;public class UserService {
+package com.cloudcomputing.todo.service;
+
+import com.cloudcomputing.todo.dto.UserDTO;
+import com.cloudcomputing.todo.entity.User;
+import com.cloudcomputing.todo.mapper.UserMapper;
+import com.cloudcomputing.todo.repository.UserRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserService {
+
+    @Autowired
+    private UserMapper userMapper;
+    @Autowired
+    private UserRepository userRepository;
+
+    public User createUser(UserDTO userDTO) {
+        User newUser;
+
+        if(userRepository.existsByUserId(userDTO.getUserId()) || userRepository.existsByUserName(userDTO.getUserName())){
+            newUser = userRepository.findByUserName(userDTO.getUserName());
+        } else {
+            newUser = userMapper.dtoToEntity(userDTO);
+        }
+
+        return userRepository.save(newUser);
+    }
 }
diff --git a/src/test/java/com/cloudcomputing/todo/service/UserServiceTest.java b/src/test/java/com/cloudcomputing/todo/service/UserServiceTest.java
new file mode 100644
index 0000000..1935066
--- /dev/null
+++ b/src/test/java/com/cloudcomputing/todo/service/UserServiceTest.java
@@ -0,0 +1,28 @@
+package com.cloudcomputing.todo.service;
+
+import com.cloudcomputing.todo.dto.UserDTO;
+import com.cloudcomputing.todo.entity.User;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+@SpringBootTest
+public class UserServiceTest {
+
+    @Autowired
+    private UserService userService;
+
+    @Test
+    public void testCreateUser(){
+        UserDTO userToCreate = new UserDTO();
+        userToCreate.setUserName("abduTest");
+        userToCreate.setPassword("abduTestPassword");
+
+        User createdUser = userService.createUser(userToCreate);
+        assertNotNull(createdUser);
+        assertEquals(userToCreate.getUserName(), createdUser.getUserName());
+    }
+}
-- 
GitLab