# TestNG email and OTP testing

MailSlurp fits TestNG when your Java suite drives the UI or API workflow and the MailSlurp Java client handles inbox creation and message retrieval. This is a strong fit for email OTP, magic link, notification, and password reset checks in browser suites.

## Install

Maven:

```xml
<dependency>
  <groupId>com.mailslurp</groupId>
  <artifactId>mailslurp-client-java</artifactId>
  <version>LATEST</version>
  <type>pom</type>
</dependency>
```

Gradle:

```kotlin
dependencies {
    implementation("com.mailslurp:mailslurp-client-java")
}
```

## Create an inbox with the Java SDK

```java
InboxDto inbox = inboxControllerApi.createInboxWithDefaults().execute();
// verify inbox
assertEquals(inbox.getEmailAddress().contains("@mailslurp"), true);
assertNotNull(inbox.getId());
```

## Example TestNG OTP flow

```java
import com.mailslurp.apis.InboxControllerApi;
import com.mailslurp.apis.WaitForControllerApi;
import com.mailslurp.clients.ApiClient;
import com.mailslurp.clients.Configuration;
import com.mailslurp.models.Email;
import com.mailslurp.models.InboxDto;
import org.testng.annotations.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;

public class SignupOtpTest {

    @Test
    public void completesEmailVerification() throws Exception {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        defaultClient.setApiKey(System.getenv("API_KEY"));
        defaultClient.setConnectTimeout(120_000);
        defaultClient.setReadTimeout(120_000);
        defaultClient.setWriteTimeout(120_000);

        InboxControllerApi inboxControllerApi = new InboxControllerApi(defaultClient);
        WaitForControllerApi waitForControllerApi = new WaitForControllerApi(defaultClient);

        InboxDto inbox = inboxControllerApi.createInboxWithDefaults().execute();

        // Submit inbox.getEmailAddress() in the app under test here.

        Email email =
            waitForControllerApi
                .waitForLatestEmail()
                .inboxId(inbox.getId())
                .timeout(120_000L)
                .unreadOnly(true)
                .execute();

        Matcher matcher = Pattern
            .compile("(?:verification code|OTP|code)[:\\\\s-]*(\\\\d{6})")
            .matcher(email.getBody());

        assertTrue(matcher.find());
        assertNotNull(matcher.group(1));
    }
}
```

## Example projects

- [MailSlurp TestNG Selenium example](https://github.com/mailslurp/examples/tree/master/java-testng-selenium)

<div data-component="DocsExamplesList" class="docs-card-grid docs-examples-list" data-example-terms="testng" data-example-count="1">
<a class="docs-card docs-example-card" href="https://www.github.com/mailslurp/examples/tree/master/java-testng-selenium" target="_blank" rel="noopener noreferrer"><span class="docs-card-title">Java Testng Selenium</span><span class="docs-card-description">java example repository: <code>java-testng-selenium</code></span></a>
</div>

## Related docs

- [Java SDK](/docs/java/)
- [Wait for methods](/docs/wait-for/)
- [Integration testing guide](/docs/testing/)
