Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add junit5 extension module #241

Merged
merged 2 commits into from
Mar 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions greenmail-junit5/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version='1.0'?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>== GreenMail Junit5 ==</name>
<description>GreenMail Junit5 module</description>
<url>http://www.icegreen.com/greenmail/</url>

<artifactId>greenmail-junit5</artifactId>
<packaging>jar</packaging>
<version>1.6.0-SNAPSHOT</version>

<parent>
<groupId>com.icegreen</groupId>
<artifactId>greenmail-parent</artifactId>
<version>1.6.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<dependencies>
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.icegreen.greenmail.junit5;

import com.icegreen.greenmail.configuration.GreenMailConfiguration;
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.GreenMailProxy;
import com.icegreen.greenmail.util.ServerSetup;
import com.icegreen.greenmail.util.ServerSetupTest;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.RegisterExtension;

/**
* To use this extension you need to use {@code @RegisterExtension} Junit5 mechanism and made variable {@code static}.<br>
* But if you want to remove {@code static} keyword annotate test class with {@code @TestInstance(TestInstance.Lifecycle.PER_CLASS)}.
*
* @see RegisterExtension
* @see TestInstance
*/
public class GreenMailExtension extends GreenMailProxy implements BeforeEachCallback, AfterEachCallback {
private final ServerSetup[] serverSetups;
private GreenMail greenMail;

/**
* Initialize with single server setups.
*
* @param serverSetup Setup to use
*/
public GreenMailExtension(final ServerSetup serverSetup) {
this.serverSetups = new ServerSetup[]{serverSetup};
}

/**
* Initialize with all server setups.
*/
public GreenMailExtension() {
this(ServerSetupTest.ALL);
}

/**
* Initialize with multiple server setups.
*
* @param serverSetups All setups to use
*/
public GreenMailExtension(final ServerSetup[] serverSetups) {
this.serverSetups = serverSetups;
}

@Override
public void beforeEach(final ExtensionContext context) {
greenMail = new GreenMail(serverSetups);
start();
}

@Override
public void afterEach(final ExtensionContext context) {
stop();
}

@Override
protected GreenMail getGreenMail() {
return greenMail;
}

@Override
public GreenMailExtension withConfiguration(final GreenMailConfiguration config) {
super.withConfiguration(config);
return this;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/**
* Package contains junit5 extension logic.
*/

package com.icegreen.greenmail.junit5;
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.icegreen.greenmail.junit5;

import javax.mail.internet.MimeMessage;

import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetupTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;

@DisplayName("GreenMail with custom ServerSetup tests")
class CustomSetupTests {
@RegisterExtension
static GreenMailExtension greenMail = new GreenMailExtension(ServerSetupTest.SMTP);

@Test
@DisplayName("Send test")
void testSend() {
GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", "some subject", "some body");
final MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
final MimeMessage receivedMessage = receivedMessages[0];
assertEquals("some body", GreenMailUtil.getBody(receivedMessage));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.icegreen.greenmail.junit5;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import com.icegreen.greenmail.util.GreenMailUtil;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("GreenMail with default ServerSetups tests")
class DefaultSetupTests {
@RegisterExtension
GreenMailExtension greenMail = new GreenMailExtension();

@Test
@DisplayName("Send test")
void testSend() throws MessagingException {
GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", "subject", "body");
final MimeMessage[] emails = greenMail.getReceivedMessages();
assertEquals(1, emails.length);
final MimeMessage email = emails[0];
assertEquals("subject", email.getSubject());
assertEquals("body", GreenMailUtil.getBody(email));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.icegreen.greenmail.junit5;

import javax.mail.internet.MimeMessage;

import com.icegreen.greenmail.util.GreenMailUtil;
import com.icegreen.greenmail.util.ServerSetupTest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;

@DisplayName("GreenMail with multiple ServerSetups tests")
class MultipleSetupsTests {
@RegisterExtension
static GreenMailExtension greenMail = new GreenMailExtension(ServerSetupTest.SMTP_IMAP);

@Test
@DisplayName("Receive test")
void testReceive() {
greenMail.setUser("to@localhost.com", "login-id", "password");
GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", "subject", "body");
GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", "subject", "body");
final MimeMessage[] emails = greenMail.getReceivedMessages();
assertEquals(2, emails.length);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.icegreen.greenmail.junit5;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import com.icegreen.greenmail.configuration.GreenMailConfiguration;
import com.icegreen.greenmail.util.GreenMailUtil;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@DisplayName("GreenMail with configuration tests")
class WithConfigurationTests {
@RegisterExtension
GreenMailExtension greenMail = new GreenMailExtension()
.withConfiguration(GreenMailConfiguration.aConfig()
.withUser("to@localhost.com", "login-id", "password"));

@Test
@DisplayName("Receive test")
void testReceive() throws MessagingException {
GreenMailUtil.sendTextEmailTest("to@localhost.com", "from@localhost.com", "subject", "body");
final MimeMessage[] emails = greenMail.getReceivedMessages();
assertEquals(1, emails.length);
final MimeMessage email = emails[0];
assertEquals("subject", email.getSubject());
assertEquals("body", GreenMailUtil.getBody(email));
}
}
34 changes: 34 additions & 0 deletions greenmail-junit5/src/test/java/resources/log4j.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!--
| For more configuration information and examples see the Jakarta Log4j
| website http://jakarta.apache.org/log4j and for the output pattern format
| http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
-->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="test.log"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} (%t) %-5.5p %30.30c{2}| %m%n"/>
</layout>
</appender>

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>

<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-7.7r %-5.5p %25.25c{2}| %m%n"/>
</layout>
</appender>

<root>
<level value="TRACE" />
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>

</log4j:configuration>
19 changes: 19 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
<module>greenmail-webapp</module>
<module>greenmail-jboss-service</module>
<module>greenmail-spring</module>
<module>greenmail-junit5</module>
</modules>

<!-- who the developers are for the project -->
Expand Down Expand Up @@ -335,6 +336,7 @@
<slf4j.version>1.7.21</slf4j.version>
<hamcrest.version>1.3</hamcrest.version>
<spring.version>4.2.6.RELEASE</spring.version>
<junit5.version>5.1.0</junit5.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Allow JaCoCo agent modifications for Surefire -->
Expand Down Expand Up @@ -369,6 +371,11 @@
<artifactId>greenmail-jboss-service</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail-junit5</artifactId>
<version>1.6.0-SNAPSHOT</version>
</dependency>

<!-- Compile scope (=default) -->
<dependency>
Expand Down Expand Up @@ -433,6 +440,18 @@
</dependency>

<!-- Test scope -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down