From 249efd1e71db05f232971becf7354f95eb8d6b87 Mon Sep 17 00:00:00 2001 From: sugavanesh <71312159+sugan0tech@users.noreply.github.com> Date: Sat, 9 Mar 2024 18:16:46 +0530 Subject: [PATCH] feat: added notification pattern (#2629) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ilkka Seppälä --- notification/README.md | 251 ++++++++++++++++++ notification/etc/notification.urm.png | Bin 0 -> 146478 bytes notification/etc/notification.urm.puml | 89 +++++++ notification/pom.xml | 20 ++ .../src/main/java/com/iluwatar/App.java | 26 ++ .../java/com/iluwatar/DataTransferObject.java | 16 ++ .../main/java/com/iluwatar/Notification.java | 26 ++ .../java/com/iluwatar/NotificationError.java | 20 ++ .../java/com/iluwatar/RegisterWorker.java | 79 ++++++ .../java/com/iluwatar/RegisterWorkerDto.java | 59 ++++ .../java/com/iluwatar/RegisterWorkerForm.java | 66 +++++ .../com/iluwatar/RegisterWorkerService.java | 18 ++ .../main/java/com/iluwatar/ServerCommand.java | 21 ++ .../src/test/java/com/iluwatar/AppTest.java | 14 + .../com/iluwatar/RegisterWorkerFormTest.java | 53 ++++ .../java/com/iluwatar/RegisterWorkerTest.java | 90 +++++++ pom.xml | 1 + 17 files changed, 849 insertions(+) create mode 100644 notification/README.md create mode 100644 notification/etc/notification.urm.png create mode 100644 notification/etc/notification.urm.puml create mode 100644 notification/pom.xml create mode 100644 notification/src/main/java/com/iluwatar/App.java create mode 100644 notification/src/main/java/com/iluwatar/DataTransferObject.java create mode 100644 notification/src/main/java/com/iluwatar/Notification.java create mode 100644 notification/src/main/java/com/iluwatar/NotificationError.java create mode 100644 notification/src/main/java/com/iluwatar/RegisterWorker.java create mode 100644 notification/src/main/java/com/iluwatar/RegisterWorkerDto.java create mode 100644 notification/src/main/java/com/iluwatar/RegisterWorkerForm.java create mode 100644 notification/src/main/java/com/iluwatar/RegisterWorkerService.java create mode 100644 notification/src/main/java/com/iluwatar/ServerCommand.java create mode 100644 notification/src/test/java/com/iluwatar/AppTest.java create mode 100644 notification/src/test/java/com/iluwatar/RegisterWorkerFormTest.java create mode 100644 notification/src/test/java/com/iluwatar/RegisterWorkerTest.java diff --git a/notification/README.md b/notification/README.md new file mode 100644 index 000000000..619a4ad7a --- /dev/null +++ b/notification/README.md @@ -0,0 +1,251 @@ +title: Notification +category: Behavioural +language: en +tags: +- Decoupling +- Presentation +- Domain +--- + +## Intent + +To capture information about errors and other information that occurs in the domain layer +which acts as the internal logic and validation tool. The notification then communicates this information +back to the presentation for handling and displaying to the user what errors have occurred and why. + +## Explanation + +Real world example + +> You need to register a worker for your company. The information submitted needs to be valid +> before the worker can be added to the database, and if there are any errors you need to know about them. + +In plain words + +> A notification is simply a way of collecting information about errors and communicating it to the user +> so that they are aware of them + +**Programatic example** +Building off the example of registering a worker for a company, we can now explore a coded example for a full picture +of how this pattern looks when coded up. For full code please visit the github repository. + +To begin with, the user submits information to a form through the presentation layer of our software. The information +given to register a worker is the worker's name, occupation, and date of birth. The program will then make sure none of +these fields are blank (validation) and that the worker is over 18 years old. If there are any errors, +the program will inform the user. + +The code for the form is given below. This form acts as our presentation layer, taking input from the user and printing +output using a LOGGER (in this case). The form then gives this information to the service layer RegisterWorkerService +through a data transfer object (DTO). + +The service handles information validation and the presentation can then check the notification stored within the DTO for +any errors and display them to the user if necessary. Otherwise, it will inform the user the submission was processed +successfully. + +form: +```java +/** + * The form submitted by the user, part of the presentation layer, + * linked to the domain layer through a data transfer object and + * linked to the service layer directly. + */ +@Slf4j +public class RegisterWorkerForm { + String name; + String occupation; + LocalDate dateOfBirth; + RegisterWorkerDto worker; + /** + * Service super type which the form uses as part of its service layer. + */ + RegisterWorkerService service = new RegisterWorkerService(); + + /** + * Creates the form. + * + * @param name name of worker + * @param occupation occupation of the worker + * @param dateOfBirth date of birth of the worker + */ + public RegisterWorkerForm(String name, String occupation, LocalDate dateOfBirth) { + this.name = name; + this.occupation = occupation; + this.dateOfBirth = dateOfBirth; + } + + /** + * Attempts to submit the form for registering a worker. + */ + public void submit() { + //Save worker information (like name, occupation, dob) to our transfer object to be communicated between layers + saveToWorker(); + //call the service layer to register our worker + service.registerWorker(worker); + + //check for any errors + if (worker.getNotification().hasErrors()) { + indicateErrors(); //displays errors to users + LOGGER.info("Not registered, see errors"); + } else { + LOGGER.info("Registration Succeeded"); + } + } + + ... +} +``` + +The data transfer object (DTO) created stores the information submitted (name, occupation, date of birth), as well as +information on the notification after this data has been validated (stored in the DTO class it extends). +This acts as the link between the service layer and our domain layer which runs the internal logic. +It also holds information on the error types created. + +DTO: +```java +/** + * Data transfer object which stores information about the worker. This is carried between + * objects and layers to reduce the number of method calls made. + */ +@Getter +@Setter +public class RegisterWorkerDto extends DataTransferObject { + private String name; + private String occupation; + private LocalDate dateOfBirth; + + /** + * Error for when name field is blank or missing. + */ + public static final NotificationError MISSING_NAME = + new NotificationError(1, "Name is missing"); + + /** + * Error for when occupation field is blank or missing. + */ + public static final NotificationError MISSING_OCCUPATION = + new NotificationError(2, "Occupation is missing"); + + /** + * Error for when date of birth field is blank or missing. + */ + public static final NotificationError MISSING_DOB = + new NotificationError(3, "Date of birth is missing"); + + /** + * Error for when date of birth is less than 18 years ago. + */ + public static final NotificationError DOB_TOO_SOON = + new NotificationError(4, "Worker registered must be over 18"); + + + protected RegisterWorkerDto() { + super(); + } + + ... +} +``` + +These errors are stored within a simple wrapper class called NotificationError. + +Our service layer (RegisterWorkerService) represents the framework of our service layer. Currently, it will +run the commands necessary to validate our Java object without handling any of the internal logic itself, +passing on the work, along with our DTO, to the domain layer. + +This validation itself is done in RegisterWorker which works within our domain layer. ServerCommand acts as +a SuperType here for the domain and holds any DTOs needed. If it passes validation, our worker is then added into +the database as submission was successful! + +validation: +```java +/** + * Handles internal logic and validation for worker registration. + * Part of the domain layer which collects information and sends it back to the presentation. + */ +@Slf4j +public class RegisterWorker extends ServerCommand { + protected RegisterWorker(RegisterWorkerDto worker) { + super(worker); + } + + /** + * Validates the data provided and adds it to the database in the backend. + */ + public void run() { + //make sure the information submitted is valid + validate(); + if (!super.getNotification().hasErrors()) { + //Add worker to system in backend (not implemented here) + LOGGER.info("Register worker in backend system"); + } + } + + /** + * Validates our data. Checks for any errors and if found, stores them in our notification. + */ + private void validate() { + var ourData = ((RegisterWorkerDto) this.data); + //check if any of submitted data is not given + failIfNullOrBlank(ourData.getName(), RegisterWorkerDto.MISSING_NAME); + failIfNullOrBlank(ourData.getOccupation(), RegisterWorkerDto.MISSING_OCCUPATION); + failIfNullOrBlank(ourData.getDateOfBirth().toString(), RegisterWorkerDto.MISSING_DOB); + //only if DOB is not blank, then check if worker is over 18 to register. + if (!super.getNotification().getErrors().contains(RegisterWorkerDto.MISSING_DOB)) { + var dateOfBirth = ourData.getDateOfBirth(); + var current = now().minusYears(18); + fail(dateOfBirth.compareTo(current) > 0, RegisterWorkerDto.DOB_TOO_SOON); + } + } + + ... +} +``` + +After all of this explanation, we can then simulate the following inputs into the form and submit them: + +input: +```java + /** + * Variables to be submitted in the form. + */ + private static final String NAME = ""; + private static final String OCCUPATION = ""; + private static final LocalDate DATE_OF_BIRTH = LocalDate.of(2016, 7, 13); + + RegisterWorkerForm form = new RegisterWorkerForm(NAME, OCCUPATION, DATE_OF_BIRTH); + form.submit(); +``` + +The form then processes the submission and returns these error messages to the user, showing our notification worked. + +output: +```java +18:10:00.075 [main] INFO com.iluwater.RegisterWorkerForm - Error 1: Name is missing: "" +18:10:00.079 [main] INFO com.iluwater.RegisterWorkerForm - Error 2: Occupation is missing: "" +18:10:00.079 [main] INFO com.iluwater.RegisterWorkerForm - Error 4: Worker registered must be over 18: "2016-07-13" +18:10:00.080 [main] INFO com.iluwater.RegisterWorkerForm - Not registered, see errors +``` + +## Class diagram + +![alt text](./etc/notification.urm.png "Notification") + +## Applicability + +Use the notification pattern when: + +* You wish to communicate information about errors between the domain layer and the presentation layer. This is most applicable when a seperated presentation pattern is being used as this does not allow for direct communication between the domain and presentation. + +## Related patterns + +* [Service Layer](https://java-design-patterns.com/patterns/service-layer/) +* [Data Transfer Object](https://java-design-patterns.com/patterns/data-transfer-object/) +* [Domain Model](https://java-design-patterns.com/patterns/domain-model/) +* [Remote Facade](https://martinfowler.com/eaaCatalog/remoteFacade.html) +* [Autonomous View](https://martinfowler.com/eaaDev/AutonomousView.html) +* [Layer Supertype](https://martinfowler.com/eaaCatalog/layerSupertype.html) +* [Separated Presentation](https://java-design-patterns.com/patterns/data-transfer-object/) + +## Credits + +* [Martin Fowler - Notification Pattern](https://martinfowler.com/eaaDev/Notification.html) \ No newline at end of file diff --git a/notification/etc/notification.urm.png b/notification/etc/notification.urm.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4a9b7d5607572bda71beb67fd9944d2fb8c49d GIT binary patch literal 146478 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 G<^KhWijbxN literal 0 HcmV?d00001 diff --git a/notification/etc/notification.urm.puml b/notification/etc/notification.urm.puml new file mode 100644 index 000000000..ca4fe2776 --- /dev/null +++ b/notification/etc/notification.urm.puml @@ -0,0 +1,89 @@ +@startuml +package com.iluwatar { + class App { + - DATE_OF_BIRTH : LocalDate {static} + - NAME : String {static} + - OCCUPATION : String {static} + - App() + + main(args : String[]) {static} + } + class DataTransferObject { + # notification : Notification + + DataTransferObject() + + getNotification() : Notification + } + class Notification { + - errors : List + + Notification() + + addError(error : NotificationError) + + getErrors() : List + + hasErrors() : boolean + } + class NotificationError { + - errorId : int + - errorMessage : String + + NotificationError(errorId : int, errorMessage : String) + + getErrorId() : int + + getErrorMessage() : String + + toString() : String + } + class RegisterWorker { + - LOGGER : Logger {static} + # RegisterWorker(worker : RegisterWorkerDto) + # fail(condition : boolean, error : NotificationError) + # failIfNullOrBlank(s : String, error : NotificationError) + # isNullOrBlank(s : String) : boolean + + run() + - validate() + } + class RegisterWorkerDto { + + DOB_TOO_SOON : NotificationError {static} + + MISSING_DOB : NotificationError {static} + + MISSING_NAME : NotificationError {static} + + MISSING_OCCUPATION : NotificationError {static} + - dateOfBirth : LocalDate + - name : String + - occupation : String + # RegisterWorkerDto() + + getDateOfBirth() : LocalDate + + getName() : String + + getOccupation() : String + + setDateOfBirth(dateOfBirth : LocalDate) + + setName(name : String) + + setOccupation(occupation : String) + + setupWorkerDto(name : String, occupation : String, dateOfBirth : LocalDate) + } + class RegisterWorkerForm { + - LOGGER : Logger {static} + ~ dateOfBirth : LocalDate + ~ name : String + ~ occupation : String + ~ service : RegisterWorkerService + ~ worker : RegisterWorkerDto + + RegisterWorkerForm(name : String, occupation : String, dateOfBirth : LocalDate) + - checkError(error : NotificationError, info : String) + - indicateErrors() + - saveToWorker() + ~ showError(info : String, message : String) + + submit() + } + class RegisterWorkerService { + + RegisterWorkerService() + + registerWorker(registration : RegisterWorkerDto) + } + class ServerCommand { + # data : DataTransferObject + + ServerCommand(data : DataTransferObject) + + getNotification() : Notification + } +} +Notification --> "-errors" NotificationError +DataTransferObject --> "-notification" Notification +RegisterWorkerForm --> "-service" RegisterWorkerService +RegisterWorkerForm --> "-worker" RegisterWorkerDto +ServerCommand --> "-data" DataTransferObject +RegisterWorkerDto --> "-MISSING_DOB" NotificationError +RegisterWorkerDto --> "-MISSING_NAME" NotificationError +RegisterWorker --|> ServerCommand +RegisterWorkerDto --|> DataTransferObject +@enduml \ No newline at end of file diff --git a/notification/pom.xml b/notification/pom.xml new file mode 100644 index 000000000..9755f96f3 --- /dev/null +++ b/notification/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.26.0-SNAPSHOT + + + + org.junit.jupiter + junit-jupiter-params + test + + + + notification + \ No newline at end of file diff --git a/notification/src/main/java/com/iluwatar/App.java b/notification/src/main/java/com/iluwatar/App.java new file mode 100644 index 000000000..70e51236c --- /dev/null +++ b/notification/src/main/java/com/iluwatar/App.java @@ -0,0 +1,26 @@ +package com.iluwatar; + +import java.time.LocalDate; + +/** + * The notification pattern captures information passed between layers, validates the information, and returns + * any errors to the presentation layer if needed. + * + *

In this code, this pattern is implemented through the example of a form being submitted to register + * a worker. The worker inputs their name, occupation, and date of birth to the RegisterWorkerForm (which acts + * as our presentation layer), and passes it to the RegisterWorker class (our domain layer) which validates it. + * Any errors caught by the domain layer are then passed back to the presentation layer through the + * RegisterWorkerDto.

+ */ +public class App { + + private static final String NAME = ""; + private static final String OCCUPATION = ""; + private static final LocalDate DATE_OF_BIRTH = LocalDate.of(2016, 7, 13); + + public static void main(String[] args) { + var form = new RegisterWorkerForm(NAME, OCCUPATION, DATE_OF_BIRTH); + form.submit(); + } + +} diff --git a/notification/src/main/java/com/iluwatar/DataTransferObject.java b/notification/src/main/java/com/iluwatar/DataTransferObject.java new file mode 100644 index 000000000..23430e570 --- /dev/null +++ b/notification/src/main/java/com/iluwatar/DataTransferObject.java @@ -0,0 +1,16 @@ +package com.iluwatar; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * Layer super type for all Data Transfer Objects. + * Also contains code for accessing our notification. + */ +@Getter +@NoArgsConstructor +public class DataTransferObject { + + private final Notification notification = new Notification(); + +} diff --git a/notification/src/main/java/com/iluwatar/Notification.java b/notification/src/main/java/com/iluwatar/Notification.java new file mode 100644 index 000000000..93a40ecc7 --- /dev/null +++ b/notification/src/main/java/com/iluwatar/Notification.java @@ -0,0 +1,26 @@ +package com.iluwatar; + +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * The notification. Used for storing errors and any other methods + * that may be necessary for when we send information back to the + * presentation layer. + */ +@Getter +@NoArgsConstructor +public class Notification { + + private final List errors = new ArrayList<>(); + + public boolean hasErrors() { + return !this.errors.isEmpty(); + } + + public void addError(NotificationError error) { + this.errors.add(error); + } +} diff --git a/notification/src/main/java/com/iluwatar/NotificationError.java b/notification/src/main/java/com/iluwatar/NotificationError.java new file mode 100644 index 000000000..d53d900e5 --- /dev/null +++ b/notification/src/main/java/com/iluwatar/NotificationError.java @@ -0,0 +1,20 @@ +package com.iluwatar; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * Error class for storing information on the error. + * Error ID is not necessary, but may be useful for serialisation. + */ +@Getter +@AllArgsConstructor +public class NotificationError { + private int errorId; + private String errorMessage; + + @Override + public String toString() { + return "Error " + errorId + ": " + errorMessage; + } +} diff --git a/notification/src/main/java/com/iluwatar/RegisterWorker.java b/notification/src/main/java/com/iluwatar/RegisterWorker.java new file mode 100644 index 000000000..35b101a95 --- /dev/null +++ b/notification/src/main/java/com/iluwatar/RegisterWorker.java @@ -0,0 +1,79 @@ +package com.iluwatar; + +import java.time.LocalDate; +import java.time.Period; +import lombok.extern.slf4j.Slf4j; + +/** + * Class which handles actual internal logic and validation for worker registration. + * Part of the domain layer which collects information and sends it back to the presentation. + */ +@Slf4j +public class RegisterWorker extends ServerCommand { + static final int LEGAL_AGE = 18; + protected RegisterWorker(RegisterWorkerDto worker) { + super(worker); + } + + /** + * Validates the data provided and adds it to the database in the backend. + */ + public void run() { + + validate(); + if (!super.getNotification().hasErrors()) { + LOGGER.info("Register worker in backend system"); + } + } + + /** + * Validates our data. Checks for any errors and if found, adds to notification. + */ + private void validate() { + var ourData = ((RegisterWorkerDto) this.data); + //check if any of submitted data is not given + // passing for empty value validation + fail(isNullOrBlank(ourData.getName()), RegisterWorkerDto.MISSING_NAME); + fail(isNullOrBlank(ourData.getOccupation()), RegisterWorkerDto.MISSING_OCCUPATION); + fail(isNullOrBlank(ourData.getDateOfBirth()), RegisterWorkerDto.MISSING_DOB); + + if (isNullOrBlank(ourData.getDateOfBirth())) { + // If DOB is null or empty + fail(true, RegisterWorkerDto.MISSING_DOB); + } else { + // Validating age ( should be greater than or equal to 18 ) + Period age = Period.between(ourData.getDateOfBirth(), LocalDate.now()); + fail(age.getYears() < LEGAL_AGE, RegisterWorkerDto.DOB_TOO_SOON); + } + } + + /** + * Validates for null/empty value. + * + * @param obj any object + * @return boolean + */ + protected boolean isNullOrBlank(Object obj) { + if (obj == null) { + return true; + } + + if (obj instanceof String) { + return ((String) obj).trim().isEmpty(); + } + + return false; + } + + /** + * If a condition is met, adds the error to our notification. + * + * @param condition condition to check for. + * @param error error to add if condition met. + */ + protected void fail(boolean condition, NotificationError error) { + if (condition) { + super.getNotification().addError(error); + } + } +} diff --git a/notification/src/main/java/com/iluwatar/RegisterWorkerDto.java b/notification/src/main/java/com/iluwatar/RegisterWorkerDto.java new file mode 100644 index 000000000..1bf705e62 --- /dev/null +++ b/notification/src/main/java/com/iluwatar/RegisterWorkerDto.java @@ -0,0 +1,59 @@ +package com.iluwatar; + +import java.time.LocalDate; +import lombok.Getter; +import lombok.Setter; + +/** + * Data transfer object which stores information about the worker. This is carried between + * objects and layers to reduce the number of method calls made. + */ +@Getter +@Setter +public class RegisterWorkerDto extends DataTransferObject { + private String name; + private String occupation; + private LocalDate dateOfBirth; + + /** + * Error for when name field is blank or missing. + */ + public static final NotificationError MISSING_NAME = + new NotificationError(1, "Name is missing"); + + /** + * Error for when occupation field is blank or missing. + */ + public static final NotificationError MISSING_OCCUPATION = + new NotificationError(2, "Occupation is missing"); + + /** + * Error for when date of birth field is blank or missing. + */ + public static final NotificationError MISSING_DOB = + new NotificationError(3, "Date of birth is missing"); + + /** + * Error for when date of birth is less than 18 years ago. + */ + public static final NotificationError DOB_TOO_SOON = + new NotificationError(4, "Worker registered must be over 18"); + + + protected RegisterWorkerDto() { + super(); + } + + /** + * Simple set up function for capturing our worker information. + * + * @param name Name of the worker + * @param occupation occupation of the worker + * @param dateOfBirth Date of Birth of the worker + */ + public void setupWorkerDto(String name, String occupation, LocalDate dateOfBirth) { + this.name = name; + this.occupation = occupation; + this.dateOfBirth = dateOfBirth; + } +} diff --git a/notification/src/main/java/com/iluwatar/RegisterWorkerForm.java b/notification/src/main/java/com/iluwatar/RegisterWorkerForm.java new file mode 100644 index 000000000..3d03c967c --- /dev/null +++ b/notification/src/main/java/com/iluwatar/RegisterWorkerForm.java @@ -0,0 +1,66 @@ +package com.iluwatar; + +import java.time.LocalDate; +import lombok.extern.slf4j.Slf4j; + +/** + * The form submitted by the user, part of the presentation layer, + * linked to the domain layer through a data transfer object and + * linked to the service layer directly. + */ +@Slf4j +public class RegisterWorkerForm { + String name; + String occupation; + LocalDate dateOfBirth; + RegisterWorkerDto worker; + RegisterWorkerService service = new RegisterWorkerService(); + + /** + * Constructor. + * + * @param name Name of the worker + * @param occupation occupation of the worker + * @param dateOfBirth Date of Birth of the worker + */ + public RegisterWorkerForm(String name, String occupation, LocalDate dateOfBirth) { + this.name = name; + this.occupation = occupation; + this.dateOfBirth = dateOfBirth; + } + + /** + * Attempts to submit the form for registering a worker. + */ + public void submit() { + //Transmit information to our transfer object to communicate between layers + saveToWorker(); + //call the service layer to register our worker + service.registerWorker(worker); + + //check for any errors + if (worker.getNotification().hasErrors()) { + indicateErrors(); + LOGGER.info("Not registered, see errors"); + } else { + LOGGER.info("Registration Succeeded"); + } + } + + /** + * Saves worker information to the data transfer object. + */ + private void saveToWorker() { + worker = new RegisterWorkerDto(); + worker.setName(name); + worker.setOccupation(occupation); + worker.setDateOfBirth(dateOfBirth); + } + + /** + * Check for any errors with form submission and show them to the user. + */ + public void indicateErrors() { + worker.getNotification().getErrors().forEach(error -> LOGGER.error(error.toString())); + } +} diff --git a/notification/src/main/java/com/iluwatar/RegisterWorkerService.java b/notification/src/main/java/com/iluwatar/RegisterWorkerService.java new file mode 100644 index 000000000..bcdd4e08b --- /dev/null +++ b/notification/src/main/java/com/iluwatar/RegisterWorkerService.java @@ -0,0 +1,18 @@ +package com.iluwatar; + +/** + * Service used to register a worker. + * This represents the basic framework of a service layer which can be built upon. + */ +public class RegisterWorkerService { + /** + * Creates and runs a command object to do the work needed, + * in this case, register a worker in the system. + * + * @param registration worker to be registered if possible + */ + public void registerWorker(RegisterWorkerDto registration) { + var cmd = new RegisterWorker(registration); + cmd.run(); + } +} diff --git a/notification/src/main/java/com/iluwatar/ServerCommand.java b/notification/src/main/java/com/iluwatar/ServerCommand.java new file mode 100644 index 000000000..8c820d3de --- /dev/null +++ b/notification/src/main/java/com/iluwatar/ServerCommand.java @@ -0,0 +1,21 @@ +package com.iluwatar; + +import lombok.AllArgsConstructor; + +/** + * Stores the dto and access the notification within it. + * Acting as a layer supertype in this instance for the domain layer. + */ +@AllArgsConstructor +public class ServerCommand { + protected DataTransferObject data; + + /** + * Basic getter to extract information from our data. + * + * @return the notification stored within the data + */ + public Notification getNotification() { + return data.getNotification(); + } +} diff --git a/notification/src/test/java/com/iluwatar/AppTest.java b/notification/src/test/java/com/iluwatar/AppTest.java new file mode 100644 index 000000000..8c20e97da --- /dev/null +++ b/notification/src/test/java/com/iluwatar/AppTest.java @@ -0,0 +1,14 @@ +package com.iluwatar; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +class AppTest { + + @Test + void shouldExecuteApplicationWithoutException() { + assertDoesNotThrow(() -> App.main(new String[]{})); + } +} + diff --git a/notification/src/test/java/com/iluwatar/RegisterWorkerFormTest.java b/notification/src/test/java/com/iluwatar/RegisterWorkerFormTest.java new file mode 100644 index 000000000..ffeccce82 --- /dev/null +++ b/notification/src/test/java/com/iluwatar/RegisterWorkerFormTest.java @@ -0,0 +1,53 @@ +package com.iluwatar; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.read.ListAppender; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.util.logging.Logger; + +import static org.junit.jupiter.api.Assertions.*; + +class RegisterWorkerFormTest { + + private RegisterWorkerForm registerWorkerForm; + + @Test + void submitSuccessfully() { + // Ensure the worker is null initially + registerWorkerForm = new RegisterWorkerForm("John Doe", "Engineer", LocalDate.of(1990, 1, 1)); + + assertNull(registerWorkerForm.worker); + + // Submit the form + registerWorkerForm.submit(); + + // Verify that the worker is not null after submission + assertNotNull(registerWorkerForm.worker); + + // Verify that the worker's properties are set correctly + assertEquals("John Doe", registerWorkerForm.worker.getName()); + assertEquals("Engineer", registerWorkerForm.worker.getOccupation()); + assertEquals(LocalDate.of(1990, 1, 1), registerWorkerForm.worker.getDateOfBirth()); + } + + @Test + void submitWithErrors() { + // Set up the worker with a notification containing errors + registerWorkerForm = new RegisterWorkerForm(null, null, null); + + // Submit the form + registerWorkerForm.submit(); + + // Verify that the worker's properties remain unchanged + assertNull(registerWorkerForm.worker.getName()); + assertNull(registerWorkerForm.worker.getOccupation()); + assertNull(registerWorkerForm.worker.getDateOfBirth()); + + // Verify the presence of errors + assertEquals(registerWorkerForm.worker.getNotification().getErrors().size(), 4); + } + +} diff --git a/notification/src/test/java/com/iluwatar/RegisterWorkerTest.java b/notification/src/test/java/com/iluwatar/RegisterWorkerTest.java new file mode 100644 index 000000000..7b258afb6 --- /dev/null +++ b/notification/src/test/java/com/iluwatar/RegisterWorkerTest.java @@ -0,0 +1,90 @@ +package com.iluwatar; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.*; + +@Slf4j +class RegisterWorkerTest { + + @Test + void runSuccessfully() { + RegisterWorkerDto validWorkerDto = createValidWorkerDto(); + validWorkerDto.setupWorkerDto("name", "occupation", LocalDate.of(2000, 12, 1)); + RegisterWorker registerWorker = new RegisterWorker(validWorkerDto); + + // Run the registration process + registerWorker.run(); + + // Verify that there are no errors in the notification + assertFalse(registerWorker.getNotification().hasErrors()); + } + + @Test + void runWithMissingName() { + RegisterWorkerDto workerDto = createValidWorkerDto(); + workerDto.setupWorkerDto(null, "occupation", LocalDate.of(2000, 12, 1)); + RegisterWorker registerWorker = new RegisterWorker(workerDto); + + // Run the registration process + registerWorker.run(); + + // Verify that the notification contains the missing name error + assertTrue(registerWorker.getNotification().hasErrors()); + assertTrue(registerWorker.getNotification().getErrors().contains(RegisterWorkerDto.MISSING_NAME)); + assertEquals(registerWorker.getNotification().getErrors().size(), 1); + } + + @Test + void runWithMissingOccupation() { + RegisterWorkerDto workerDto = createValidWorkerDto(); + workerDto.setupWorkerDto("name", null, LocalDate.of(2000, 12, 1)); + RegisterWorker registerWorker = new RegisterWorker(workerDto); + + // Run the registration process + registerWorker.run(); + + // Verify that the notification contains the missing occupation error + assertTrue(registerWorker.getNotification().hasErrors()); + assertTrue(registerWorker.getNotification().getErrors().contains(RegisterWorkerDto.MISSING_OCCUPATION)); + assertEquals(registerWorker.getNotification().getErrors().size(), 1); + } + + @Test + void runWithMissingDOB() { + RegisterWorkerDto workerDto = createValidWorkerDto(); + workerDto.setupWorkerDto("name", "occupation", null); + RegisterWorker registerWorker = new RegisterWorker(workerDto); + + // Run the registration process + registerWorker.run(); + + // Verify that the notification contains the missing DOB error + assertTrue(registerWorker.getNotification().hasErrors()); + assertTrue(registerWorker.getNotification().getErrors().contains(RegisterWorkerDto.MISSING_DOB)); + assertEquals(registerWorker.getNotification().getErrors().size(), 2); + } + + @Test + void runWithUnderageDOB() { + RegisterWorkerDto workerDto = createValidWorkerDto(); + workerDto.setDateOfBirth(LocalDate.now().minusYears(17)); // Under 18 + workerDto.setupWorkerDto("name", "occupation", LocalDate.now().minusYears(17)); + RegisterWorker registerWorker = new RegisterWorker(workerDto); + + // Run the registration process + registerWorker.run(); + + // Verify that the notification contains the underage DOB error + assertTrue(registerWorker.getNotification().hasErrors()); + assertTrue(registerWorker.getNotification().getErrors().contains(RegisterWorkerDto.DOB_TOO_SOON)); + assertEquals(registerWorker.getNotification().getErrors().size(), 1); + } + + private RegisterWorkerDto createValidWorkerDto() { + return new RegisterWorkerDto(); + } +} diff --git a/pom.xml b/pom.xml index e45a5ee16..8af7ff7ae 100644 --- a/pom.xml +++ b/pom.xml @@ -210,6 +210,7 @@ crtp log-aggregation health-check + notification single-table-inheritance