Skip to content
Snippets Groups Projects
Commit 9b4f1746 authored by Birk Øvstetun Narvhus's avatar Birk Øvstetun Narvhus
Browse files

fixed return value of register endpoint and added test

parent f5723b31
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,8 @@ import ntnu.idatt2016.v233.SmartMat.dto.request.RegisterUserRequest; ...@@ -6,6 +6,8 @@ import ntnu.idatt2016.v233.SmartMat.dto.request.RegisterUserRequest;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority; import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.entity.user.User; import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import ntnu.idatt2016.v233.SmartMat.service.user.UserService; import ntnu.idatt2016.v233.SmartMat.service.user.UserService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -38,7 +40,7 @@ public class UserController { ...@@ -38,7 +40,7 @@ public class UserController {
* @param user The user to be registered. * @param user The user to be registered.
*/ */
@PostMapping("/register") @PostMapping("/register")
public void register(@RequestBody RegisterUserRequest user) { public ResponseEntity<User> register(@RequestBody RegisterUserRequest user) {
if(user.username() == null || user.username().trim().isEmpty() || user.username().length() > 50 || if(user.username() == null || user.username().trim().isEmpty() || user.username().length() > 50 ||
user.password() == null || user.password().trim().isEmpty() || user.password().length() > 50 || user.password() == null || user.password().trim().isEmpty() || user.password().length() > 50 ||
...@@ -46,11 +48,13 @@ public class UserController { ...@@ -46,11 +48,13 @@ public class UserController {
user.firstName() == null || user.firstName().trim().isEmpty() || user.firstName().length() > 50 || user.firstName() == null || user.firstName().trim().isEmpty() || user.firstName().length() > 50 ||
user.lastName() == null || user.lastName().trim().isEmpty() || user.lastName().length() > 50 || user.lastName() == null || user.lastName().trim().isEmpty() || user.lastName().length() > 50 ||
user.birthDate() == null) { user.birthDate() == null) {
return; return ResponseEntity.badRequest()
.build();
} }
if(userService.getUserFromUsername(user.username()).isPresent()) { if(userService.getUserFromUsername(user.username()).isPresent() ||
return; userService.getUserFromEmail(user.email()).isPresent()) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
} }
User newUser = User.builder() User newUser = User.builder()
...@@ -64,7 +68,9 @@ public class UserController { ...@@ -64,7 +68,9 @@ public class UserController {
.build(); .build();
userService.saveUser(newUser); userService.saveUser(newUser);
newUser.setPassword(null);
return ResponseEntity.ok(newUser);
} }
} }
\ No newline at end of file
...@@ -10,8 +10,8 @@ import java.util.Optional; ...@@ -10,8 +10,8 @@ import java.util.Optional;
* uses mysql from server when ran * uses mysql from server when ran
* uses h2 in memory database when testing * uses h2 in memory database when testing
* @author birk * @author birk
* @version 1.0 * @version 1.1
* @since 05.04.2023 * @since 20.04.2023
*/ */
public interface UserRepository extends JpaRepository<User, Long>{ public interface UserRepository extends JpaRepository<User, Long>{
...@@ -23,4 +23,10 @@ public interface UserRepository extends JpaRepository<User, Long>{ ...@@ -23,4 +23,10 @@ public interface UserRepository extends JpaRepository<User, Long>{
Optional<User> findByUsername(String username); Optional<User> findByUsername(String username);
/**
* gets user from email out of database
* @param email email of user
* @return user
*/
Optional<User> findByEmail(String email);
} }
...@@ -12,8 +12,8 @@ import java.util.Optional; ...@@ -12,8 +12,8 @@ import java.util.Optional;
/** /**
* UserService is a class that implements the UserDetailsService interface. * UserService is a class that implements the UserDetailsService interface.
* @author Birk * @author Birk
* @version 1.0 * @version 1.1
* @since 05.04.2023 * @since 20.04.2023
*/ */
@Service @Service
@AllArgsConstructor @AllArgsConstructor
...@@ -89,4 +89,12 @@ public class UserService { ...@@ -89,4 +89,12 @@ public class UserService {
userRepository.delete(user); userRepository.delete(user);
} }
/**
* gets user from email out of database
* @param email email of user
* @return user
*/
public Optional<User> getUserFromEmail(String email) {
return userRepository.findByEmail(email);
}
} }
...@@ -2,9 +2,11 @@ package ntnu.idatt2016.v233.SmartMat.repository; ...@@ -2,9 +2,11 @@ package ntnu.idatt2016.v233.SmartMat.repository;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority; import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.entity.user.User; import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import java.sql.Date; import java.sql.Date;
import java.util.List; import java.util.List;
...@@ -18,9 +20,14 @@ public class UserRepositoryTest { ...@@ -18,9 +20,14 @@ public class UserRepositoryTest {
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Test @Autowired
void testSaveUser() { private TestEntityManager entityManager;
User user = User.builder()
private User user;
@BeforeEach
public void setUp() {
user = User.builder()
.username("testuser") .username("testuser")
.password("password") .password("password")
.enabled(true) .enabled(true)
...@@ -30,6 +37,21 @@ public class UserRepositoryTest { ...@@ -30,6 +37,21 @@ public class UserRepositoryTest {
.dateOfBirth(Date.valueOf("1990-01-01")) .dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER) .authority(Authority.USER)
.build(); .build();
entityManager.persist(user);
}
@Test
void testSaveUser() {
User user = User.builder()
.username("testuserTESTUSER")
.password("passwordTEST")
.enabled(true)
.email("testuser@example.no")
.firstName("TestUSERNAME")
.lastName("UserTEST")
.dateOfBirth(Date.valueOf("1989-01-01"))
.authority(Authority.USER)
.build();
userRepository.save(user); userRepository.save(user);
Optional<User> retrievedUser = userRepository.findByUsername(user.getUsername()); Optional<User> retrievedUser = userRepository.findByUsername(user.getUsername());
...@@ -48,14 +70,6 @@ public class UserRepositoryTest { ...@@ -48,14 +70,6 @@ public class UserRepositoryTest {
@Test @Test
public void findAllTest() { public void findAllTest() {
User user1 = new User();
user1.setUsername("testuser1");
user1.setPassword("password1");
user1.setEnabled(true);
user1.setEmail("testuser1@example.com");
user1.setFirstName("Test1");
user1.setLastName("User1");
userRepository.save(user1);
User user2 = new User(); User user2 = new User();
user2.setUsername("testuser2"); user2.setUsername("testuser2");
user2.setPassword("password2"); user2.setPassword("password2");
...@@ -66,7 +80,6 @@ public class UserRepositoryTest { ...@@ -66,7 +80,6 @@ public class UserRepositoryTest {
userRepository.save(user2); userRepository.save(user2);
List<User> users = userRepository.findAll(); List<User> users = userRepository.findAll();
assertEquals(2, users.size()); assertEquals(2, users.size());
assertEquals(user1.getUsername(), users.get(0).getUsername());
assertEquals(user2.getUsername(), users.get(1).getUsername()); assertEquals(user2.getUsername(), users.get(1).getUsername());
} }
...@@ -87,19 +100,6 @@ public class UserRepositoryTest { ...@@ -87,19 +100,6 @@ public class UserRepositoryTest {
@Test @Test
void testOverwriteUser() { void testOverwriteUser() {
// Create a new user and save it to the database
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
userRepository.save(user);
// Modify the user's details and save it again // Modify the user's details and save it again
User modifiedUser = User.builder() User modifiedUser = User.builder()
.username("testuser") .username("testuser")
...@@ -128,4 +128,16 @@ public class UserRepositoryTest { ...@@ -128,4 +128,16 @@ public class UserRepositoryTest {
assertFalse(userRepository.findByUsername(user.getUsername()).isPresent()); assertFalse(userRepository.findByUsername(user.getUsername()).isPresent());
} }
@Test
void testFindByUsername() {
Optional<User> tempuser = userRepository.findByUsername("testuser");
assertTrue(tempuser.isPresent());
assertEquals("testuser", tempuser.get().getUsername());
assertEquals("password", tempuser.get().getPassword());
assertTrue(tempuser.get().isEnabled());
}
} }
package ntnu.idatt2016.v233.SmartMat.service.user;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import ntnu.idatt2016.v233.SmartMat.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
public void getUserFromUsername_returnsUser_whenUserExists() {
// Arrange
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
when(userRepository.findByUsername(user.getUsername())).thenReturn(Optional.of(user));
// Act
Optional<User> result = userService.getUserFromUsername(user.getUsername());
// Assert
assertTrue(result.isPresent());
assertEquals(user, result.get());
verify(userRepository, times(1)).findByUsername(user.getUsername());
}
@Test
public void getUserFromUsername_returnsEmptyOptional_whenUserDoesNotExist() {
// Arrange
when(userRepository.findByUsername(any())).thenReturn(Optional.empty());
// Act
Optional<User> result = userService.getUserFromUsername("nonexistentuser");
// Assert
assertFalse(result.isPresent());
verify(userRepository, times(1)).findByUsername("nonexistentuser");
}
@Test
public void getUsers_returnsListOfUsers_whenUsersExist() {
// Arrange
List<User> users = new ArrayList<>();
users.add(User.builder().username("test1").build());
users.add(User.builder().username("test2").build());
when(userRepository.findAll()).thenReturn(users);
// Act
List<User> result = userService.getUsers();
// Assert
assertEquals(users, result);
verify(userRepository, times(1)).findAll();
}
@Test
public void updateUser_returnsUser_whenUserExists() {
// Arrange
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
when(userRepository.findByUsername(user.getUsername())).thenReturn(Optional.of(user));
when(userRepository.save(user)).thenReturn(user);
// Act
User result = userService.updateUser(user);
// Assert
assertEquals(user, result);
verify(userRepository, times(1)).findByUsername(user.getUsername());
verify(userRepository, times(1)).save(user);
}
@Test
public void updateUser_throwsUsernameNotFoundException_whenUserDoesNotExist() {
// Arrange
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
when(userRepository.findByUsername(user.getUsername())).thenReturn(Optional.empty());
// Act & Assert
assertThrows(UsernameNotFoundException.class, () -> userService.updateUser(user));
verify(userRepository, times(1)).findByUsername(user.getUsername());
verify(userRepository, times(0)).save(user);
}
@Test
void getUserByEmail_returnsUser_whenUserExists() {
// Arrange
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
when(userRepository.findByEmail(user.getEmail())).thenReturn(Optional.of(user));
// Act
Optional<User> result = userService.getUserFromEmail(user.getEmail());
// Assert
assertTrue(result.isPresent());
assertEquals(user, result.get());
verify(userRepository, times(1)).findByEmail(user.getEmail());
}
@Test
void getPassword_returnsPassword_whenUserExists() {
// Arrange
User user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
.email("testuser@example.com")
.firstName("Test")
.lastName("User")
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.build();
when(userRepository.findByUsername(user.getUsername())).thenReturn(Optional.of(user));
// Act
String result = userService.getPassword(user.getUsername());
// Assert
assertEquals(user.getPassword(), result);
verify(userRepository, times(1)).findByUsername(user.getUsername());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment