commit 6b5f795f4cdcdd016725cd35c25eab30f0af183a
Author: Jakub Danek <jakub.danek@yoso.fi>
Date:   Mon Oct 14 15:49:36 2019 +0200

    re #29 separate editable user-data into own class.

diff --git a/server/src/main/java/org/danekja/ymanager/domain/RegisteredUser.java b/server/src/main/java/org/danekja/ymanager/domain/RegisteredUser.java
index 4277194..82904ff 100644
--- a/server/src/main/java/org/danekja/ymanager/domain/RegisteredUser.java
+++ b/server/src/main/java/org/danekja/ymanager/domain/RegisteredUser.java
@@ -48,16 +48,14 @@ public class RegisteredUser extends User implements UserDetails {
     public RegisteredUser() {
     }
 
-    public RegisteredUser(Long id, String firstName, String lastName, Float vacationCount, Integer totalSickDayCount, Integer takenSickDayCount, LocalDateTime notification, String token, String email, String photo, LocalDateTime creationDate, UserRole role, Status status) {
-        super(id, vacationCount, totalSickDayCount, takenSickDayCount, notification, token, role, status);
+    public RegisteredUser(Long id, String firstName, String lastName, String email, String photo, LocalDateTime creationDate, UserData userData) {
+        super(id, userData);
         this.id = id;
         this.firstName = firstName;
         this.lastName = lastName;
         this.email = email;
         this.photo = photo;
         this.creationDate = creationDate;
-        this.role = role;
-        this.status = status;
     }
 
     /*
@@ -66,7 +64,7 @@ public class RegisteredUser extends User implements UserDetails {
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
         //TODO do not create collection on each call
-        return Collections.singleton(new SimpleGrantedAuthority(role.name()));
+        return Collections.singleton(new SimpleGrantedAuthority(userData.getRole().name()));
     }
 
     @Override
@@ -99,7 +97,7 @@ public class RegisteredUser extends User implements UserDetails {
 
     @Override
     public boolean isEnabled() {
-        return status == Status.ACCEPTED;
+        return userData.getStatus() == Status.ACCEPTED;
     }
 
     /*
@@ -126,7 +124,6 @@ public class RegisteredUser extends User implements UserDetails {
         return photo;
     }
 
-    @Override
     public LocalDateTime getCreationDate() {
         return creationDate;
     }
diff --git a/server/src/main/java/org/danekja/ymanager/domain/User.java b/server/src/main/java/org/danekja/ymanager/domain/User.java
index d858f6b..df81bbc 100644
--- a/server/src/main/java/org/danekja/ymanager/domain/User.java
+++ b/server/src/main/java/org/danekja/ymanager/domain/User.java
@@ -24,58 +24,20 @@ public abstract class User {
      */
     protected static final Logger log = LoggerFactory.getLogger(User.class);
 
+    protected final UserData userData;
+
     /**
      * The user's ID.
      */
     protected Long id;
 
-    /**
-     * The number of user's remaining hours of an overtime.
-     */
-    protected Float vacationCount;
-
-    /**
-     * The number of user's sick days available during a year.
-     */
-    protected Integer totalSickDayCount;
-
-    /**
-     * The number of user's taken sick days.
-     */
-    protected Integer takenSickDayCount;
-
-    /**
-     * The date and time of sending an email warning about an incoming reset of remaining overtimes and sick days.
-     */
-    protected LocalDateTime notification;
-
-    /**
-     * The token for the Google oAuth.
-     */
-    protected String token;
-
-    /**
-     * The user's role.
-     */
-    protected UserRole role;
-
-    /**
-     * The user's authorization status.
-     */
-    protected Status status;
-
-    public User() {
+    protected User() {
+        this.userData = new UserData();
     }
 
-    public User(Long id, Float vacationCount, Integer totalSickDayCount, Integer takenSickDayCount, LocalDateTime notification, String token, UserRole role, Status status) {
+    protected User(Long id, UserData userData) {
         this.id = id;
-        this.vacationCount = vacationCount;
-        this.totalSickDayCount = totalSickDayCount;
-        this.takenSickDayCount = takenSickDayCount;
-        this.notification = notification;
-        this.token = token;
-        this.role = role;
-        this.status = status;
+        this.userData = userData;
     }
 
     /**
@@ -118,7 +80,7 @@ public abstract class User {
      * @return the number of user's remaining hours of the overtime
      */
     public Float getVacationCount() {
-        return this.vacationCount;
+        return userData.getVacationCount();
     }
 
     /**
@@ -129,17 +91,8 @@ public abstract class User {
      * @throws IllegalArgumentException when the given value is negative
      */
     public void setVacationCount(final Float vacationCount) throws IllegalArgumentException {
-        User.log.debug("Setting a new number of remaining overtime: {}", vacationCount);
-
-        if(vacationCount == null) {
-            User.log.warn("The number of remaining overtime must not be null");
-            throw new IllegalArgumentException("vacation.null.error");
-        }else if (vacationCount < 0) {
-            User.log.warn("The number of remaining overtime must not be negative");
-            throw new IllegalArgumentException("negative.vacation.error");
-        }
 
-        this.vacationCount = vacationCount;
+        userData.setVacationCount(vacationCount);
     }
 
     /**
@@ -150,17 +103,8 @@ public abstract class User {
      * @throws IllegalArgumentException when he given parameter is null or a result of the addition is negative
      */
     public void addVacationCount(final Float value) {
-        User.log.debug("Adding the given number of hours {} to the vacation", value);
-
-        if(value == null) {
-            User.log.warn("The given value must not be null");
-            throw new IllegalArgumentException("vacation.null.error");
-        } else if (this.vacationCount + value < 0) {
-            User.log.warn("The number of remaining overtime must not be negative");
-            throw new IllegalArgumentException("negative.vacation.error");
-        }
 
-        this.vacationCount += value;
+        userData.addVacationCount(value);
     }
 
     /**
@@ -174,18 +118,8 @@ public abstract class User {
      *          or the times are not in order
      */
     public void addVacationCount(final LocalTime from, final LocalTime to) {
-        User.log.debug("Adding a vacation from {} to {}", from, to);
-
-        if(from == null || to == null) {
-            User.log.warn("A vacation has to have a starting and an ending time");
-            throw new IllegalArgumentException("time.vacation.error");
-        } else if (from.compareTo(to) >= 0) {
-            User.log.warn("A vacation must not start after it ends. from={}, to={}", from, to);
-            throw new IllegalArgumentException("time.order.error");
-        }
 
-        final float difference = from.until(to, MINUTES) / 60f;
-        this.vacationCount += difference;
+        userData.addVacationCount(from, to);
     }
 
     /**
@@ -194,7 +128,7 @@ public abstract class User {
      * @return the number of user's sick days available during the year
      */
     public Integer getTotalSickDayCount() {
-        return this.totalSickDayCount;
+        return userData.getTotalSickDayCount();
     }
 
     /**
@@ -205,14 +139,8 @@ public abstract class User {
      * @throws IllegalArgumentException when the given value is negative
      */
     public void setTotalSickDayCount(final Integer totalSickDayCount) throws IllegalArgumentException {
-        User.log.debug("Setting a new number of user's sick days available during a year: {}", totalSickDayCount);
-
-        if (totalSickDayCount != null && totalSickDayCount < 0) {
-            User.log.warn("The number of user's available sick days must not be negative");
-            throw new IllegalArgumentException("negative.sick.day.error");
-        }
 
-        this.totalSickDayCount = totalSickDayCount;
+        userData.setTotalSickDayCount(totalSickDayCount);
     }
 
     /**
@@ -221,7 +149,7 @@ public abstract class User {
      * @return the number of user's taken sick days
      */
     public Integer getTakenSickDayCount() {
-        return this.takenSickDayCount;
+        return userData.getTakenSickDayCount();
     }
 
     /**
@@ -232,20 +160,8 @@ public abstract class User {
      * @throws IllegalArgumentException when the given value is negative
      */
     public void setTakenSickDayCount(final Integer takenSickDayCount) throws IllegalArgumentException {
-        User.log.debug("Setting a new number of user's taken sick days: {}", takenSickDayCount);
-
-        if (takenSickDayCount == null) {
-            User.log.warn("The number number of user's taken sick days must not be null");
-            throw new IllegalArgumentException("sick.day.null.error");
-        } else if (takenSickDayCount < 0) {
-            User.log.warn("The number number of user's taken sick days must not be negative");
-            throw new IllegalArgumentException("negative.sick.day.error");
-        } else if(takenSickDayCount > this.totalSickDayCount){
-            User.log.warn("The number number of user's taken sick days must not greater than his/her available sick days");
-            throw new IllegalArgumentException("taken.sick.day.count.error");
-        }
 
-        this.takenSickDayCount = takenSickDayCount;
+        userData.setTakenSickDayCount(takenSickDayCount);
     }
 
     /**
@@ -256,20 +172,8 @@ public abstract class User {
      * @throws IllegalArgumentException when the given number is null or a result of the addition is negative
      */
     public void addTakenSickDayCount(final Integer value) throws IllegalArgumentException {
-        User.log.debug("Increasing the number of remaining overtime by {}", value);
-
-        if (value == null) {
-            User.log.warn("The given value must not be null");
-            throw new IllegalArgumentException("vacation.null.error");
-        } else if (this.takenSickDayCount + value < 0) {
-            User.log.warn("The number number of user's taken sick days must not be negative");
-            throw new IllegalArgumentException("negative.sick.day.error");
-        } else if (this.takenSickDayCount + value > this.totalSickDayCount) {
-            User.log.warn("The number number of user's taken sick days must not greater than his/her available sick days");
-            throw new IllegalArgumentException("taken.sick.day.count.error");
-        }
 
-        this.takenSickDayCount += value;
+        userData.addTakenSickDayCount(value);
     }
 
     /**
@@ -278,7 +182,7 @@ public abstract class User {
      * @return the date and time
      */
     public LocalDateTime getNotification() {
-        return this.notification;
+        return userData.getNotification();
     }
 
     /**
@@ -289,34 +193,8 @@ public abstract class User {
      * @throws IllegalArgumentException when the given notification is null
      */
     public void setNotification(final LocalDateTime notification) throws IllegalArgumentException {
-        User.log.debug("Setting a new date and time of sending an email warning: {}", notification);
-
-        this.notification = notification;
-    }
-
-    /**
-     * Returns the user's token for the Google oAuth.
-     *
-     * @return the user's token for the Google oAuth
-     */
-    public String getToken() {
-        return this.token;
-    }
-
-    /**
-     * Replaces the user's token for the Google oAuth with the specified string.
-     *
-     * @param token the new token for the Google oAuth
-     */
-    public void setToken(final String token) {
-        User.log.debug("Setting a new token: {}", token);
 
-        if (token == null) {
-            User.log.warn("The given token must not be null");
-            throw new IllegalArgumentException("token.null.error");
-        }
-
-        this.token = token;
+        userData.setNotification(notification);
     }
 
     /**
@@ -335,23 +213,13 @@ public abstract class User {
         return DEFAULT_PHOTO;
     }
 
-    ;
-
-
-    /**
-     * Returns the date and time of a user's creation.
-     *
-     * @return the date and time of the user's creation
-     */
-    public abstract LocalDateTime getCreationDate();
-
     /**
      * Returns the user's role.
      *
      * @return the user's role
      */
     public UserRole getRole() {
-        return this.role;
+        return userData.getRole();
     }
 
     /**
@@ -362,14 +230,7 @@ public abstract class User {
      * @throws IllegalArgumentException when the given role is null
      */
     public void setRole(final UserRole role) throws IllegalArgumentException {
-        User.log.debug("Setting a new user's role: {}", role);
-
-        if(role == null) {
-            User.log.warn("The given role must not be null");
-            throw new IllegalArgumentException("role.null.error");
-        }
-
-        this.role = role;
+        userData.setRole(role);
     }
 
     /**
@@ -378,7 +239,7 @@ public abstract class User {
      * @return the user's authorization status
      */
     public Status getStatus() {
-        return this.status;
+        return userData.getStatus();
     }
 
     /**
@@ -387,14 +248,7 @@ public abstract class User {
      * @param status the new authorization status
      */
     public void setStatus(final Status status) {
-        User.log.debug("Setting a new authorization status: {}", status);
-
-        if(status == null) {
-            User.log.warn("The given status must not be null");
-            throw new IllegalArgumentException("status.null.error");
-        }
-
-        this.status = status;
+        this.userData.setStatus(status);
     }
 
     /**
@@ -419,14 +273,14 @@ public abstract class User {
         }
 
         final float difference = from.until(to, MINUTES) / 60f;
-        final float tempVacationCount = this.vacationCount - difference;
+        final float tempVacationCount = this.userData.getVacationCount() - difference;
 
         if (tempVacationCount < 0) {
             User.log.warn("Cannot take a vacation, not enough available hours");
             throw new IllegalArgumentException("available.vacation.error");
         }
 
-        this.vacationCount = tempVacationCount;
+        this.userData.setVacationCount(tempVacationCount);
     }
 
     /**
@@ -437,14 +291,8 @@ public abstract class User {
      */
     public void takeSickDay() throws  IllegalArgumentException {
         User.log.trace("Taking a sick day");
-        final int tempTakenSickDayCount = ++this.takenSickDayCount;
-
-        if (tempTakenSickDayCount > this.totalSickDayCount) {
-            User.log.warn("Cannot take a sick day, not enough available days");
-            throw new IllegalArgumentException("available.sick.day.error");
-        }
 
-        this.takenSickDayCount = tempTakenSickDayCount;
+        this.userData.addTakenSickDayCount(1);
     }
 
     /**
@@ -460,13 +308,7 @@ public abstract class User {
     public String toString() {
         return "User{" +
                 "id=" + id +
-                ", vacationCount=" + vacationCount +
-                ", totalSickDayCount=" + totalSickDayCount +
-                ", takenSickDayCount=" + takenSickDayCount +
-                ", notification=" + notification +
-                ", token='" + token + '\'' +
-                ", role=" + role +
-                ", status=" + status +
+                ", " + this.userData.toString() +
                 '}';
     }
 }
\ No newline at end of file
diff --git a/server/src/main/java/org/danekja/ymanager/domain/UserData.java b/server/src/main/java/org/danekja/ymanager/domain/UserData.java
new file mode 100644
index 0000000..2d7401e
--- /dev/null
+++ b/server/src/main/java/org/danekja/ymanager/domain/UserData.java
@@ -0,0 +1,278 @@
+package org.danekja.ymanager.domain;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.ChronoUnit;
+
+public class UserData {
+    /**
+     * The number of user's remaining hours of an overtime.
+     */
+    private Float vacationCount;
+    /**
+     * The number of user's sick days available during a year.
+     */
+    private Integer totalSickDayCount;
+    /**
+     * The number of user's taken sick days.
+     */
+    private Integer takenSickDayCount;
+    /**
+     * The date and time of sending an email warning about an incoming reset of remaining overtimes and sick days.
+     */
+    private LocalDateTime notification;
+    /**
+     * The user's role.
+     */
+    private UserRole role;
+    /**
+     * The user's authorization status.
+     */
+    private Status status;
+
+    public UserData() {
+    }
+
+    public UserData(Float vacationCount, Integer totalSickDayCount, Integer takenSickDayCount, LocalDateTime notification, UserRole role, Status status) {
+        this.vacationCount = vacationCount;
+        this.totalSickDayCount = totalSickDayCount;
+        this.takenSickDayCount = takenSickDayCount;
+        this.notification = notification;
+        this.role = role;
+        this.status = status;
+    }
+
+    /**
+     * Returns the number of user's remaining hours of an overtime.
+     *
+     * @return the number of user's remaining hours of the overtime
+     */
+    public Float getVacationCount() {
+        return this.vacationCount;
+    }
+
+    /**
+     * Replaces the number of user's remaining hours of an overtime with the specified value.
+     * If the given number is negative or null the method throws an exception.
+     *
+     * @param vacationCount the new number of remaining hours of the overtime.
+     * @throws IllegalArgumentException when the given value is negative
+     */
+    public void setVacationCount(final Float vacationCount) throws IllegalArgumentException {
+        User.log.debug("Setting a new number of remaining overtime: {}", vacationCount);
+
+        if (vacationCount == null) {
+            User.log.warn("The number of remaining overtime must not be null");
+            throw new IllegalArgumentException("vacation.null.error");
+        } else if (vacationCount < 0) {
+            User.log.warn("The number of remaining overtime must not be negative");
+            throw new IllegalArgumentException("negative.vacation.error");
+        }
+
+        this.vacationCount = vacationCount;
+    }
+
+    /**
+     * Adds the given amount to the number of user's available vacations. If the given parameter is null
+     * or a result of the addition is negative the method throws an exception.
+     *
+     * @param value the given amount that is going to be added
+     * @throws IllegalArgumentException when he given parameter is null or a result of the addition is negative
+     */
+    public void addVacationCount(final Float value) {
+        User.log.debug("Adding the given number of hours {} to the vacation", value);
+
+        if (value == null) {
+            User.log.warn("The given value must not be null");
+            throw new IllegalArgumentException("vacation.null.error");
+        } else if (this.vacationCount + value < 0) {
+            User.log.warn("The number of remaining overtime must not be negative");
+            throw new IllegalArgumentException("negative.vacation.error");
+        }
+
+        this.vacationCount += value;
+    }
+
+    /**
+     * Adds a difference of the given starting and the ending time of a vacation
+     * to the number of user's available vacations. If some of the given parameters are null
+     * or the times are not in order the method throws an exception.
+     *
+     * @param from the starting time of a vacation
+     * @param to   the ending time of a vacation
+     * @throws IllegalArgumentException when some of the given parameters are null
+     *                                  or the times are not in order
+     */
+    public void addVacationCount(final LocalTime from, final LocalTime to) {
+        User.log.debug("Adding a vacation from {} to {}", from, to);
+
+        if (from == null || to == null) {
+            User.log.warn("A vacation has to have a starting and an ending time");
+            throw new IllegalArgumentException("time.vacation.error");
+        } else if (from.compareTo(to) >= 0) {
+            User.log.warn("A vacation must not start after it ends. from={}, to={}", from, to);
+            throw new IllegalArgumentException("time.order.error");
+        }
+
+        final float difference = from.until(to, ChronoUnit.MINUTES) / 60f;
+        this.vacationCount += difference;
+    }
+
+    /**
+     * Returns the number of user's sick days available during a year.
+     *
+     * @return the number of user's sick days available during the year
+     */
+    public Integer getTotalSickDayCount() {
+        return this.totalSickDayCount;
+    }
+
+    /**
+     * Replaces the number of user's sick days available during a year with the new value.
+     * If the given number is negative or null the method throws an exception.
+     *
+     * @param totalSickDayCount the new number of sick days available during the year
+     * @throws IllegalArgumentException when the given value is negative
+     */
+    public void setTotalSickDayCount(final Integer totalSickDayCount) throws IllegalArgumentException {
+        User.log.debug("Setting a new number of user's sick days available during a year: {}", totalSickDayCount);
+
+        if (totalSickDayCount != null && totalSickDayCount < 0) {
+            User.log.warn("The number of user's available sick days must not be negative");
+            throw new IllegalArgumentException("negative.sick.day.error");
+        }
+
+        this.totalSickDayCount = totalSickDayCount;
+    }
+
+    /**
+     * Returns the number of user's taken sick days.
+     *
+     * @return the number of user's taken sick days
+     */
+    public Integer getTakenSickDayCount() {
+        return this.takenSickDayCount;
+    }
+
+    /**
+     * Replaces the number of user's taken sick days with the new value.
+     * If the given number is negative or greater than the number of available sick days or null the method throws an exception.
+     *
+     * @param takenSickDayCount the new number of taken sick days
+     * @throws IllegalArgumentException when the given value is negative
+     */
+    public void setTakenSickDayCount(final Integer takenSickDayCount) throws IllegalArgumentException {
+        User.log.debug("Setting a new number of user's taken sick days: {}", takenSickDayCount);
+
+        if (takenSickDayCount == null) {
+            User.log.warn("The number number of user's taken sick days must not be null");
+            throw new IllegalArgumentException("sick.day.null.error");
+        } else if (takenSickDayCount < 0) {
+            User.log.warn("The number number of user's taken sick days must not be negative");
+            throw new IllegalArgumentException("negative.sick.day.error");
+        } else if (takenSickDayCount > this.totalSickDayCount) {
+            User.log.warn("The number number of user's taken sick days must not greater than his/her available sick days");
+            throw new IllegalArgumentException("taken.sick.day.count.error");
+        }
+
+        this.takenSickDayCount = takenSickDayCount;
+    }
+
+    /**
+     * Adds the given amount to the number of user's remaining hours of an overtime.
+     * If the given number is null or a result of the addition is negative the method throws an exception.
+     *
+     * @param value the given amount that is going to be added
+     * @throws IllegalArgumentException when the given number is null or a result of the addition is negative
+     */
+    public void addTakenSickDayCount(final Integer value) throws IllegalArgumentException {
+        User.log.debug("Increasing the number of remaining overtime by {}", value);
+
+        if (value == null) {
+            User.log.warn("The given value must not be null");
+            throw new IllegalArgumentException("vacation.null.error");
+        } else if (this.takenSickDayCount + value < 0) {
+            User.log.warn("The number number of user's taken sick days must not be negative");
+            throw new IllegalArgumentException("negative.sick.day.error");
+        } else if (this.takenSickDayCount + value > this.totalSickDayCount) {
+            User.log.warn("The number number of user's taken sick days must not greater than his/her available sick days");
+            throw new IllegalArgumentException("taken.sick.day.count.error");
+        }
+
+        this.takenSickDayCount += value;
+    }
+
+    /**
+     * Returns the date and time of sending an email warning about an incoming reset of remaining overtimes and sick days.
+     *
+     * @return the date and time
+     */
+    public LocalDateTime getNotification() {
+        return this.notification;
+    }
+
+    /**
+     * Replaces the date and time of sending an email warning about an incoming reset of remaining overtimes and sick days with the given value.
+     * If the given notification is null the method throws an exception.
+     *
+     * @param notification the new date and time
+     * @throws IllegalArgumentException when the given notification is null
+     */
+    public void setNotification(final LocalDateTime notification) throws IllegalArgumentException {
+        User.log.debug("Setting a new date and time of sending an email warning: {}", notification);
+
+        this.notification = notification;
+    }
+
+    /**
+     * Returns the user's role.
+     *
+     * @return the user's role
+     */
+    public UserRole getRole() {
+        return this.role;
+    }
+
+    /**
+     * Replaces the user's role with the new provided value.
+     * If the given role is null the method throws an exception.
+     *
+     * @param role the new role
+     * @throws IllegalArgumentException when the given role is null
+     */
+    public void setRole(final UserRole role) throws IllegalArgumentException {
+        User.log.debug("Setting a new user's role: {}", role);
+
+        if (role == null) {
+            User.log.warn("The given role must not be null");
+            throw new IllegalArgumentException("role.null.error");
+        }
+
+        this.role = role;
+    }
+
+    /**
+     * Returns the user's authorization status.
+     *
+     * @return the user's authorization status
+     */
+    public Status getStatus() {
+        return this.status;
+    }
+
+    /**
+     * Replaces the authorization status with the handed value.
+     *
+     * @param status the new authorization status
+     */
+    public void setStatus(final Status status) {
+        User.log.debug("Setting a new authorization status: {}", status);
+
+        if (status == null) {
+            User.log.warn("The given status must not be null");
+            throw new IllegalArgumentException("status.null.error");
+        }
+
+        this.status = status;
+    }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/danekja/ymanager/repository/UserRepository.java b/server/src/main/java/org/danekja/ymanager/repository/UserRepository.java
index a3d9515..1cc74f4 100644
--- a/server/src/main/java/org/danekja/ymanager/repository/UserRepository.java
+++ b/server/src/main/java/org/danekja/ymanager/repository/UserRepository.java
@@ -135,43 +135,6 @@ public class UserRepository {
         }, paramList);
     }
 
-    private Map<String, Object> getUserColumns(final String token) {
-        final List<SqlParameter> paramList = new ArrayList<>();
-        paramList.add(new SqlParameter(Types.LONGVARCHAR));
-        paramList.add(new SqlOutParameter("out_id", Types.BIGINT));
-        paramList.add(new SqlOutParameter("out_first_name", Types.VARCHAR));
-        paramList.add(new SqlOutParameter("out_last_name", Types.VARCHAR));
-        paramList.add(new SqlOutParameter("out_no_vacations", Types.FLOAT));
-        paramList.add(new SqlOutParameter("out_no_sick_days", Types.INTEGER));
-        paramList.add(new SqlOutParameter("out_taken_sick_days", Types.INTEGER));
-        paramList.add(new SqlOutParameter("out_alert", Types.TIMESTAMP));
-        paramList.add(new SqlOutParameter("out_token", Types.LONGVARCHAR));
-        paramList.add(new SqlOutParameter("out_email", Types.VARCHAR));
-        paramList.add(new SqlOutParameter("out_photo", Types.LONGVARCHAR));
-        paramList.add(new SqlOutParameter("out_creation_date", Types.TIMESTAMP));
-        paramList.add(new SqlOutParameter("out_role", Types.VARCHAR));
-        paramList.add(new SqlOutParameter("out_status", Types.VARCHAR));
-
-        return jdbc.call(con -> {
-            final CallableStatement callableStatement = con.prepareCall("{call GetUserToken(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
-            callableStatement.setString(1, token);
-            callableStatement.registerOutParameter(2, Types.BIGINT);
-            callableStatement.registerOutParameter(3, Types.VARCHAR);
-            callableStatement.registerOutParameter(4, Types.VARCHAR);
-            callableStatement.registerOutParameter(5, Types.FLOAT);
-            callableStatement.registerOutParameter(6, Types.INTEGER);
-            callableStatement.registerOutParameter(7, Types.INTEGER);
-            callableStatement.registerOutParameter(8, Types.TIMESTAMP);
-            callableStatement.registerOutParameter(9, Types.LONGVARCHAR);
-            callableStatement.registerOutParameter(10, Types.VARCHAR);
-            callableStatement.registerOutParameter(11, Types.LONGVARCHAR);
-            callableStatement.registerOutParameter(12, Types.TIMESTAMP);
-            callableStatement.registerOutParameter(13, Types.VARCHAR);
-            callableStatement.registerOutParameter(14, Types.VARCHAR);
-            return callableStatement;
-        }, paramList);
-    }
-
     //---------------------------------- DTO -----------------------------------
 
     /**
@@ -268,13 +231,13 @@ public class UserRepository {
     }
 
     public void updateUser(final User user) {
-        this.jdbc.update("UPDATE end_user SET first_name = ?, last_name = ?, no_vacations = ?, taken_sick_days = ?, token = ?, email = ?, photo = ?, user_role = ?, status = ? WHERE id = ?",
-                user.getFirstName(), user.getLastName(), user.getVacationCount(), user.getTakenSickDayCount(), user.getToken(), user.getEmail(), user.getPhoto(), user.getRole().name(), user.getStatus().name(), user.getId());
+        this.jdbc.update("UPDATE end_user SET first_name = ?, last_name = ?, no_vacations = ?, taken_sick_days = ?, email = ?, photo = ?, user_role = ?, status = ? WHERE id = ?",
+                user.getFirstName(), user.getLastName(), user.getVacationCount(), user.getTakenSickDayCount(), user.getEmail(), user.getPhoto(), user.getRole().name(), user.getStatus().name(), user.getId());
     }
 
     public void insertUser(final User user) {
-        this.jdbc.update("INSERT INTO end_user (first_name, last_name, no_vacations, no_sick_days, taken_sick_days, alert, token, email, photo, user_role, status) VALUES (?,?,?,?,?,?,?,?,?,?,?)",
-                user.getFirstName(), user.getLastName(), user.getVacationCount(), user.getTotalSickDayCount(), user.getTakenSickDayCount(), user.getNotification(), user.getToken(), user.getEmail(), user.getPhoto(), user.getRole().name(), user.getStatus().name());
+        this.jdbc.update("INSERT INTO end_user (first_name, last_name, no_vacations, no_sick_days, taken_sick_days, alert, email, photo, user_role, status) VALUES (?,?,?,?,?,?,?,?,?,?,?)",
+                user.getFirstName(), user.getLastName(), user.getVacationCount(), user.getTotalSickDayCount(), user.getTakenSickDayCount(), user.getNotification(), user.getEmail(), user.getPhoto(), user.getRole().name(), user.getStatus().name());
     }
 
     public void insertSettings(final org.danekja.ymanager.domain.DefaultSettings settings) {
diff --git a/server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/UserRowMapper.java b/server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/UserRowMapper.java
index bc9c163..28934e4 100644
--- a/server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/UserRowMapper.java
+++ b/server/src/main/java/org/danekja/ymanager/repository/jdbc/mappers/UserRowMapper.java
@@ -2,6 +2,7 @@ package org.danekja.ymanager.repository.jdbc.mappers;
 
 import org.danekja.ymanager.domain.RegisteredUser;
 import org.danekja.ymanager.domain.Status;
+import org.danekja.ymanager.domain.UserData;
 import org.danekja.ymanager.domain.UserRole;
 import org.springframework.jdbc.core.RowMapper;
 
@@ -27,7 +28,6 @@ public class UserRowMapper implements RowMapper<RegisteredUser> {
         Timestamp date = resultSet.getTimestamp("alert");
         LocalDateTime alert = date != null ? ((Timestamp) date).toLocalDateTime() : null;
 
-        String token = resultSet.getNString("token");
         String email = resultSet.getString("email");
         String photo = resultSet.getNString("photo");
 
@@ -36,6 +36,7 @@ public class UserRowMapper implements RowMapper<RegisteredUser> {
         UserRole role = UserRole.valueOf(resultSet.getString("user_role"));
         Status status = Status.valueOf(resultSet.getString("status"));
 
-        return new RegisteredUser(id, firstName, lastName, vacations, sickDays, takenSickDays, alert, token, email, photo, creationDate, role, status);
+        UserData userData = new UserData(vacations, sickDays, takenSickDays, alert, role, status);
+        return new RegisteredUser(id, firstName, lastName, email, photo, creationDate, userData);
     }
 }
diff --git a/server/src/test/java/org/danekja/ymanager/domain/RegisteredUserTest.java b/server/src/test/java/org/danekja/ymanager/domain/RegisteredUserTest.java
index f027ad0..a36136e 100644
--- a/server/src/test/java/org/danekja/ymanager/domain/RegisteredUserTest.java
+++ b/server/src/test/java/org/danekja/ymanager/domain/RegisteredUserTest.java
@@ -3,10 +3,10 @@ package org.danekja.ymanager.domain;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import java.time.LocalDateTime;
 import java.time.LocalTime;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  * This class tests methods of the {@code RegisteredUser} class.
@@ -98,348 +98,7 @@ class RegisteredUserTest {
         assertThrows(IllegalArgumentException.class, () -> this.user.setLastName(null));
     }
 
-    /**
-     * Tests the method {@code setVacationCount} with common values where no problem should occur.
-     */
-    @Test
-    void setVacationCount_valid() {
-        this.user.setVacationCount(10f);
-        assertEquals(10f, this.user.getVacationCount().floatValue());
-    }
-
-    /**
-     * Tests the method {@code setVacationCount} with zero which is a threshold value.
-     */
-    @Test
-    void setVacationCount_zeroInput_valid() {
-        this.user.setVacationCount(0f);
-        assertEquals(0f, this.user.getVacationCount().floatValue());
-    }
-
-    /**
-     * Tests the method {@code setVacationCount} with negative one which is a threshold value.
-     */
-    @Test
-    void setVacationCount_negativeOneInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(-1f));
-    }
-
-    /**
-     * Tests the method {@code setVacationCount} with negative value.
-     */
-    @Test
-    void setVacationCount_negativeInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(-10f));
-    }
-
-    /**
-     * Tests the method {@code setVacationCount} with null value which should throw an exception.
-     */
-    @Test
-    void setVacationCount_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(null));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with common values where no problem should occur.
-     */
-    @Test
-    void addVacationCount_floatInput_valid() {
-        this.user.addVacationCount(10f);
-        assertEquals(10f, this.user.getVacationCount().floatValue());
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with common values where no problem should occur.
-     */
-    @Test
-    void addVacationCount_addFloatInput_valid() {
-        this.user.setVacationCount(2f);
-        this.user.addVacationCount(10f);
-        assertEquals(12f, this.user.getVacationCount().floatValue());
-    }
 
-    /**
-     * Tests the method {@code addVacationCount} with common values where no problem should occur.
-     */
-    @Test
-    void addVacationCount_subtractFloatInput_valid() {
-        this.user.setVacationCount(20f);
-        this.user.addVacationCount(-10f);
-        assertEquals(10f, this.user.getVacationCount().floatValue());
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with negative result of the operation which should throw an exception.
-     */
-    @Test
-    void addVacationCount_floatInput_negativeResult() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(-10f));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with null value which should throw an exception.
-     */
-    @Test
-    void addVacationCount_nullFloatInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with common values where no problem should occur.
-     */
-    @Test
-    void addVacationCount_timeInput_valid() {
-        LocalTime from = LocalTime.of(10,0);
-        LocalTime to = LocalTime.of(20,0);
-        this.user.addVacationCount(from, to);
-        assertEquals(10f, this.user.getVacationCount().floatValue());
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with wrong order of parameters which should throw an exception.
-     */
-    @Test
-    void addVacationCount_timeInput_order() {
-        LocalTime from = LocalTime.of(10,0);
-        LocalTime to = LocalTime.of(20,0);
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(to, from));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with null from parameter which should throw an exception.
-     */
-    @Test
-    void addVacationCount_timeInput_nullFrom() {
-        LocalTime to = LocalTime.of(20,0);
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null, to));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with null to parameter which should throw an exception.
-     */
-    @Test
-    void addVacationCount_timeInput_nullTo() {
-        LocalTime from = LocalTime.of(20,0);
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(from, null));
-    }
-
-    /**
-     * Tests the method {@code addVacationCount} with null parameters which should throw an exception.
-     */
-    @Test
-    void addVacationCount_timeNullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null, null));
-    }
-
-    /**
-     * Tests the method {@code setTotalSickDayCount} with common values where no problem should occur.
-     */
-    @Test
-    void setTotalSickDayCount_valid() {
-        this.user.setTotalSickDayCount(10);
-        assertEquals(10, this.user.getTotalSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code setTotalSickDayCount} with zero which is a threshold value.
-     */
-    @Test
-    void setTotalSickDayCount_zeroInput_valid() {
-        this.user.setTotalSickDayCount(0);
-        assertEquals(0, this.user.getTotalSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code setTotalSickDayCount} with negative one which is a threshold value.
-     */
-    @Test
-    void setTotalSickDayCount_negativeOneInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTotalSickDayCount(-1));
-    }
-
-    /**
-     * Tests the method {@code setTotalSickDayCount} with negative value.
-     */
-    @Test
-    void setTotalSickDayCount_negativeInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTotalSickDayCount(-10));
-    }
-
-    /**
-     * Tests the method {@code setTotalSickDayCount} with null value.
-     */
-    @Test
-    void setTotalSickDayCount_nullInput_valid() {
-        this.user.setTotalSickDayCount(null);
-        assertNull(this.user.getTotalSickDayCount());
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with common values where no problem should occur.
-     */
-    @Test
-    void setTakenSickDayCount_valid() {
-        this.user.setTotalSickDayCount(20);
-        this.user.setTakenSickDayCount(10);
-        assertEquals(10, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with zero which is a threshold value.
-     */
-    @Test
-    void setTakenSickDayCount_zeroInput_valid() {
-        this.user.setTakenSickDayCount(0);
-        assertEquals(0, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with negative one which is a threshold value.
-     */
-    @Test
-    void setTakenSickDayCount_negativeOneInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(-1));
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with negative value.
-     */
-    @Test
-    void setTakenSickDayCount_negativeInput() {
-        this.user.setTotalSickDayCount(10);
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(-10));
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with a value that is greater than total sick days.
-     */
-    @Test
-    void setTakenSickDayCount_over() {
-        this.user.setTotalSickDayCount(10);
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(20));
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with a value that is equals the total sick days.
-     */
-    @Test
-    void setTakenSickDayCount_same() {
-        this.user.setTotalSickDayCount(10);
-        this.user.setTakenSickDayCount(10);
-        assertEquals(10, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code setTakenSickDayCount} with null value.
-     */
-    @Test
-    void setTakenSickDayCount_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(null));
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
-     */
-    @Test
-    void addTakenSickDayCount_valid() {
-        this.user.setTotalSickDayCount(50);
-        this.user.addTakenSickDayCount(10);
-        assertEquals(10, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
-     */
-    @Test
-    void addTakenSickDayCount_add_valid() {
-        this.user.setTotalSickDayCount(50);
-        this.user.setTakenSickDayCount(2);
-        this.user.addTakenSickDayCount(10);
-        assertEquals(12f, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
-     */
-    @Test
-    void addTakenSickDayCount_subtract_valid() {
-        this.user.setTotalSickDayCount(50);
-        this.user.setTakenSickDayCount(20);
-        this.user.addTakenSickDayCount(-10);
-        assertEquals(10f, this.user.getTakenSickDayCount().intValue());
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with negative result of the operation which should throw an exception.
-     */
-    @Test
-    void addTakenSickDayCount_negativeResult() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(-10));
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with null value which should throw an exception.
-     */
-    @Test
-    void addTakenSickDayCount_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(null));
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with a value that is greater than total sick days.
-     */
-    @Test
-    void addTakenSickDayCount_over() {
-        this.user.setTotalSickDayCount(10);
-        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(20));
-    }
-
-    /**
-     * Tests the method {@code addTakenSickDayCount} with a value that is equals the total sick days.
-     */
-    @Test
-    void addTakenSickDayCount_same() {
-        this.user.setTotalSickDayCount(10);
-        this.user.addTakenSickDayCount(10);
-        assertEquals(10, this.user.getTakenSickDayCount().intValue());
-    }
-
-
-    /**
-     * Tests the method {@code setNotification} with common values where no problem should occur.
-     */
-    @Test
-    void setNotification_valid() {
-        this.user.setNotification(LocalDateTime.of(2010,5,1,20,0));
-        assertEquals(LocalDateTime.of(2010,5,1,20,0), this.user.getNotification());
-    }
-
-    /**
-     * Tests the method {@code setNotification} with null value.
-     */
-    @Test
-    void setNotification_nullInput_valid() {
-        this.user.setNotification(null);
-        assertNull(this.user.getNotification());
-    }
-
-    /**
-     * Tests the method {@code setToken} with common values where no problem should occur.
-     */
-    @Test
-    void setToken_valid() {
-        this.user.setToken("aaaaa");
-        assertEquals("aaaaa", this.user.getToken());
-    }
-
-    /**
-     * Tests the method {@code setToken} with null value.
-     */
-    @Test
-    void setToken_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setToken(null));
-    }
 
     /**
      * Tests the method {@code setEmail} with common values where no problem should occur.
@@ -493,40 +152,6 @@ class RegisteredUserTest {
         assertEquals("https://st2.depositphotos.com/9223672/12056/v/950/depositphotos_120568236-stock-illustration-male-face-avatar-logo-template.jpg", this.user.getPhoto());
     }
 
-    /**
-     * Tests the method {@code setRole} with common values where no problem should occur.
-     */
-    @Test
-    void setRole_valid() {
-        this.user.setRole(UserRole.EMPLOYER);
-        assertEquals(UserRole.EMPLOYER, this.user.getRole());
-    }
-
-    /**
-     * Tests the method {@code setRole} with null value.
-     */
-    @Test
-    void setRole_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setRole(null));
-    }
-
-    /**
-     * Tests the method {@code setStatus} with common values where no problem should occur.
-     */
-    @Test
-    void setStatus_valid() {
-        this.user.setStatus(Status.ACCEPTED);
-        assertEquals(Status.ACCEPTED, this.user.getStatus());
-    }
-
-    /**
-     * Tests the method {@code setStatus} with null value.
-     */
-    @Test
-    void setStatus_nullInput() {
-        assertThrows(IllegalArgumentException.class, () -> this.user.setStatus(null));
-    }
-
     /**
      * Tests the method {@code takeVacation} with common values where no problem should occur.
      */
diff --git a/server/src/test/java/org/danekja/ymanager/domain/UserDataTest.java b/server/src/test/java/org/danekja/ymanager/domain/UserDataTest.java
new file mode 100644
index 0000000..861f2cc
--- /dev/null
+++ b/server/src/test/java/org/danekja/ymanager/domain/UserDataTest.java
@@ -0,0 +1,387 @@
+package org.danekja.ymanager.domain;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class UserDataTest {
+
+    private UserData user;
+
+    /**
+     * Prepares the instance of the {@code RegisteredUser}.
+     */
+    @BeforeEach
+    void setUp() {
+        this.user = new UserData();
+        this.user.setVacationCount(0f);
+        this.user.setTotalSickDayCount(0);
+        this.user.setTakenSickDayCount(0);
+    }
+
+    /**
+     * Tests the method {@code setVacationCount} with common values where no problem should occur.
+     */
+    @Test
+    void setVacationCount_valid() {
+        this.user.setVacationCount(10f);
+        assertEquals(10f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code setVacationCount} with zero which is a threshold value.
+     */
+    @Test
+    void setVacationCount_zeroInput_valid() {
+        this.user.setVacationCount(0f);
+        assertEquals(0f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code setVacationCount} with negative one which is a threshold value.
+     */
+    @Test
+    void setVacationCount_negativeOneInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(-1f));
+    }
+
+    /**
+     * Tests the method {@code setVacationCount} with negative value.
+     */
+    @Test
+    void setVacationCount_negativeInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(-10f));
+    }
+
+    /**
+     * Tests the method {@code setVacationCount} with null value which should throw an exception.
+     */
+    @Test
+    void setVacationCount_nullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setVacationCount(null));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with common values where no problem should occur.
+     */
+    @Test
+    void addVacationCount_floatInput_valid() {
+        this.user.addVacationCount(10f);
+        assertEquals(10f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with common values where no problem should occur.
+     */
+    @Test
+    void addVacationCount_addFloatInput_valid() {
+        this.user.setVacationCount(2f);
+        this.user.addVacationCount(10f);
+        assertEquals(12f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with common values where no problem should occur.
+     */
+    @Test
+    void addVacationCount_subtractFloatInput_valid() {
+        this.user.setVacationCount(20f);
+        this.user.addVacationCount(-10f);
+        assertEquals(10f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with negative result of the operation which should throw an exception.
+     */
+    @Test
+    void addVacationCount_floatInput_negativeResult() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(-10f));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with null value which should throw an exception.
+     */
+    @Test
+    void addVacationCount_nullFloatInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with common values where no problem should occur.
+     */
+    @Test
+    void addVacationCount_timeInput_valid() {
+        LocalTime from = LocalTime.of(10, 0);
+        LocalTime to = LocalTime.of(20, 0);
+        this.user.addVacationCount(from, to);
+        assertEquals(10f, this.user.getVacationCount().floatValue());
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with wrong order of parameters which should throw an exception.
+     */
+    @Test
+    void addVacationCount_timeInput_order() {
+        LocalTime from = LocalTime.of(10, 0);
+        LocalTime to = LocalTime.of(20, 0);
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(to, from));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with null from parameter which should throw an exception.
+     */
+    @Test
+    void addVacationCount_timeInput_nullFrom() {
+        LocalTime to = LocalTime.of(20, 0);
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null, to));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with null to parameter which should throw an exception.
+     */
+    @Test
+    void addVacationCount_timeInput_nullTo() {
+        LocalTime from = LocalTime.of(20, 0);
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(from, null));
+    }
+
+    /**
+     * Tests the method {@code addVacationCount} with null parameters which should throw an exception.
+     */
+    @Test
+    void addVacationCount_timeNullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.addVacationCount(null, null));
+    }
+
+    /**
+     * Tests the method {@code setTotalSickDayCount} with common values where no problem should occur.
+     */
+    @Test
+    void setTotalSickDayCount_valid() {
+        this.user.setTotalSickDayCount(10);
+        assertEquals(10, this.user.getTotalSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code setTotalSickDayCount} with zero which is a threshold value.
+     */
+    @Test
+    void setTotalSickDayCount_zeroInput_valid() {
+        this.user.setTotalSickDayCount(0);
+        assertEquals(0, this.user.getTotalSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code setTotalSickDayCount} with negative one which is a threshold value.
+     */
+    @Test
+    void setTotalSickDayCount_negativeOneInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTotalSickDayCount(-1));
+    }
+
+    /**
+     * Tests the method {@code setTotalSickDayCount} with negative value.
+     */
+    @Test
+    void setTotalSickDayCount_negativeInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTotalSickDayCount(-10));
+    }
+
+    /**
+     * Tests the method {@code setTotalSickDayCount} with null value.
+     */
+    @Test
+    void setTotalSickDayCount_nullInput_valid() {
+        this.user.setTotalSickDayCount(null);
+        assertNull(this.user.getTotalSickDayCount());
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with common values where no problem should occur.
+     */
+    @Test
+    void setTakenSickDayCount_valid() {
+        this.user.setTotalSickDayCount(20);
+        this.user.setTakenSickDayCount(10);
+        assertEquals(10, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with zero which is a threshold value.
+     */
+    @Test
+    void setTakenSickDayCount_zeroInput_valid() {
+        this.user.setTakenSickDayCount(0);
+        assertEquals(0, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with negative one which is a threshold value.
+     */
+    @Test
+    void setTakenSickDayCount_negativeOneInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(-1));
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with negative value.
+     */
+    @Test
+    void setTakenSickDayCount_negativeInput() {
+        this.user.setTotalSickDayCount(10);
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(-10));
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with a value that is greater than total sick days.
+     */
+    @Test
+    void setTakenSickDayCount_over() {
+        this.user.setTotalSickDayCount(10);
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(20));
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with a value that is equals the total sick days.
+     */
+    @Test
+    void setTakenSickDayCount_same() {
+        this.user.setTotalSickDayCount(10);
+        this.user.setTakenSickDayCount(10);
+        assertEquals(10, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code setTakenSickDayCount} with null value.
+     */
+    @Test
+    void setTakenSickDayCount_nullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setTakenSickDayCount(null));
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
+     */
+    @Test
+    void addTakenSickDayCount_valid() {
+        this.user.setTotalSickDayCount(50);
+        this.user.addTakenSickDayCount(10);
+        assertEquals(10, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
+     */
+    @Test
+    void addTakenSickDayCount_add_valid() {
+        this.user.setTotalSickDayCount(50);
+        this.user.setTakenSickDayCount(2);
+        this.user.addTakenSickDayCount(10);
+        assertEquals(12f, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with common values where no problem should occur.
+     */
+    @Test
+    void addTakenSickDayCount_subtract_valid() {
+        this.user.setTotalSickDayCount(50);
+        this.user.setTakenSickDayCount(20);
+        this.user.addTakenSickDayCount(-10);
+        assertEquals(10f, this.user.getTakenSickDayCount().intValue());
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with negative result of the operation which should throw an exception.
+     */
+    @Test
+    void addTakenSickDayCount_negativeResult() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(-10));
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with null value which should throw an exception.
+     */
+    @Test
+    void addTakenSickDayCount_nullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(null));
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with a value that is greater than total sick days.
+     */
+    @Test
+    void addTakenSickDayCount_over() {
+        this.user.setTotalSickDayCount(10);
+        assertThrows(IllegalArgumentException.class, () -> this.user.addTakenSickDayCount(20));
+    }
+
+    /**
+     * Tests the method {@code addTakenSickDayCount} with a value that is equals the total sick days.
+     */
+    @Test
+    void addTakenSickDayCount_same() {
+        this.user.setTotalSickDayCount(10);
+        this.user.addTakenSickDayCount(10);
+        assertEquals(10, this.user.getTakenSickDayCount().intValue());
+    }
+
+
+    /**
+     * Tests the method {@code setNotification} with common values where no problem should occur.
+     */
+    @Test
+    void setNotification_valid() {
+        this.user.setNotification(LocalDateTime.of(2010, 5, 1, 20, 0));
+        assertEquals(LocalDateTime.of(2010, 5, 1, 20, 0), this.user.getNotification());
+    }
+
+    /**
+     * Tests the method {@code setNotification} with null value.
+     */
+    @Test
+    void setNotification_nullInput_valid() {
+        this.user.setNotification(null);
+        assertNull(this.user.getNotification());
+    }
+
+    /**
+     * Tests the method {@code setRole} with common values where no problem should occur.
+     */
+    @Test
+    void setRole_valid() {
+        this.user.setRole(UserRole.EMPLOYER);
+        assertEquals(UserRole.EMPLOYER, this.user.getRole());
+    }
+
+    /**
+     * Tests the method {@code setRole} with null value.
+     */
+    @Test
+    void setRole_nullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setRole(null));
+    }
+
+    /**
+     * Tests the method {@code setStatus} with common values where no problem should occur.
+     */
+    @Test
+    void setStatus_valid() {
+        this.user.setStatus(Status.ACCEPTED);
+        assertEquals(Status.ACCEPTED, this.user.getStatus());
+    }
+
+    /**
+     * Tests the method {@code setStatus} with null value.
+     */
+    @Test
+    void setStatus_nullInput() {
+        assertThrows(IllegalArgumentException.class, () -> this.user.setStatus(null));
+    }
+
+
+}
