Mam test do wysylki meili przez greenMailBean.
Przechodzi on na zielono. Jednak jezeli buduje mvn projekt z jakiego inicjalizowane jest polaczenie z portem, a port jest zajety:
Exception in thread "smtp:localhost:3124" java.lang.IllegalStateException: Can not open server socket for smtp:localhost:3124
at com.icegreen.greenmail.server.AbstractServer.initServerSocket(AbstractServer.java:123)
at com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:94)
Caused by: java.net.BindException: Address already in use: bind
Wszystko co sie dzieje w tym tescie, jest ustawiane w beanie:
Jednak jak bym nie ustawil tych propertisow port jest zajety i port z st rozni sie od tego ustawionego greenMailBean.setPortOffset(3144); vs 3124
@Configuration
public class GreenmailConfig {
@Bean
public GreenMailBean greenmailBean() {
final var greenMailBean = new GreenMailBean();
greenMailBean.setSmtpProtocol(true);
greenMailBean.setPortOffset(3144);
greenMailBean.setHostname("localhost");
greenMailBean.setAutostart(true);
greenMailBean.setPop3Protocol(false);
greenMailBean.setSmtpProtocol(false);
greenMailBean.setServerStartupTimeout(10000);
return greenMailBean;
}
@TestNoDatabase
@ExtendWith(MockitoExtension.class)
class SpringSmtpServiceTest {
@Autowired private GreenMailBean greenMailBean;
@Test
void shouldSendEmail_givenValidData() throws MessagingException, IOException {
// arrange
var sender = "sender";
var recipient = "recipient";
var content = "content";
var subject = "subject";
// act
greenMailBean.sendEmail(recipient, sender, subject, content);
// assert
final MimeMessage email = greenMailBean.getReceivedMessages()[0];
assertThat(email.getHeader("From", null)).isEqualTo(sender);
assertThat(email.getHeader("To", null)).isEqualTo(recipient);
assertThat(email.getHeader("Subject", null)).isEqualTo("subject");
assertThat((String) email.getContent()).startsWith(content);
}