Implemented message forwarding from Relay to RelayAccount

pull/21/head
Niclas Thobaben 2022-02-14 13:49:59 +01:00
parent cb63cd3d4e
commit a1d0af4e1d
8 changed files with 220 additions and 13 deletions

16
pom.xml
View File

@ -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>

View File

@ -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;
}

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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() {
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}