Implemented message forwarding from Relay to RelayAccount
parent
cb63cd3d4e
commit
a1d0af4e1d
16
pom.xml
16
pom.xml
|
@ -9,14 +9,24 @@
|
|||
<version>2.6.3</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<groupId>de.nclazz.service</groupId>
|
||||
<artifactId>mail-relay</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>mail-relay</name>
|
||||
<description>Service for relaying mails from other services or static sites</description>
|
||||
|
||||
<properties>
|
||||
<java.version>11</java.version>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.release>11</maven.compiler.release>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
|
||||
<assertj.version>3.21.0</assertj.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
@ -33,6 +43,12 @@
|
|||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>${assertj.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public class Message {
|
||||
|
||||
private String subject;
|
||||
private String content;
|
||||
private String from;
|
||||
|
||||
private LocalDateTime timestamp;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Service
|
||||
public class Relay {
|
||||
|
||||
private final Set<RelayAccount> accounts = new HashSet<>();
|
||||
|
||||
public void addAccount(@NonNull RelayAccount account) {
|
||||
this.accounts.add(account);
|
||||
}
|
||||
|
||||
public void forwardMessage(String token, Message message) {
|
||||
this.accounts.stream()
|
||||
.filter(account -> account.getToken().equals(token))
|
||||
.findAny()
|
||||
.ifPresent(account -> account.forwardMessage(message));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public class RelayAccount {
|
||||
|
||||
private UUID guid;
|
||||
private String name;
|
||||
private String token;
|
||||
|
||||
private List<String> forwardTo;
|
||||
|
||||
private final List<Message> sentMessages = new ArrayList<>();
|
||||
|
||||
public void forwardMessage(@NonNull Message message) {
|
||||
this.sentMessages.add(message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class ForwardMessageTest {
|
||||
|
||||
@Test
|
||||
void relayForwardsMessageToCorrectAccountByToken() {
|
||||
String token = "my-token";
|
||||
RelayAccount account = new RelayAccount(
|
||||
UUID.randomUUID(),
|
||||
"company-invoices",
|
||||
token,
|
||||
List.of("info@company.com")
|
||||
);
|
||||
|
||||
Relay relay = new Relay();
|
||||
relay.addAccount(account);
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Message message = new Message(
|
||||
"Urgent message",
|
||||
"Please reply",
|
||||
"vip@company.com",
|
||||
now
|
||||
);
|
||||
|
||||
relay.forwardMessage(token, message);
|
||||
assertThat(account.getSentMessages())
|
||||
.hasSize(1)
|
||||
.containsExactly(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
void relayDoesNotForwardMessageForWrongToken() {
|
||||
String token = "my-token";
|
||||
RelayAccount account = new RelayAccount(
|
||||
UUID.randomUUID(),
|
||||
"company-invoices",
|
||||
token,
|
||||
List.of("info@company.com")
|
||||
);
|
||||
|
||||
Relay relay = new Relay();
|
||||
relay.addAccount(account);
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Message message = new Message(
|
||||
"Urgent message",
|
||||
"Please reply",
|
||||
"vip@company.com",
|
||||
now
|
||||
);
|
||||
|
||||
relay.forwardMessage("wrong-token", message);
|
||||
assertThat(account.getSentMessages())
|
||||
.isEmpty();
|
||||
}
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class MailRelayApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class RelayAccountTest {
|
||||
|
||||
@Test
|
||||
void forwardMessageAddsMessageToSentMessages() {
|
||||
RelayAccount account = new RelayAccount(
|
||||
UUID.randomUUID(),
|
||||
"company-invoices",
|
||||
"abcdefg",
|
||||
List.of("info@company.com")
|
||||
);
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
Message message = new Message(
|
||||
"Urgent message",
|
||||
"Please reply",
|
||||
"vip@company.com",
|
||||
now
|
||||
);
|
||||
|
||||
account.forwardMessage(message);
|
||||
assertThat(account.getSentMessages())
|
||||
.hasSize(1)
|
||||
.containsExactly(message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package de.nclazz.service.mailrelay;
|
||||
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class RelayTest {
|
||||
|
||||
@Test
|
||||
void addAccountAddsAccountToRelay() {
|
||||
RelayAccount account = new RelayAccount(
|
||||
UUID.randomUUID(),
|
||||
"relay account name",
|
||||
"may-token",
|
||||
List.of("vip@account.com")
|
||||
);
|
||||
|
||||
Relay relay = new Relay();
|
||||
relay.addAccount(account);
|
||||
|
||||
assertThat(relay.getAccounts())
|
||||
.hasSize(1)
|
||||
.containsExactly(account);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue