Add missing "city" property in User and test

This commit is contained in:
2023-05-15 21:30:54 +02:00
parent 73ae82d608
commit 96e1827812
6 changed files with 94 additions and 20 deletions

View File

@@ -26,6 +26,7 @@ public class User {
private Integer number; private Integer number;
private String numberExtension; private String numberExtension;
private Integer postalCode; private Integer postalCode;
private String city;
private String country; private String country;
@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER) @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER)
private List<BankAccount> bankAccounts; private List<BankAccount> bankAccounts;

View File

@@ -16,5 +16,6 @@ public class UserDTO implements Serializable {
private Integer number; private Integer number;
private String numberExtension; private String numberExtension;
private Integer postalCode; private Integer postalCode;
private String city;
private String country; private String country;
} }

View File

@@ -9,7 +9,7 @@ import java.io.Serializable;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@AtLeastOneFieldNotEmpty(fieldNames = {"password", "street", "number", "numberExtension", "postalCode", "country"}) @AtLeastOneFieldNotEmpty(fieldNames = {"password", "street", "number", "numberExtension", "postalCode", "city", "country"})
public class UserUpdateRequest implements Serializable { public class UserUpdateRequest implements Serializable {
@Pattern(regexp = "^[^\\s]+$") @Pattern(regexp = "^[^\\s]+$")
private String password; private String password;
@@ -17,5 +17,6 @@ public class UserUpdateRequest implements Serializable {
private Integer number; private Integer number;
private String numberExtension; private String numberExtension;
private Integer postalCode; private Integer postalCode;
private String city;
private String country; private String country;
} }

View File

@@ -31,8 +31,11 @@ public class UserService {
private boolean applyUpdateToBuilderAndDecideIfNeedsLogout(UserUpdateRequest userUpdateRequest, User.UserBuilder builder) { private boolean applyUpdateToBuilderAndDecideIfNeedsLogout(UserUpdateRequest userUpdateRequest, User.UserBuilder builder) {
boolean needsLogout = false; boolean needsLogout = false;
if (userUpdateRequest.getCountry() != null) { if (userUpdateRequest.getNumber() != null) {
builder.country(userUpdateRequest.getCountry()); builder.number(userUpdateRequest.getNumber());
}
if (userUpdateRequest.getNumberExtension() != null) {
builder.numberExtension(userUpdateRequest.getNumberExtension());
} }
if (userUpdateRequest.getStreet() != null) { if (userUpdateRequest.getStreet() != null) {
builder.street(userUpdateRequest.getStreet()); builder.street(userUpdateRequest.getStreet());
@@ -40,11 +43,11 @@ public class UserService {
if (userUpdateRequest.getPostalCode() != null) { if (userUpdateRequest.getPostalCode() != null) {
builder.postalCode(userUpdateRequest.getPostalCode()); builder.postalCode(userUpdateRequest.getPostalCode());
} }
if (userUpdateRequest.getNumber() != null) { if (userUpdateRequest.getCity() != null) {
builder.number(userUpdateRequest.getNumber()); builder.city(userUpdateRequest.getCity());
} }
if (userUpdateRequest.getNumberExtension() != null) { if (userUpdateRequest.getCountry() != null) {
builder.numberExtension(userUpdateRequest.getNumberExtension()); builder.country(userUpdateRequest.getCountry());
} }
if (userUpdateRequest.getPassword() != null) { if (userUpdateRequest.getPassword() != null) {
builder.password(passwordEncoder.encode(userUpdateRequest.getPassword())); builder.password(passwordEncoder.encode(userUpdateRequest.getPassword()));

View File

@@ -1,13 +0,0 @@
package net.kapcake.bankingservice;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BankingServiceApplicationTests {
@Test
void contextLoads() {
}
}

View File

@@ -0,0 +1,81 @@
package net.kapcake.bankingservice.services;
import net.kapcake.bankingservice.model.domain.User;
import net.kapcake.bankingservice.model.dtos.UserUpdateRequest;
import net.kapcake.bankingservice.repositories.UserRepository;
import net.kapcake.bankingservice.security.UserDetailsImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.stubbing.Answer;
import org.springframework.security.crypto.password.PasswordEncoder;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
public static final String TEST_USER_1 = "test-user-1";
@Mock
private static PasswordEncoder passwordEncoder;
@Mock
private static UserRepository userRepository;
private User user1;
private UserService userService;
@BeforeEach
void beforeEach() {
userService = new UserService(userRepository, passwordEncoder);
user1 = new User().setId(1L).setUsername(TEST_USER_1);
}
@Test
void updateUser() {
UserDetailsImpl authenticatedUser = new UserDetailsImpl(user1);
String updatedPassword = "update";
String encodedPassword = "encoded";
UserUpdateRequest userUpdateRequest = new UserUpdateRequest().setPassword(updatedPassword);
final User[] updatedUser = new User[1];
when(userRepository.findByUsername(TEST_USER_1)).thenReturn(Optional.of(user1));
when(userRepository.save(any())).then((Answer<Void>) invocationOnMock -> {
updatedUser[0] = invocationOnMock.getArgument(0);
return null;
});
when(passwordEncoder.encode(updatedPassword)).thenReturn(encodedPassword);
boolean needsLogout = userService.updateUser(authenticatedUser, userUpdateRequest);
assertTrue(needsLogout);
assertEquals(encodedPassword, updatedUser[0].getPassword());
userUpdateRequest = new UserUpdateRequest()
.setNumber(2)
.setNumberExtension("ext")
.setStreet("Street")
.setPostalCode(9999)
.setCity("City")
.setCountry("Luxembourg");
assertNull(updatedUser[0].getNumber());
assertNull(updatedUser[0].getNumberExtension());
assertNull(updatedUser[0].getStreet());
assertNull(updatedUser[0].getPostalCode());
assertNull(updatedUser[0].getCity());
assertNull(updatedUser[0].getCountry());
needsLogout = userService.updateUser(authenticatedUser, userUpdateRequest);
assertFalse(needsLogout);
assertEquals(2, updatedUser[0].getNumber());
assertEquals("ext", updatedUser[0].getNumberExtension());
assertEquals("Street", updatedUser[0].getStreet());
assertEquals(9999, updatedUser[0].getPostalCode());
assertEquals("City", updatedUser[0].getCity());
assertEquals("Luxembourg", updatedUser[0].getCountry());
}
}