diff --git a/support-portal-backend/pom.xml b/support-portal-backend/pom.xml
index 1f533e1..66217c7 100644
--- a/support-portal-backend/pom.xml
+++ b/support-portal-backend/pom.xml
@@ -56,6 +56,13 @@
spring-security-test
test
+
+
+ com.github.javafaker
+ javafaker
+ 1.0.2
+
+
diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/domain/User.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/domain/User.java
index 1b6d8bf..04eb146 100644
--- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/domain/User.java
+++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/domain/User.java
@@ -1,9 +1,6 @@
package net.shyshkin.study.fullstack.supportportal.backend.domain;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
+import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -18,6 +15,7 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
+@Builder
public class User implements Serializable {
private static final long serialVersionUID = -4372214856545239049L;
diff --git a/support-portal-backend/src/main/resources/application.yml b/support-portal-backend/src/main/resources/application.yml
index ce95396..c11bf0b 100644
--- a/support-portal-backend/src/main/resources/application.yml
+++ b/support-portal-backend/src/main/resources/application.yml
@@ -19,4 +19,7 @@ spring:
datasource:
url: jdbc:mysql://localhost:23306/support-portal
jpa:
- show-sql: true
\ No newline at end of file
+ show-sql: true
+logging:
+ level:
+ net.shyshkin: debug
\ No newline at end of file
diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/domain/UserPrincipalTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/domain/UserPrincipalTest.java
new file mode 100644
index 0000000..138d275
--- /dev/null
+++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/domain/UserPrincipalTest.java
@@ -0,0 +1,79 @@
+package net.shyshkin.study.fullstack.supportportal.backend.domain;
+
+import com.github.javafaker.Faker;
+import lombok.extern.slf4j.Slf4j;
+import net.shyshkin.study.fullstack.supportportal.backend.repository.UserRepository;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+
+import java.time.LocalDateTime;
+import java.util.Optional;
+import java.util.UUID;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@Slf4j
+@SpringBootTest
+@ActiveProfiles("local")
+class UserPrincipalTest {
+
+ public static final Faker FAKER = Faker.instance();
+
+ @Autowired
+ UserRepository userRepository;
+ private User user;
+
+ @BeforeEach
+ void setUp() {
+ User fakeUser = createRandomUser();
+ user = userRepository.save(fakeUser);
+ }
+
+ @Test
+ void displayUser() {
+ //given
+ Long id = user.getId();
+ int expectedAuthoritiesLength = user.getAuthorities().length + user.getRoles().length;
+
+ //when
+ Optional savedUserOptional = userRepository.findById(id);
+ assertThat(savedUserOptional)
+ .hasValueSatisfying(userSaved -> assertThat(userSaved)
+ .hasNoNullFieldsOrProperties()
+ .satisfies(u -> log.debug("Saved User: {}", u)
+ )
+ );
+
+ Optional userPrincipalOptional = savedUserOptional.map(UserPrincipal::new);
+
+ //then
+ assertThat(userPrincipalOptional)
+ .hasValueSatisfying(userPrincipal -> assertThat(userPrincipal.getAuthorities())
+ .isNotNull()
+ .isNotEmpty()
+ .hasSize(expectedAuthoritiesLength)
+ .satisfies(authorities -> log.debug("Authorities: {}", authorities)));
+ }
+
+ private User createRandomUser() {
+ return User.builder()
+ .email(FAKER.bothify("????##@example.com"))
+ .firstName(FAKER.name().firstName())
+ .lastName(FAKER.name().lastName())
+ .username(FAKER.name().username())
+ .password("bad_password")
+ .userId(UUID.randomUUID().toString())
+ .isActive(true)
+ .isNotLocked(true)
+ .joinDate(LocalDateTime.now())
+ .profileImageUrl("http://url_to_profile_img")
+ .lastLoginDate(LocalDateTime.now())
+ .lastLoginDateDisplay(LocalDateTime.now())
+ .roles(new String[]{"ROLE_ADMIN", "ROLE_USER"})
+ .authorities(new String[]{"user:delete", "user:read"})
+ .build();
+ }
+}
\ No newline at end of file