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

Merge branch 'bugfix/88-fix-response-on-register' into 'main'

Resolve "Fix response on register"

Closes #88

See merge request idatt2106-v23-03/backend!49
parents f5723b31 9b4f1746
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;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
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.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -38,7 +40,7 @@ public class UserController {
* @param user The user to be registered.
*/
@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 ||
user.password() == null || user.password().trim().isEmpty() || user.password().length() > 50 ||
......@@ -46,11 +48,13 @@ public class UserController {
user.firstName() == null || user.firstName().trim().isEmpty() || user.firstName().length() > 50 ||
user.lastName() == null || user.lastName().trim().isEmpty() || user.lastName().length() > 50 ||
user.birthDate() == null) {
return;
return ResponseEntity.badRequest()
.build();
}
if(userService.getUserFromUsername(user.username()).isPresent()) {
return;
if(userService.getUserFromUsername(user.username()).isPresent() ||
userService.getUserFromEmail(user.email()).isPresent()) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
}
User newUser = User.builder()
......@@ -64,7 +68,9 @@ public class UserController {
.build();
userService.saveUser(newUser);
newUser.setPassword(null);
return ResponseEntity.ok(newUser);
}
}
}
\ No newline at end of file
......@@ -10,8 +10,8 @@ import java.util.Optional;
* uses mysql from server when ran
* uses h2 in memory database when testing
* @author birk
* @version 1.0
* @since 05.04.2023
* @version 1.1
* @since 20.04.2023
*/
public interface UserRepository extends JpaRepository<User, Long>{
......@@ -23,4 +23,10 @@ public interface UserRepository extends JpaRepository<User, Long>{
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;
/**
* UserService is a class that implements the UserDetailsService interface.
* @author Birk
* @version 1.0
* @since 05.04.2023
* @version 1.1
* @since 20.04.2023
*/
@Service
@AllArgsConstructor
......@@ -89,4 +89,12 @@ public class UserService {
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;
import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import java.sql.Date;
import java.util.List;
......@@ -18,9 +20,14 @@ public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
void testSaveUser() {
User user = User.builder()
@Autowired
private TestEntityManager entityManager;
private User user;
@BeforeEach
public void setUp() {
user = User.builder()
.username("testuser")
.password("password")
.enabled(true)
......@@ -30,6 +37,21 @@ public class UserRepositoryTest {
.dateOfBirth(Date.valueOf("1990-01-01"))
.authority(Authority.USER)
.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);
Optional<User> retrievedUser = userRepository.findByUsername(user.getUsername());
......@@ -48,14 +70,6 @@ public class UserRepositoryTest {
@Test
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();
user2.setUsername("testuser2");
user2.setPassword("password2");
......@@ -66,7 +80,6 @@ public class UserRepositoryTest {
userRepository.save(user2);
List<User> users = userRepository.findAll();
assertEquals(2, users.size());
assertEquals(user1.getUsername(), users.get(0).getUsername());
assertEquals(user2.getUsername(), users.get(1).getUsername());
}
......@@ -87,19 +100,6 @@ public class UserRepositoryTest {
@Test
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
User modifiedUser = User.builder()
.username("testuser")
......@@ -128,4 +128,16 @@ public class UserRepositoryTest {
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