Skip to content
Snippets Groups Projects
Commit 1a099579 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-582 send mail and listen for sent event

parent 386eca9f
Branches
Tags
No related merge requests found
Showing
with 176 additions and 13 deletions
...@@ -59,6 +59,17 @@ ...@@ -59,6 +59,17 @@
<skip>true</skip> <skip>true</skip>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins> </plugins>
</build> </build>
......
...@@ -22,5 +22,5 @@ public class MailSendRequest { ...@@ -22,5 +22,5 @@ public class MailSendRequest {
@Singular @Singular
private Map<String, InputStreamSource> attachments; private Map<String, InputStreamSource> attachments;
private String requestReference; private Object requestReference;
} }
...@@ -6,7 +6,7 @@ public class MailSentEvent extends ApplicationEvent { ...@@ -6,7 +6,7 @@ public class MailSentEvent extends ApplicationEvent {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public MailSentEvent(MailSendRequest source) { MailSentEvent(MailSendRequest source) {
super(source); super(source);
} }
......
package de.itvsh.ozg.mail;
public class MailSentEventTestFactory {
public static MailSentEvent create(Object reference) {
return new MailSentEvent(MailSendRequestTestFactory.createBuilder().requestReference(reference).build());
}
}
...@@ -115,6 +115,14 @@ ...@@ -115,6 +115,14 @@
</dependency> </dependency>
<!-- Test --> <!-- Test -->
<dependency>
<groupId>de.itvsh.ozg.mail</groupId>
<artifactId>mail-service</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
......
...@@ -6,7 +6,7 @@ import org.springframework.boot.SpringApplication; ...@@ -6,7 +6,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication @SpringBootApplication(scanBasePackages = "de.itvsh.ozg")
@EnableAsync @EnableAsync
public class PlutoServerApplication { public class PlutoServerApplication {
......
package de.itvsh.ozg.pluto.vorgang.redirect;
import java.util.function.Predicate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import de.itvsh.ozg.mail.MailSendRequest;
import de.itvsh.ozg.mail.MailSentEvent;
import de.itvsh.ozg.pluto.command.Command;
import de.itvsh.ozg.pluto.command.Order;
@Component
public class RedirectListener {
public static final Predicate<MailSendRequest> IS_REDIRECT_MAIL_REQ = req -> req.getRequestReference() instanceof Command
&& ((Command) req.getRequestReference()).getOrder() == Order.REDIRECT_VORGANG;
@Autowired
private RedirectService service;
@EventListener(condition = "{T(de.itvsh.ozg.pluto.vorgang.redirect.RedirectListener).IS_REDIRECT_MAIL_REQ.test(event.getSource())}")
public void publishCommandExecutedEvent(MailSentEvent event) {
Command command = (Command) event.getSource().getRequestReference();
service.onRedirectMailSent(command);
}
}
...@@ -8,9 +8,12 @@ import java.util.Map; ...@@ -8,9 +8,12 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import de.itvsh.ozg.mail.MailSendRequest; import de.itvsh.ozg.mail.MailSendRequest;
import de.itvsh.ozg.mail.MailService;
import de.itvsh.ozg.pluto.command.Command;
import de.itvsh.ozg.pluto.common.errorhandling.TechnicalException; import de.itvsh.ozg.pluto.common.errorhandling.TechnicalException;
import de.itvsh.ozg.pluto.vorgang.Vorgang; import de.itvsh.ozg.pluto.vorgang.Vorgang;
import freemarker.template.Configuration; import freemarker.template.Configuration;
...@@ -27,17 +30,28 @@ public class RedirectService { ...@@ -27,17 +30,28 @@ public class RedirectService {
@Autowired @Autowired
private Configuration freemarkerCfg; private Configuration freemarkerCfg;
@Autowired
private MailService emailService;
@Autowired
private ApplicationEventPublisher publisher;
@Value("${pluto.redirect.mail-from}") @Value("${pluto.redirect.mail-from}")
private String mailFrom; private String mailFrom;
MailSendRequest createRedirectMail(Vorgang vorgang, RedirectRequest request) { public void redirectVorgang(Vorgang vorgang, Command command) {
// FIXME set command id var mailRequest = createRedirectMail(vorgang, command);
emailService.sendMail(mailRequest);
}
MailSendRequest createRedirectMail(Vorgang vorgang, Command command) {
// TODO add attachments // TODO add attachments
return MailSendRequest.builder() return MailSendRequest.builder()
.fromAddress(mailFrom) .fromAddress(mailFrom)
.toAddress(request.getEmail()) .toAddress(command.getRedirectRequest().getEmail())
.body(fillMailTemplate(vorgang)) .body(fillMailTemplate(vorgang))
.requestReference(command)
.build(); .build();
} }
...@@ -71,4 +85,7 @@ public class RedirectService { ...@@ -71,4 +85,7 @@ public class RedirectService {
} }
} }
public void onRedirectMailSent(Command command) {
publisher.publishEvent(new VorgangRedirectedEvent(command));
}
} }
package de.itvsh.ozg.pluto.vorgang.redirect;
import de.itvsh.ozg.pluto.command.Command;
import de.itvsh.ozg.pluto.command.CommandExecutedEvent;
public class VorgangRedirectedEvent extends CommandExecutedEvent {
private static final long serialVersionUID = 1L;
VorgangRedirectedEvent(Command source) {
super(source);
}
}
package de.itvsh.ozg.pluto;
import static org.mockito.Mockito.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
@Configuration
public class TestConfiguration {
@Bean
public JavaMailSender mockMailSender() {
return mock(JavaMailSender.class);
}
}
package de.itvsh.ozg.pluto.vorgang.redirect;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import de.itvsh.ozg.mail.MailSentEventTestFactory;
import de.itvsh.ozg.pluto.command.Command;
import de.itvsh.ozg.pluto.command.CommandTestFactory;
class RedirectListenerTest {
@InjectMocks
private RedirectListener listener;
@Mock
private RedirectService redirectService;
@Nested
class onMailSentEvent {
private Command command = CommandTestFactory.create();
@Test
void shouldCallRedirectService() {
listener.publishCommandExecutedEvent(MailSentEventTestFactory.create(command));
redirectService.onRedirectMailSent(command);
}
}
}
...@@ -9,20 +9,29 @@ import java.util.Map; ...@@ -9,20 +9,29 @@ import java.util.Map;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import de.itvsh.ozg.pluto.command.Command;
import de.itvsh.ozg.pluto.command.CommandTestFactory;
import de.itvsh.ozg.pluto.vorgang.EingangHeaderTestFactory; import de.itvsh.ozg.pluto.vorgang.EingangHeaderTestFactory;
import de.itvsh.ozg.pluto.vorgang.Vorgang; import de.itvsh.ozg.pluto.vorgang.Vorgang;
import de.itvsh.ozg.pluto.vorgang.VorgangTestFactory; import de.itvsh.ozg.pluto.vorgang.VorgangTestFactory;
class RedirectServiceTest { class RedirectServiceTest {
@Spy @Spy // NOSONAR
@InjectMocks @InjectMocks
private RedirectService service; private RedirectService service;
@Mock
private ApplicationEventPublisher publisher;
@Nested @Nested
class TestFillingTemplate { class TestFillingTemplate {
...@@ -62,6 +71,7 @@ class RedirectServiceTest { ...@@ -62,6 +71,7 @@ class RedirectServiceTest {
private Vorgang vorgang = VorgangTestFactory.create(); private Vorgang vorgang = VorgangTestFactory.create();
private RedirectRequest request = RedirectRequestTestFactory.create(); private RedirectRequest request = RedirectRequestTestFactory.create();
private Command command = CommandTestFactory.createBuilder().redirectRequest(request).build();;
@BeforeEach @BeforeEach
void initTest() { void initTest() {
...@@ -72,25 +82,42 @@ class RedirectServiceTest { ...@@ -72,25 +82,42 @@ class RedirectServiceTest {
@Test @Test
void shouldSetFromAddress() { void shouldSetFromAddress() {
var mailSendRequest = service.createRedirectMail(vorgang, request); var mailSendRequest = service.createRedirectMail(vorgang, command);
assertThat(mailSendRequest.getFromAddress()).isEqualTo(MAIL_FROM); assertThat(mailSendRequest.getFromAddress()).isEqualTo(MAIL_FROM);
} }
@Test @Test
void shouldSetToAddress() { void shouldSetToAddress() {
var mailSendRequest = service.createRedirectMail(vorgang, request); var mailSendRequest = service.createRedirectMail(vorgang, command);
assertThat(mailSendRequest.getToAddresses()).containsExactly(RedirectRequestTestFactory.E_MAIL); assertThat(mailSendRequest.getToAddresses()).containsExactly(RedirectRequestTestFactory.E_MAIL);
} }
@Test @Test
void shouldSetBody() { void shouldSetBody() {
var mailSendRequest = service.createRedirectMail(vorgang, request); var mailSendRequest = service.createRedirectMail(vorgang, command);
verify(service).fillMailTemplate(vorgang); verify(service).fillMailTemplate(vorgang);
assertThat(mailSendRequest.getBody()).isEqualTo(BODY); assertThat(mailSendRequest.getBody()).isEqualTo(BODY);
} }
} }
@Nested
class TestOnRedirectMailSent {
@Captor // NOSONAR
private ArgumentCaptor<VorgangRedirectedEvent> eventCaptor;
private Command command = CommandTestFactory.create();
@Test
void shouldPublishEvent() {
service.onRedirectMailSent(command);
verify(publisher).publishEvent(eventCaptor.capture());
assertThat(eventCaptor.getValue()).isInstanceOf(VorgangRedirectedEvent.class)
.extracting(VorgangRedirectedEvent::getSource).isSameAs(command);
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment