Files
reactive-mail-server/backend/src/test/java/com/mailserver/service/SubmissionServiceTest.java
T
Liosha84 29b1beabe0 Почтовый кабинет: регистрация, папки, черновики, вложения, грид @jambotron/aria-grid, интерфейс по synthwave-шаблону
Бэкенд: регистрация со входом сразу и /api/config, профиль и смена пароля, свои папки, PATCH письма
(прочитано, флажок, перенос; Спам ставит отметку), корзина и очистка, черновики, несколько адресатов и копия,
вложения черновика уходят с письмом, вложения и заголовки To/Cc входящих сохраняются, письма заблокированных —
в Спам. Исправлено: загрузка файла (415), колонка content_id (500 на любых вложениях), SPA-маршрут с точкой.
Фронтенд переписан: все таблицы — грид, оформление — шаблон synthwave-design-showcase.html.

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 16:41:29 +01:00

85 lines
3.7 KiB
Java

package com.mailserver.service;
import com.mailserver.domain.Attachment;
import com.mailserver.domain.User;
import com.mailserver.dto.SendRequest;
import jakarta.mail.Message;
import jakarta.mail.Session;
import jakarta.mail.internet.MimeMessage;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.springframework.web.server.ResponseStatusException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Properties;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class SubmissionServiceTest {
@Test
void addressesAreSplitLowercasedAndDeduplicated() {
assertThat(SubmissionService.addresses(" Bob@Mail.test, alice@mail.test;bob@mail.test carol@x.org "))
.containsExactly("bob@mail.test", "alice@mail.test", "carol@x.org");
assertThat(SubmissionService.addresses(null)).isEmpty();
assertThat(SubmissionService.addresses(" ")).isEmpty();
}
@Test
void malformedAddressIsRejected() {
assertThatThrownBy(() -> SubmissionService.addresses("bob@mail.test, not-an-address"))
.isInstanceOf(ResponseStatusException.class)
.hasMessageContaining("not-an-address");
}
@Test
void attachmentsGoIntoTheMessageAndComeBackOutOnDelivery(@TempDir Path dir) throws Exception {
Path file = dir.resolve("report.pdf");
Files.writeString(file, "%PDF-1.4 test");
Attachment attachment = new Attachment();
attachment.setFilename("Отчёт 2026.pdf");
attachment.setContentType("application/pdf");
attachment.setFilePath(file.toString());
User user = new User();
user.setEmail("admin@mail.test");
user.setDisplayName("Admin");
SendRequest request = new SendRequest();
request.setSubject("Report");
request.setBody("See the file");
MimeMessage mime = SubmissionService.mime(user, List.of("bob@mail.test"), List.of("carol@mail.test"), request,
List.of(attachment));
ByteArrayOutputStream raw = new ByteArrayOutputStream();
mime.writeTo(raw);
MimeMessage parsed = new MimeMessage(Session.getInstance(new Properties()), new ByteArrayInputStream(raw.toByteArray()));
assertThat(parsed.getRecipients(Message.RecipientType.CC)[0].toString()).isEqualTo("carol@mail.test");
assertThat(LocalDelivery.addresses(parsed, Message.RecipientType.TO)).isEqualTo("bob@mail.test");
assertThat(LocalDelivery.addresses(parsed, Message.RecipientType.CC)).isEqualTo("carol@mail.test");
assertThat(LocalDelivery.body(parsed).text()).isEqualTo("See the file");
List<LocalDelivery.FilePart> files = LocalDelivery.attachments(parsed);
assertThat(files).hasSize(1);
assertThat(files.get(0).name()).isEqualTo("Отчёт 2026.pdf");
assertThat(files.get(0).contentType()).isEqualTo("application/pdf");
assertThat(new String(files.get(0).bytes(), StandardCharsets.UTF_8)).isEqualTo("%PDF-1.4 test");
}
@Test
void plainMessageHasNoAttachments() throws Exception {
User user = new User();
user.setEmail("admin@mail.test");
SendRequest request = new SendRequest();
request.setBody("Hi");
MimeMessage mime = SubmissionService.mime(user, List.of("bob@mail.test"), List.of(), request, List.of());
assertThat(LocalDelivery.attachments(mime)).isEmpty();
assertThat(LocalDelivery.body(mime).text()).isEqualTo("Hi");
}
}