NotificationLog.java

1
package com.reallifedeveloper.common.application.notification;
2
3
import java.util.List;
4
import java.util.Optional;
5
6
import org.checkerframework.checker.nullness.qual.Nullable;
7
8
import com.reallifedeveloper.common.domain.ErrorHandling;
9
10
/**
11
 * A notification log holds a list of {@link Notification Notifications}, i.e., information about domain events that have occurred and have
12
 * been stored in an {@link com.reallifedeveloper.common.application.eventstore.EventStore}.
13
 * <p>
14
 * A notification log may be <i>archived</i>, which means that it will never change. If a log is archived, it means that the ID of the log
15
 * will always refer to the current list of {@link Notification Notifications}. If it is not archived, the only change that may occur is
16
 * that more notifications are added to it; the notifications themselves represent historical events that have already occurred, so they are
17
 * immutable.
18
 *
19
 * @param current          the ID of the current notification log, must not be {@code null}
20
 * @param nullableNext     the ID of the next notification log, may be {@code null}
21
 * @param nullablePrevious the ID of the previous notification log, may be {@code null}
22
 * @param notifications    the list of notifications in this notification log, must not be {@code null}
23
 * @param isArchived       if {@code true}, this notification log is archived, i.e., it will never change
24
 *
25
 * @author RealLifeDeveloper
26
 */
27
public record NotificationLog(NotificationLogId current, @Nullable NotificationLogId nullableNext,
28
        @Nullable NotificationLogId nullablePrevious, List<Notification> notifications, boolean isArchived) {
29
30
    /**
31
     * Creates a new {@code NotificationLog}.
32
     */
33
    public NotificationLog {
34
        ErrorHandling.checkNull("Arguments must not be null: current=%s, notifications=%s", current, notifications);
35
        notifications = List.copyOf(notifications);
36
    }
37
38
    /**
39
     * Gives the ID of the next notification log as a {@code java.util.Optional}.
40
     *
41
     * @return the ID of the next notification log
42
     */
43
    public Optional<NotificationLogId> next() {
44 1 1. next : replaced return value with Optional.empty for com/reallifedeveloper/common/application/notification/NotificationLog::next → KILLED
        return Optional.ofNullable(nullableNext);
45
    }
46
47
    /**
48
     * Gives the ID of the previous notification log as a {@code java.util.Optional}.
49
     *
50
     * @return the ID of the previous notification log
51
     */
52
    public Optional<NotificationLogId> previous() {
53 1 1. previous : replaced return value with Optional.empty for com/reallifedeveloper/common/application/notification/NotificationLog::previous → RUN_ERROR
        return Optional.ofNullable(nullablePrevious);
54
    }
55
}

Mutations

44

1.1
Location : next
Killed by : com.reallifedeveloper.common.application.notification.NotificationLogTest.[engine:junit-jupiter]/[class:com.reallifedeveloper.common.application.notification.NotificationLogTest]/[method:constructor()]
replaced return value with Optional.empty for com/reallifedeveloper/common/application/notification/NotificationLog::next → KILLED

53

1.1
Location : previous
Killed by : none
replaced return value with Optional.empty for com/reallifedeveloper/common/application/notification/NotificationLog::previous → RUN_ERROR

Active mutators

Tests examined


Report generated by PIT 1.20.0