diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/EmailServiceImpl.java b/src/main/java/uk/gov/companieshouse/efs/api/email/EmailServiceImpl.java index 342e4b19..ee45b0a0 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/EmailServiceImpl.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/EmailServiceImpl.java @@ -57,13 +57,13 @@ public void sendExternalAccept(ExternalAcceptEmailModel emailModel) { @Override public void sendExternalReject(ExternalRejectEmailModel emailModel) { - LOGGER.debug(format("Sending external email rejecting submission [%s]", emailModel.getSubmission().getId())); + LOGGER.debug(format("Sending external email rejecting submission [%s]", emailModel.submission().getId())); sendMessage(this.emailMapperFactory.getRejectEmailMapper().map(emailModel)); } @Override public void sendInternalFailedAV(InternalAvFailedEmailModel emailModel) { - LOGGER.debug(format("Sending internal av failed email rejecting submission [%s]", emailModel.getSubmission().getId())); + LOGGER.debug(format("Sending internal av failed email rejecting submission [%s]", emailModel.submission().getId())); sendMessage(this.emailMapperFactory.getInternalAvFailedEmailMapper().map(emailModel)); } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapper.java b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapper.java index 12caf0e9..0071945b 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapper.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapper.java @@ -36,15 +36,15 @@ public EmailDocument map(ExternalAcceptEmailModel model private ExternalAcceptEmailData fromSubmission(ExternalAcceptEmailModel model) { LocalDateTime submittedAt = model.getSubmission().getSubmittedAt() == null ? model.getSubmission().getCreatedAt() : model.getSubmission().getSubmittedAt(); - return ExternalAcceptEmailData.builder() - .withTo(model.getSubmission().getPresenter().getEmail()) - .withSubject(config.getSubject()) - .withCompanyNumber(model.getSubmission().getCompany().getCompanyNumber()) - .withCompanyName(model.getSubmission().getCompany().getCompanyName()) - .withConfirmationReference(model.getSubmission().getConfirmationReference()) - .withFormType(model.getSubmission().getFormDetails().getFormType()) - .withSubmittedDate(submittedAt.format(DateTimeFormatter.ofPattern(config.getDateFormat()))) - .build(); + return new ExternalAcceptEmailData( + model.getSubmission().getPresenter().getEmail(), + config.getSubject(), + model.getSubmission().getCompany().getCompanyNumber(), + model.getSubmission().getCompany().getCompanyName(), + model.getSubmission().getConfirmationReference(), + model.getSubmission().getFormDetails().getFormType(), + submittedAt.format(DateTimeFormatter.ofPattern(config.getDateFormat())) + ); } } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapper.java b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapper.java index 9b66428c..f0af4076 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapper.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapper.java @@ -14,21 +14,21 @@ @Component public class ExternalRejectEmailMapper { - private ExternalRejectedEmailConfig config; - private IdentifierGeneratable idGenerator; - private TimestampGenerator timestampGenerator; + private final ExternalRejectedEmailConfig config; + private final IdentifierGeneratable idGenerator; + private final TimestampGenerator timestampGenerator; - public ExternalRejectEmailMapper(ExternalRejectedEmailConfig config, IdentifierGeneratable idGenerator, TimestampGenerator timestampGenerator) { + public ExternalRejectEmailMapper(final ExternalRejectedEmailConfig config, final IdentifierGeneratable idGenerator, final TimestampGenerator timestampGenerator) { this.config = config; this.idGenerator = idGenerator; this.timestampGenerator = timestampGenerator; } - public EmailDocument map(ExternalRejectEmailModel model) { + public EmailDocument map(final ExternalRejectEmailModel model) { return EmailDocument.builder() .withTopic(config.getTopic()) .withMessageId(idGenerator.generateId()) - .withRecipientEmailAddress(model.getSubmission().getPresenter().getEmail()) + .withRecipientEmailAddress(model.submission().getPresenter().getEmail()) .withEmailTemplateAppId(config.getAppId()) .withEmailTemplateMessageType(config.getMessageType()) .withData(fromSubmission(model)) @@ -36,17 +36,17 @@ public EmailDocument map(ExternalRejectEmailModel model .format(DateTimeFormatter.ofPattern(config.getDateFormat()))).build(); } - private ExternalRejectEmailData fromSubmission(ExternalRejectEmailModel model) { - return ExternalRejectEmailData.builder() - .withTo(model.getSubmission().getPresenter().getEmail()) - .withSubject(config.getSubject()) - .withCompanyNumber(model.getSubmission().getCompany().getCompanyNumber()) - .withCompanyName(model.getSubmission().getCompany().getCompanyName()) - .withConfirmationReference(model.getSubmission().getConfirmationReference()) - .withFormType(model.getSubmission().getFormDetails().getFormType()) - .withRejectionDate(model.getSubmission().getLastModifiedAt().format(DateTimeFormatter.ofPattern(config.getDateFormat()))) - .withRejectReasons(model.getRejectReasons()) - .withIsPaidForm(!Strings.isNullOrEmpty(model.getSubmission().getFeeOnSubmission())) - .build(); + private ExternalRejectEmailData fromSubmission(final ExternalRejectEmailModel model) { + return new ExternalRejectEmailData( + model.submission().getPresenter().getEmail(), + config.getSubject(), + model.submission().getCompany().getCompanyNumber(), + model.submission().getCompany().getCompanyName(), + model.submission().getConfirmationReference(), + model.submission().getFormDetails().getFormType(), + model.submission().getLastModifiedAt().format(DateTimeFormatter.ofPattern(config.getDateFormat())), + model.rejectReasons(), + !Strings.isNullOrEmpty(model.submission().getFeeOnSubmission()) + ); } } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAvFailedEmailMapper.java b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAvFailedEmailMapper.java index b49dcff8..8ca896a0 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAvFailedEmailMapper.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAvFailedEmailMapper.java @@ -13,10 +13,10 @@ @Component public class InternalAvFailedEmailMapper { - private InternalFailedAvEmailConfig config; - private IdentifierGeneratable idGenerator; - private TimestampGenerator timestampGenerator; - private FormCategoryToEmailAddressService emailAddressService; + private final InternalFailedAvEmailConfig config; + private final IdentifierGeneratable idGenerator; + private final TimestampGenerator timestampGenerator; + private final FormCategoryToEmailAddressService emailAddressService; /** * Constructor. @@ -26,9 +26,9 @@ public class InternalAvFailedEmailMapper { * @param timestampGenerator dependency * @param emailAddressService dependency */ - public InternalAvFailedEmailMapper(InternalFailedAvEmailConfig config, IdentifierGeneratable idGenerator, - TimestampGenerator timestampGenerator, - FormCategoryToEmailAddressService emailAddressService) { + public InternalAvFailedEmailMapper(final InternalFailedAvEmailConfig config, final IdentifierGeneratable idGenerator, + final TimestampGenerator timestampGenerator, + final FormCategoryToEmailAddressService emailAddressService) { this.config = config; this.idGenerator = idGenerator; this.timestampGenerator = timestampGenerator; @@ -41,8 +41,8 @@ public InternalAvFailedEmailMapper(InternalFailedAvEmailConfig config, Identifie * @param model the email model * @return EmailDocument<InternalAvFailedEmailData> */ - public EmailDocument map(InternalAvFailedEmailModel model) { - String emailAddress = emailAddressService.getEmailAddressForFormCategory(model.getSubmission().getFormDetails().getFormType()); + public EmailDocument map(final InternalAvFailedEmailModel model) { + final String emailAddress = emailAddressService.getEmailAddressForFormCategory(model.submission().getFormDetails().getFormType()); return EmailDocument.builder() .withTopic(config.getTopic()) .withMessageId(idGenerator.generateId()) @@ -54,17 +54,17 @@ public EmailDocument map(InternalAvFailedEmailModel m .format(DateTimeFormatter.ofPattern(config.getDateFormat()))).build(); } - private InternalAvFailedEmailData fromSubmission(InternalAvFailedEmailModel model, String emailAddress) { - return InternalAvFailedEmailData.builder() - .withTo(emailAddress) - .withCompanyName(model.getSubmission().getCompany().getCompanyName()) - .withCompanyNumber(model.getSubmission().getCompany().getCompanyNumber()) - .withConfirmationReference(model.getSubmission().getConfirmationReference()) - .withFormType(model.getSubmission().getFormDetails().getFormType()) - .withSubject(config.getSubject()) - .withInfectedFiles(model.getInfectedFiles()) - .withRejectionDate(model.getSubmission().getLastModifiedAt().format(DateTimeFormatter.ofPattern(config.getDateFormat()))) - .withUserEmail(model.getSubmission().getPresenter().getEmail()) - .build(); + private InternalAvFailedEmailData fromSubmission(final InternalAvFailedEmailModel model, final String emailAddress) { + return new InternalAvFailedEmailData( + emailAddress, + model.submission().getCompany().getCompanyNumber(), + model.submission().getCompany().getCompanyName(), + model.submission().getConfirmationReference(), + model.submission().getFormDetails().getFormType(), + model.submission().getPresenter().getEmail(), + model.submission().getLastModifiedAt().format(DateTimeFormatter.ofPattern(config.getDateFormat())), + config.getSubject(), + model.infectedFiles() + ); } } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalAcceptEmailData.java b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalAcceptEmailData.java index b16904e5..f79b4b25 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalAcceptEmailData.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalAcceptEmailData.java @@ -1,160 +1,21 @@ package uk.gov.companieshouse.efs.api.email.model; -import java.util.Objects; - -public class ExternalAcceptEmailData { - - private String to; - private String subject; - private String companyNumber; - private String companyName; - private String confirmationReference; - private String formType; - private String submittedDate; - - public ExternalAcceptEmailData(String to, String subject, String companyNumber, String companyName, String confirmationReference, String formType, String submittedDate) { - this.to = to; - this.subject = subject; - this.companyNumber = companyNumber; - this.companyName = companyName; - this.confirmationReference = confirmationReference; - this.formType = formType; - this.submittedDate = submittedDate; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public String getCompanyNumber() { - return companyNumber; - } - - public void setCompanyNumber(String companyNumber) { - this.companyNumber = companyNumber; - } - - public String getCompanyName() { - return companyName; - } - - public void setCompanyName(String companyName) { - this.companyName = companyName; - } - - public String getConfirmationReference() { - return confirmationReference; - } - - public void setConfirmationReference(String confirmationReference) { - this.confirmationReference = confirmationReference; - } - - public String getFormType() { - return formType; - } - - public void setFormType(String formType) { - this.formType = formType; - } - - public String getSubmittedDate() { - return submittedDate; - } - - public void setSubmittedDate(String submittedDate) { - this.submittedDate = submittedDate; - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final ExternalAcceptEmailData that = (ExternalAcceptEmailData) o; - return Objects.equals(getTo(), that.getTo()) && Objects - .equals(getSubject(), that.getSubject()) && Objects - .equals(getCompanyNumber(), that.getCompanyNumber()) && Objects - .equals(getCompanyName(), that.getCompanyName()) && Objects - .equals(getConfirmationReference(), that.getConfirmationReference()) && Objects - .equals(getFormType(), that.getFormType()) && Objects - .equals(getSubmittedDate(), that.getSubmittedDate()); - } - - @Override - public int hashCode() { - return Objects.hash(getTo(), getSubject(), getCompanyNumber(), getCompanyName(), - getConfirmationReference(), getFormType(), getSubmittedDate()); - } - - public static ExternalAcceptEmailData.Builder builder() { - return new ExternalAcceptEmailData.Builder(); - } - - public static class Builder { - - private String to; - private String subject; - private String companyNumber; - private String companyName; - private String confirmationReference; - private String formType; - private String submittedDate; - - public ExternalAcceptEmailData.Builder withTo(String to) { - this.to = to; - return this; - } - - public ExternalAcceptEmailData.Builder withSubject(String subject) { - this.subject = subject; - return this; - } - - public ExternalAcceptEmailData.Builder withCompanyNumber(String companyNumber) { - this.companyNumber = companyNumber; - return this; - } - - public ExternalAcceptEmailData.Builder withCompanyName(String companyName) { - this.companyName = companyName; - return this; - } - - public ExternalAcceptEmailData.Builder withConfirmationReference(String confirmationReference) { - this.confirmationReference = confirmationReference; - return this; - } - - public ExternalAcceptEmailData.Builder withFormType(String formType) { - this.formType = formType; - return this; - } - - public ExternalAcceptEmailData.Builder withSubmittedDate(String submittedDate) { - this.submittedDate = submittedDate; - return this; - } - - public ExternalAcceptEmailData build() { - return new ExternalAcceptEmailData(to, subject, companyNumber, companyName, confirmationReference, formType, submittedDate); - } - - } - -} +/** + * Represents the external accept email data for notification purposes. + * @param to recipient email address + * @param subject email subject + * @param companyNumber company number + * @param companyName company name + * @param confirmationReference confirmation reference + * @param formType form type + * @param submittedDate date of submission + */ +public record ExternalAcceptEmailData( + String to, + String subject, + String companyNumber, + String companyName, + String confirmationReference, + String formType, + String submittedDate +) {} diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailData.java b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailData.java index 9fa96d45..bc1f7e5d 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailData.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailData.java @@ -1,155 +1,34 @@ package uk.gov.companieshouse.efs.api.email.model; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.Optional; -import java.util.function.Consumer; - -public class ExternalRejectEmailData { - private String to; - private String subject; - private String companyNumber; - private String companyName; - private String confirmationReference; - private String formType; - private String rejectionDate; - private List rejectReasons; - private boolean isPaidForm; - - private ExternalRejectEmailData() { - // no direct instantiation - } - - public String getTo() { - return to; - } - - public String getSubject() { - return subject; - } - - public String getCompanyNumber() { - return companyNumber; - } - - public String getCompanyName() { - return companyName; - } - - public String getConfirmationReference() { - return confirmationReference; - } - - public String getFormType() { - return formType; - } - - public String getRejectionDate() { - return rejectionDate; - } - - public List getRejectReasons() { - return Optional.ofNullable(rejectReasons).map(ArrayList::new).orElse(null); - } - - public boolean isPaidForm() { - return isPaidForm; - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final ExternalRejectEmailData that = (ExternalRejectEmailData) o; - return Objects.equals(getTo(), that.getTo()) && Objects - .equals(getSubject(), that.getSubject()) && Objects - .equals(getCompanyNumber(), that.getCompanyNumber()) && Objects - .equals(getCompanyName(), that.getCompanyName()) && Objects - .equals(getConfirmationReference(), that.getConfirmationReference()) && Objects - .equals(getFormType(), that.getFormType()) && Objects - .equals(getRejectionDate(), that.getRejectionDate()) && Objects - .equals(getRejectReasons(), that.getRejectReasons()) && Objects - .equals(isPaidForm(), that.isPaidForm()); - } - - @Override - public int hashCode() { - return Objects.hash(getTo(), getSubject(), getCompanyNumber(), getCompanyName(), - getConfirmationReference(), getFormType(), getRejectionDate(), getRejectReasons(), - isPaidForm()); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private final List> buildSteps; - - private Builder() { - buildSteps = new ArrayList<>(); - } - - public Builder withTo(String to) { - buildSteps.add(data -> data.to = to); - return this; - } - - public Builder withSubject(String subject) { - buildSteps.add(data -> data.subject = subject); - return this; - } - - public Builder withCompanyNumber(String companyNumber) { - buildSteps.add(data -> data.companyNumber = companyNumber); - return this; - } - - public Builder withCompanyName(String companyName) { - buildSteps.add(data -> data.companyName = companyName); - return this; - } - - public Builder withConfirmationReference(String confirmationReference) { - buildSteps.add(data -> data.confirmationReference = confirmationReference); - return this; - } - - public Builder withFormType(String formType) { - buildSteps.add(data -> data.formType = formType); - return this; - } - - public Builder withRejectionDate(String rejectionDate) { - buildSteps.add(data -> data.rejectionDate = rejectionDate); - return this; - } - - public Builder withRejectReasons(List rejectReasons) { - buildSteps.add(data -> data.rejectReasons = new ArrayList<>(rejectReasons)); - return this; - } - - public Builder withIsPaidForm(boolean isPaidForm) { - buildSteps.add(data -> data.isPaidForm = isPaidForm); - return this; - } - - public ExternalRejectEmailData build() { - final ExternalRejectEmailData data = new ExternalRejectEmailData(); - - buildSteps.forEach(step -> step.accept(data)); - - return data; - } - - } -} - +/** + * Represents the data for an external reject email. + * @param to recipient email address + * @param subject email subject + * @param companyNumber company number + * @param companyName company name + * @param confirmationReference confirmation reference + * @param formType form type + * @param rejectionDate rejection date + * @param rejectReasons immutable list of reject reasons - if none, an empty list is created + * @param isPaidForm whether the form is paid + */ +public record ExternalRejectEmailData( + String to, + String subject, + String companyNumber, + String companyName, + String confirmationReference, + String formType, + String rejectionDate, + List rejectReasons, + boolean isPaidForm +) { + public ExternalRejectEmailData { + rejectReasons = List.copyOf(Objects.requireNonNullElse(rejectReasons, Collections.emptyList())); + } + +} \ No newline at end of file diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailModel.java b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailModel.java index 60876651..3d1d1216 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailModel.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailModel.java @@ -5,38 +5,16 @@ import java.util.Objects; import uk.gov.companieshouse.efs.api.submissions.model.Submission; -public class ExternalRejectEmailModel { - private final Submission submission; - private final List rejectReasons; - - public ExternalRejectEmailModel(Submission submission, List rejectReasons) { - this.submission = submission; - this.rejectReasons = Collections.unmodifiableList(rejectReasons); - } - - public Submission getSubmission() { - return submission; - } - - public List getRejectReasons() { - return rejectReasons; - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final ExternalRejectEmailModel that = (ExternalRejectEmailModel) o; - return Objects.equals(getSubmission(), that.getSubmission()) && Objects - .equals(getRejectReasons(), that.getRejectReasons()); - } - - @Override - public int hashCode() { - return Objects.hash(getSubmission(), getRejectReasons()); +/** + * Represents the external reject email model. + * @param submission the submission associated with the email + * @param rejectReasons immutable list of reject reasons (empty list if no rejectReasons provided) + */ +public record ExternalRejectEmailModel( + Submission submission, + List rejectReasons +) { + public ExternalRejectEmailModel { + rejectReasons = List.copyOf(Objects.requireNonNullElse(rejectReasons, Collections.emptyList())); } } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailData.java b/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailData.java index 459195c3..7bd55d7e 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailData.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailData.java @@ -1,151 +1,34 @@ package uk.gov.companieshouse.efs.api.email.model; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.function.Consumer; -public class InternalAvFailedEmailData { - private String to; - private String companyNumber; - private String companyName; - private String confirmationReference; - private String formType; - private String userEmail; - private String rejectionDate; - private String subject; - private List infectedFiles; - - private InternalAvFailedEmailData() { - // no direct instantiation - } - - public String getTo() { - return to; - } - - public String getCompanyNumber() { - return companyNumber; - } - - public String getCompanyName() { - return companyName; - } - - public String getConfirmationReference() { - return confirmationReference; - } - - public String getFormType() { - return formType; - } - - public String getUserEmail() { - return userEmail; - } - - public String getRejectionDate() { - return rejectionDate; +/** + * Represents the internal AV failed email data for notification purposes. + * @param to recipient email address + * @param companyNumber company number + * @param companyName company name + * @param confirmationReference confirmation reference + * @param formType form type + * @param userEmail user email + * @param rejectionDate rejection date + * @param subject email subject + * @param infectedFiles immutable list of infected files (if no infected files, an empty list) + */ +public record InternalAvFailedEmailData( + String to, + String companyNumber, + String companyName, + String confirmationReference, + String formType, + String userEmail, + String rejectionDate, + String subject, + List infectedFiles +) { + public InternalAvFailedEmailData { + infectedFiles = List.copyOf(Objects.requireNonNullElse(infectedFiles, Collections.emptyList())); } - public String getSubject() { - return subject; - } - - public List getInfectedFiles() { - return infectedFiles; - } - - public static Builder builder() { - return new Builder(); - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final InternalAvFailedEmailData that = (InternalAvFailedEmailData) o; - return Objects.equals(getTo(), that.getTo()) && Objects - .equals(getCompanyNumber(), that.getCompanyNumber()) && Objects - .equals(getCompanyName(), that.getCompanyName()) && Objects - .equals(getConfirmationReference(), that.getConfirmationReference()) && Objects - .equals(getFormType(), that.getFormType()) && Objects - .equals(getUserEmail(), that.getUserEmail()) && Objects - .equals(getRejectionDate(), that.getRejectionDate()) && Objects - .equals(getSubject(), that.getSubject()) && Objects - .equals(getInfectedFiles(), that.getInfectedFiles()); - } - - @Override - public int hashCode() { - return Objects - .hash(getTo(), getCompanyNumber(), getCompanyName(), getConfirmationReference(), - getFormType(), getUserEmail(), getRejectionDate(), getSubject(), - getInfectedFiles()); - } - - public static class Builder { - private final List> buildSteps; - - private Builder() { - buildSteps = new ArrayList<>(); - } - - public InternalAvFailedEmailData.Builder withTo(String to) { - buildSteps.add(data -> data.to = to); - return this; - } - - public InternalAvFailedEmailData.Builder withCompanyNumber(String companyNumber) { - buildSteps.add(data -> data.companyNumber = companyNumber); - return this; - } - - public InternalAvFailedEmailData.Builder withCompanyName(String companyName) { - buildSteps.add(data -> data.companyName = companyName); - return this; - } - - public InternalAvFailedEmailData.Builder withConfirmationReference(String confirmationReference) { - buildSteps.add(data -> data.confirmationReference = confirmationReference); - return this; - } - - public InternalAvFailedEmailData.Builder withFormType(String formType) { - buildSteps.add(data -> data.formType = formType); - return this; - } - - public InternalAvFailedEmailData.Builder withUserEmail(String userEmail) { - buildSteps.add(data -> data.userEmail = userEmail); - return this; - } - - public InternalAvFailedEmailData.Builder withRejectionDate(String rejectionDate) { - buildSteps.add(data -> data.rejectionDate = rejectionDate); - return this; - } - - public InternalAvFailedEmailData.Builder withSubject(String subject) { - buildSteps.add(data -> data.subject = subject); - return this; - } - - public InternalAvFailedEmailData.Builder withInfectedFiles(List infectedFiles) { - buildSteps.add(data -> data.infectedFiles = infectedFiles); - return this; - } - - public InternalAvFailedEmailData build() { - final InternalAvFailedEmailData data = new InternalAvFailedEmailData(); - - buildSteps.forEach(step -> step.accept(data)); - - return data; - } - } } diff --git a/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailModel.java b/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailModel.java index b45e7ddb..470d00ae 100644 --- a/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailModel.java +++ b/src/main/java/uk/gov/companieshouse/efs/api/email/model/InternalAvFailedEmailModel.java @@ -3,40 +3,19 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import uk.gov.companieshouse.efs.api.submissions.model.Submission; - -public class InternalAvFailedEmailModel { - private final Submission submission; - private final List infectedFiles; - - public InternalAvFailedEmailModel(Submission submission, List infectedFiles) { - this.submission = submission; - this.infectedFiles = Collections.unmodifiableList(infectedFiles); - } - - public Submission getSubmission() { - return submission; - } - - public List getInfectedFiles() { - return infectedFiles; - } - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final InternalAvFailedEmailModel that = (InternalAvFailedEmailModel) o; - return Objects.equals(getSubmission(), that.getSubmission()) && Objects - .equals(getInfectedFiles(), that.getInfectedFiles()); - } +import uk.gov.companieshouse.efs.api.submissions.model.Submission; - @Override - public int hashCode() { - return Objects.hash(getSubmission(), getInfectedFiles()); +/** + * Represents an internal AV email failure. + * @param submission the submission associated with the email + * @param infectedFiles immutable list of infected files - if none, an empty list is set + */ +public record InternalAvFailedEmailModel( + Submission submission, + List infectedFiles +) { + public InternalAvFailedEmailModel { + infectedFiles = List.copyOf(Objects.requireNonNullElse(infectedFiles, Collections.emptyList())); } } diff --git a/src/test/java/uk/gov/companieshouse/efs/api/email/EmailServiceImplTest.java b/src/test/java/uk/gov/companieshouse/efs/api/email/EmailServiceImplTest.java index f79e897a..f71d32c1 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/email/EmailServiceImplTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/email/EmailServiceImplTest.java @@ -154,24 +154,24 @@ void testEmailServiceSendsMessageToKafkaApiWhenSubmissionAccepted() throws Email @Test void testEmailServiceSendsMessageToKafkaApiWhenSubmissionRejected() throws EmailServiceException{ //given - ExternalRejectEmailData emailData = ExternalRejectEmailData.builder() - .withTo("unit@test.gov.uk") - .withSubject("My Subject Line") - .withCompanyNumber("CN000123") - .withCompanyName("My Company Name") - .withConfirmationReference("CONREF-001") - .withFormType("Form-Type") - .withRejectionDate(LocalDateTime.now().toString()) - .withRejectReasons(List.of("Not fussed")) - .withIsPaidForm(true) - .build(); + ExternalRejectEmailData emailData = new ExternalRejectEmailData( + "unit@test.gov.uk", + "My Subject Line", + "CN000123", + "My Company Name", + "CONREF-001", + "Form-Type", + LocalDateTime.now().toString(), + List.of("Not fussed"), + true + ); EmailDocument emailDocument = createEmailDocument(emailData); when(emailMapperFactory.getRejectEmailMapper()).thenReturn(rejectEmailMapper); when(rejectEmailMapper.map(externalRejectEmailModel)).thenReturn(emailDocument); when(submission.getId()).thenReturn("abc"); - when(externalRejectEmailModel.getSubmission()).thenReturn(submission); + when(externalRejectEmailModel.submission()).thenReturn(submission); ApiResponse apiResponse = new ApiResponse<>(200, Map.of()); when(emailClient.sendEmail(emailDocument)).thenReturn(apiResponse); @@ -183,7 +183,7 @@ void testEmailServiceSendsMessageToKafkaApiWhenSubmissionRejected() throws Email verify(emailMapperFactory, times(1)).getRejectEmailMapper(); verify(rejectEmailMapper, times(1)).map(externalRejectEmailModel); verify(submission, times(1)).getId(); - verify(externalRejectEmailModel, times(1)).getSubmission(); + verify(externalRejectEmailModel, times(1)).submission(); verify(emailClient).sendEmail(emailDocumentCaptor.capture()); verify(emailClient, times(1)).sendEmail(emailDocument); @@ -199,22 +199,23 @@ void testEmailServiceSendsMessageToKafkaApiWhenSubmissionRejected() throws Email @Test void testEmailServiceSendsMessageToKafkaApiWhenSubmissionHasInfectedFiles() throws EmailServiceException { //given - InternalAvFailedEmailData emailData = InternalAvFailedEmailData.builder() - .withTo("unit@test.gov.uk") - .withSubject("My Subject Line") - .withCompanyNumber("CN000123") - .withCompanyName("My Company Name") - .withConfirmationReference("CONREF-001") - .withFormType("Form-Type") - .withRejectionDate(LocalDateTime.now().toString()) - .withInfectedFiles(List.of("file-1", "file-2")) - .build(); + InternalAvFailedEmailData emailData = new InternalAvFailedEmailData( + "unit@test.gov.uk", + "CN000123", + "My Company Name", + "CONREF-001", + "Form-Type", + "unit-test@ch.gov.uk", + LocalDateTime.now().toString(), + "My Subject Line", + List.of("file-1", "file-2") + ); EmailDocument emailDocument = createEmailDocument(emailData); when(emailMapperFactory.getInternalAvFailedEmailMapper()).thenReturn(internalAVFailedEmailMapper); when(internalAVFailedEmailMapper.map(internalAVFailedEmailModel)).thenReturn(emailDocument); - when(internalAVFailedEmailModel.getSubmission()).thenReturn(submission); + when(internalAVFailedEmailModel.submission()).thenReturn(submission); when(submission.getId()).thenReturn("abc"); ApiResponse apiResponse = new ApiResponse<>(200, Map.of()); @@ -227,7 +228,7 @@ void testEmailServiceSendsMessageToKafkaApiWhenSubmissionHasInfectedFiles() thro verify(emailMapperFactory, times(1)).getInternalAvFailedEmailMapper(); verify(internalAVFailedEmailMapper, times(1)).map(internalAVFailedEmailModel); verify(submission, times(1)).getId(); - verify(internalAVFailedEmailModel, times(1)).getSubmission(); + verify(internalAVFailedEmailModel, times(1)).submission(); verify(emailClient).sendEmail(emailDocumentCaptor.capture()); verify(emailClient, times(1)).sendEmail(emailDocument); @@ -289,7 +290,7 @@ void testEmailServiceThrowsEmailServiceExceptionWhenClientThrowsServiceException // given when(emailMapperFactory.getInternalAvFailedEmailMapper()).thenReturn(internalAVFailedEmailMapper); when(internalAVFailedEmailMapper.map(any())).thenReturn(internalAVFailedEmailDocument); - when(internalAVFailedEmailModel.getSubmission()).thenReturn(submission); + when(internalAVFailedEmailModel.submission()).thenReturn(submission); when(submission.getId()).thenReturn("abc"); doThrow(EmailClientException.class).when(emailClient).sendEmail(any()); @@ -308,7 +309,7 @@ void testEmailServiceThrowsEmailServiceExceptionWhenClientThrowsClientException( // given when(emailMapperFactory.getInternalAvFailedEmailMapper()).thenReturn(internalAVFailedEmailMapper); when(internalAVFailedEmailMapper.map(any())).thenReturn(internalAVFailedEmailDocument); - when(internalAVFailedEmailModel.getSubmission()).thenReturn(submission); + when(internalAVFailedEmailModel.submission()).thenReturn(submission); when(submission.getId()).thenReturn("abc"); ApiResponse apiResponse = new ApiResponse<>(400, Map.of()); @@ -494,7 +495,7 @@ void testEmailServiceSendsMessageToKafkaApiWhenSH19SameDaySubmissionDelayed() th when(delayedSH19SameDaySubmissionSupportEmailMapper.map(delayedSubmissionSupportEmailModel)).thenReturn(emailDocument); ApiResponse apiResponse = new ApiResponse<>(200, Map.of()); - when(emailClient.sendEmail(any(EmailDocument.class))).thenReturn(apiResponse); + when(emailClient.sendEmail(org.mockito.ArgumentMatchers.>any())).thenReturn(apiResponse); // when this.emailService.sendDelayedSH19SubmissionSupportEmail(delayedSubmissionSupportEmailModel, "businessEmail"); diff --git a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapperTest.java b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapperTest.java index 8ac1e18b..3daa7d2e 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapperTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalAcceptEmailMapperTest.java @@ -60,7 +60,7 @@ void setUp() { @Test void mapSubmissionDataToAcceptEmailModel() { //given - LocalDateTime createAtLocalDateTime = LocalDateTime.of(2020, Month.JUNE, 2, 0, 0); + final LocalDateTime createAtLocalDateTime = LocalDateTime.of(2020, Month.JUNE, 2, 0, 0); when(config.getSubject()).thenReturn("EFS Submission accepted"); when(config.getAppId()).thenReturn("efs-submission-api.efs_submission_external_accept"); @@ -79,7 +79,7 @@ void mapSubmissionDataToAcceptEmailModel() { when(config.getDateFormat()).thenReturn("dd MMMM yyyy"); - LocalDateTime localDateTime = LocalDateTime.of(2020, Month.MAY, 2, 0, 0); + final LocalDateTime localDateTime = LocalDateTime.of(2020, Month.MAY, 2, 0, 0); when(submission.getSubmittedAt()).thenReturn(localDateTime); when(submission.getConfirmationReference()).thenReturn("abcd3434343efsfg"); @@ -87,7 +87,7 @@ void mapSubmissionDataToAcceptEmailModel() { when(externalAcceptEmailModel.getSubmission()).thenReturn(submission); //when - EmailDocument actual = acceptEmailMapper.map(externalAcceptEmailModel); + final EmailDocument actual = acceptEmailMapper.map(externalAcceptEmailModel); //then assertEquals(expectedAcceptEmailDocument(), actual); @@ -103,15 +103,16 @@ private EmailDocument expectedAcceptEmailDocument() { .withCreatedAt("02 June 2020") .withTopic("email-send") .withData( - ExternalAcceptEmailData.builder() - .withTo("demo@ch.gov.uk") - .withSubject("EFS Submission accepted") - .withCompanyNumber("12345678") - .withCompanyName("ABC Co Ltd") - .withFormType("SH01") - .withConfirmationReference("abcd3434343efsfg") - .withSubmittedDate("02 May 2020") - .build()) + new ExternalAcceptEmailData( + "demo@ch.gov.uk", + "EFS Submission accepted", + "12345678", + "ABC Co Ltd", + "abcd3434343efsfg", + "SH01", + "02 May 2020" + ) + ) .build(); } diff --git a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapperTest.java b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapperTest.java index c75eb677..ffbabaa4 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapperTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/ExternalRejectEmailMapperTest.java @@ -62,9 +62,9 @@ void setUp() { @ParameterizedTest @ValueSource(booleans = {true, false}) - void mapSubmissionDataToRejectEmailModel(boolean hasFee) { + void mapSubmissionDataToRejectEmailModel(final boolean hasFee) { //given - LocalDateTime createAtLocalDateTime = LocalDateTime.of(2020, Month.JUNE, 2, 0, 0); + final LocalDateTime createAtLocalDateTime = LocalDateTime.of(2020, Month.JUNE, 2, 0, 0); when(config.getSubject()).thenReturn("EFS Submission rejected"); when(config.getAppId()).thenReturn("efs-submission-api.efs_submission_external_reject"); @@ -83,18 +83,18 @@ void mapSubmissionDataToRejectEmailModel(boolean hasFee) { when(config.getDateFormat()).thenReturn("dd MMMM yyyy"); - LocalDateTime localDateTime = LocalDateTime.of(2020, Month.MAY, 2, 0, 0); + final LocalDateTime localDateTime = LocalDateTime.of(2020, Month.MAY, 2, 0, 0); when(submission.getLastModifiedAt()).thenReturn(localDateTime); when(submission.getConfirmationReference()).thenReturn("abcd3434343efsfg"); - when(externalRejectEmailModel.getRejectReasons()).thenReturn(Collections.singletonList("ReasonList")); - when(externalRejectEmailModel.getSubmission()).thenReturn(submission); + when(externalRejectEmailModel.rejectReasons()).thenReturn(Collections.singletonList("ReasonList")); + when(externalRejectEmailModel.submission()).thenReturn(submission); when(submission.getFeeOnSubmission()).thenReturn(hasFee ? "10" : null); //when - EmailDocument actual = rejectEmailMapper.map(externalRejectEmailModel); + final EmailDocument actual = rejectEmailMapper.map(externalRejectEmailModel); //then assertEquals(expectedRejectEmailDocument(hasFee), actual); @@ -111,17 +111,18 @@ private EmailDocument expectedRejectEmailDocument(final .withCreatedAt("02 June 2020") .withTopic("email-send") .withData( - ExternalRejectEmailData.builder() - .withTo("demo@ch.gov.uk") - .withSubject("EFS Submission rejected") - .withCompanyNumber("12345678") - .withCompanyName("ABC Co Ltd") - .withFormType("SH01") - .withConfirmationReference("abcd3434343efsfg") - .withRejectionDate("02 May 2020") - .withRejectReasons(Collections.singletonList("ReasonList")) - .withIsPaidForm(hasFee) - .build()) + new ExternalRejectEmailData( + "demo@ch.gov.uk", + "EFS Submission rejected", + "12345678", + "ABC Co Ltd", + "abcd3434343efsfg", + "SH01", + "02 May 2020", + Collections.singletonList("ReasonList"), + hasFee + ) + ) .build(); } diff --git a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAVFailedEmailMapperTest.java b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAVFailedEmailMapperTest.java index 13507861..7982ed5d 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAVFailedEmailMapperTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/email/mapper/InternalAVFailedEmailMapperTest.java @@ -93,8 +93,8 @@ void mapSubmissionDataToAcceptEmailModel() { when(submission.getConfirmationReference()).thenReturn("abcd3434343efsfg"); when(emailAddressService.getEmailAddressForFormCategory(anyString())).thenReturn("internal_RP_demo@ch.gov.uk"); - when(internalAVFailedEmailModel.getSubmission()).thenReturn(submission); - when(internalAVFailedEmailModel.getInfectedFiles()).thenReturn(Collections.singletonList("infected.pdf")); + when(internalAVFailedEmailModel.submission()).thenReturn(submission); + when(internalAVFailedEmailModel.infectedFiles()).thenReturn(Collections.singletonList("infected.pdf")); //when EmailDocument actual = internalAVFailedEmailMapper.map(internalAVFailedEmailModel); @@ -114,17 +114,18 @@ private EmailDocument expectedInternalAVFailedDocumen .withCreatedAt("02 June 2020") .withTopic("email-send") .withData( - InternalAvFailedEmailData.builder() - .withTo("internal_RP_demo@ch.gov.uk") - .withSubject("EFS Submission AV Failed") - .withCompanyNumber("12345678") - .withCompanyName("ABC Co Ltd") - .withFormType("SH01") - .withConfirmationReference("abcd3434343efsfg") - .withRejectionDate("02 May 2020") - .withInfectedFiles(Collections.singletonList("infected.pdf")) - .withUserEmail("demo@ch.gov.uk") - .build()) + new InternalAvFailedEmailData( + "internal_RP_demo@ch.gov.uk", + "12345678", + "ABC Co Ltd", + "abcd3434343efsfg", + "SH01", + "demo@ch.gov.uk", + "02 May 2020", + "EFS Submission AV Failed", + Collections.singletonList("infected.pdf") + ) + ) .build(); } diff --git a/src/test/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailDataTest.java b/src/test/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailDataTest.java index ec9d6fc7..dbb74559 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailDataTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/email/model/ExternalRejectEmailDataTest.java @@ -22,17 +22,17 @@ class ExternalRejectEmailDataTest { @BeforeEach void setUp() { - final ExternalRejectEmailData.Builder builder = ExternalRejectEmailData.builder(); - - testData = builder.withTo("recipient") - .withSubject("subject") - .withConfirmationReference("reference") - .withCompanyName(COMPANY.getCompanyName()) - .withCompanyNumber(COMPANY.getCompanyNumber()) - .withFormType("form") - .withRejectionDate("2020-02-20") - .withRejectReasons(Arrays.asList("reason1", "reason2")) - .build(); + testData = new ExternalRejectEmailData( + "recipient", + "subject", + COMPANY.getCompanyNumber(), + COMPANY.getCompanyName(), + "reference", + "form", + "2020-02-20", + Arrays.asList("reason1", "reason2"), + false + ); } @Test @@ -42,41 +42,41 @@ void build() { @Test void getTo() { - assertThat(testData.getTo(), is("recipient")); + assertThat(testData.to(), is("recipient")); } @Test void getSubject() { - assertThat(testData.getSubject(), is("subject")); + assertThat(testData.subject(), is("subject")); } @Test void getCompanyNumber() { - assertThat(testData.getCompanyNumber(), is(COMPANY.getCompanyNumber())); + assertThat(testData.companyNumber(), is(COMPANY.getCompanyNumber())); } @Test void getCompanyName() { - assertThat(testData.getCompanyName(), is(COMPANY.getCompanyName())); + assertThat(testData.companyName(), is(COMPANY.getCompanyName())); } @Test void getConfirmationReference() { - assertThat(testData.getConfirmationReference(), is("reference")); + assertThat(testData.confirmationReference(), is("reference")); } @Test void getFormType() { - assertThat(testData.getFormType(), is("form")); + assertThat(testData.formType(), is("form")); } @Test void getRejectionDate() { - assertThat(testData.getRejectionDate(), is("2020-02-20")); + assertThat(testData.rejectionDate(), is("2020-02-20")); } @Test void getRejectReasons() { - assertThat(testData.getRejectReasons(), contains("reason1", "reason2")); + assertThat(testData.rejectReasons(), contains("reason1", "reason2")); } @Test diff --git a/src/test/java/uk/gov/companieshouse/efs/api/fes/service/FesServiceImplTest.java b/src/test/java/uk/gov/companieshouse/efs/api/fes/service/FesServiceImplTest.java index 7b9e103f..a89dca0b 100644 --- a/src/test/java/uk/gov/companieshouse/efs/api/fes/service/FesServiceImplTest.java +++ b/src/test/java/uk/gov/companieshouse/efs/api/fes/service/FesServiceImplTest.java @@ -105,7 +105,7 @@ void testUpdateSubmissionStatusByBarcodeRejectedSuccess(){ verify(repository).readByBarcode(BARCODE); verify(chipsService).getRejectReasons("123"); verify(emailService).sendExternalReject(rejectEmailCaptor.capture()); - Submission expected = rejectEmailCaptor.getValue().getSubmission(); + Submission expected = rejectEmailCaptor.getValue().submission(); assertThat(expected.getStatus(), is(equalTo(SubmissionStatus.REJECTED))); assertThat(expected.getChipsRejectReasons(), contains(new RejectReason("test Reasons"))); verify(submissionService).updateSubmission(expected); @@ -127,7 +127,7 @@ void testUpdateSubmissionStatusByBarcodeRejectedEmailException(){ //then verify(chipsService).getRejectReasons("123"); verify(emailService).sendExternalReject(rejectEmailCaptor.capture()); - Submission expected = rejectEmailCaptor.getValue().getSubmission(); + Submission expected = rejectEmailCaptor.getValue().submission(); assertThat(expected.getStatus(), is(equalTo(SubmissionStatus.REJECTED))); assertThat(expected.getChipsRejectReasons(), contains(new RejectReason("test Reasons"))); verify(submissionService).updateSubmission(expected); @@ -146,7 +146,7 @@ void testUpdateSubmissionStatusByBarcodeRejectedChipsException(){ //then verify(chipsService).getRejectReasons("123"); verify(emailService).sendExternalReject(rejectEmailCaptor.capture()); - Submission expected = rejectEmailCaptor.getValue().getSubmission(); + Submission expected = rejectEmailCaptor.getValue().submission(); assertThat(expected.getStatus(), is(equalTo(SubmissionStatus.REJECTED))); assertThat(expected.getChipsRejectReasons(), is(empty())); verify(submissionService).updateSubmission(expected);