Skip to content
Snippets Groups Projects
Commit 2d81e9c0 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-6798 add MailSendRequest validation

parent 38bb443a
Branches
Tags
No related merge requests found
......@@ -25,18 +25,20 @@ package de.ozgcloud.nachrichten.email;
import java.util.Objects;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.extern.log4j.Log4j2;
@Service
......@@ -55,6 +57,7 @@ class EMailService {
@Autowired
private ApplicationEventPublisher publisher;
@Async
public void sendEmail(MailSendRequest request) {
MimeMessage message = sender.createMimeMessage();
prepareAndSendMail(message, request);
......
......@@ -23,8 +23,10 @@
*/
package de.ozgcloud.nachrichten.email;
import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
@Builder
public record MailRecipient(String firstName, String lastName, String email) {
public record MailRecipient(String firstName, String lastName, @NotBlank String email) {
}
......@@ -26,6 +26,9 @@ package de.ozgcloud.nachrichten.email;
import java.util.Collection;
import jakarta.activation.DataSource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;
......@@ -36,7 +39,8 @@ public class MailSendRequest {
private String fromAddress;
@Singular
private Collection<MailRecipient> toAddresses;
@NotEmpty
private Collection<@Valid MailRecipient> toAddresses;
private String replyTo;
......
......@@ -23,18 +23,20 @@
*/
package de.ozgcloud.nachrichten.email;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@Service
@Validated
public class MailService {
@Autowired
private EMailService emailService;
@Async
public void sendMail(MailSendRequest request) {
public void sendMail(@Valid MailSendRequest request) {
emailService.sendEmail(request);
}
}
......@@ -25,9 +25,10 @@ package de.ozgcloud.nachrichten.email;
import java.util.UUID;
import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
import jakarta.mail.util.ByteArrayDataSource;
import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
class MailSendRequestTestFactory {
public static final String FROM = "from@mailinator.com";
......@@ -36,7 +37,7 @@ class MailSendRequestTestFactory {
public static final String SUBJECT = "The Subject";
public static final String BODY = "Lorem ipsum";
private static final String REFERENCE = UUID.randomUUID().toString();
public static final String REFERENCE = UUID.randomUUID().toString();
public static final String ATTACHMENT_NAME = "aFile";
public static final String ATTACHMENT = "BINARY_BLAH";
......
package de.ozgcloud.nachrichten.email;
import static de.ozgcloud.nachrichten.email.MailSendRequestTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import jakarta.mail.util.ByteArrayDataSource;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import de.ozgcloud.nachrichten.email.MailSendRequest.MailAttachment;
class MailSendRequestValidationTest {
private Validator validator;
@BeforeEach
public void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Nested
class TestToAddressesValidation {
@Test
void shouldBeValid() {
var request = MailSendRequestTestFactory.create();
var violations = validator.validate(request);
assertThat(violations).isEmpty();
}
@Test
void shouldBeInvalidOnNull() {
var ds = new ByteArrayDataSource(ATTACHMENT.getBytes(), "plain/text");
ds.setName(ATTACHMENT_NAME);
var request = MailSendRequest.builder()
.fromAddress(FROM)
.subject(SUBJECT)
.body(BODY)
.requestReference(REFERENCE)
.attachment(MailAttachment.builder()
.dataSource(ds)
.build())
.replyTo(REPLY_TO)
.build();
var violations = validator.validate(request);
assertThat(violations).isNotEmpty();
}
@Test
void shouldBeInvalidOnEmpty() {
var request = MailSendRequestTestFactory.createBuilder().clearToAddresses().build();
var violations = validator.validate(request);
assertThat(violations).isNotEmpty();
}
@ParameterizedTest
@NullAndEmptySource
void shouldBeInvalidOnBlankRecipientEmail(String email) {
var recipient = MailRecipientTestFactory.createBuilder()
.email(email)
.build();
var request = MailSendRequestTestFactory.createBuilder().clearToAddresses().toAddress(recipient).build();
var violations = validator.validate(request);
assertThat(violations).isNotEmpty();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment