Skip to content

Commit

Permalink
fixed callback factory lacking context (Mail reference)
Browse files Browse the repository at this point in the history
  • Loading branch information
sargue committed May 31, 2018
1 parent e9cf88f commit b4c8bee
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 58 deletions.
12 changes: 0 additions & 12 deletions src/main/java/net/sargue/mailgun/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -260,18 +260,6 @@ public MailRequestCallbackFactory mailRequestCallbackFactory() {
return mailRequestCallbackFactory;
}

/**
* Convenience method to call {@link MailRequestCallbackFactory#create()}
* on the configured factory.
*
* @return a new {@link MailRequestCallback} using the configured factory
* or null if there is no factory configured
*/
public MailRequestCallback createMailRequestCallback() {
return mailRequestCallbackFactory == null ? null :
mailRequestCallbackFactory.create();
}

/**
* Registers a converter.
*
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/net/sargue/mailgun/Mail.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,20 @@ public void failed(Throwable throwable) {
* {@link #sendAsync(MailRequestCallback)} instead.
*/
public void sendAsync() {
MailRequestCallback callback = configuration.createMailRequestCallback();
if (callback == null) {
MailRequestCallbackFactory factory = configuration.mailRequestCallbackFactory();
if (factory == null) {
prepareSend();
request().async().post(entity());
} else
sendAsync(callback);
sendAsync(factory.create(this));
}

Configuration configuration() {
/**
* Retrieves the configuration associated with this Mail.
*
* @return the underlying configuration
*/
public Configuration configuration() {
return configuration;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ public interface MailRequestCallbackFactory {
/**
* Returns a {@link MailRequestCallback}. Could be new or the same.
*
* @param mail the mail object where we will be using the callback
* @return a MailRequestCallback
*/
MailRequestCallback create();
MailRequestCallback create(Mail mail);
}
21 changes: 14 additions & 7 deletions src/test/java/net/sargue/mailgun/test/BasicTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,9 @@ public void sendAsyncDefaultCallback() {
stubFor(expectedBasicPost().willReturn(aResponse().withStatus(200)));
final AtomicBoolean callbackCalled = new AtomicBoolean(false);

final String to = "doc@delorean.com";
final String subject = "This is a plain text test";
final String textBody = "Hello world!";
final MailRequestCallback callback = new MailRequestCallback() {
@Override
public void completed(Response response) {
Expand All @@ -408,9 +411,9 @@ public void completed(Response response) {
response.responseType());

verifyMessageSent(
param("to", "doc@delorean.com"),
param("subject", "This is a plain text test"),
param("text", "Hello world!")
param("to", to),
param("subject", subject),
param("text", textBody)
);
}

Expand All @@ -422,15 +425,19 @@ public void failed(Throwable throwable) {

configuration.registerMailRequestCallbackFactory(new MailRequestCallbackFactory() {
@Override
public MailRequestCallback create() {
public MailRequestCallback create(Mail mail) {
assertEquals(mail.getFirstValue("to"), to);
assertEquals(mail.getFirstValue("subject"), subject);
assertEquals(mail.getFirstValue("text"), textBody);

return callback;
}
});

MailBuilder.using(configuration)
.to("doc@delorean.com")
.subject("This is a plain text test")
.text("Hello world!")
.to(to)
.subject(subject)
.text(textBody)
.build()
.sendAsync();

Expand Down
39 changes: 5 additions & 34 deletions src/test/java/net/sargue/mailgun/test/ConfigurationTests.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package net.sargue.mailgun.test;

import com.google.common.collect.Lists;
import net.sargue.mailgun.Configuration;
import net.sargue.mailgun.MailRequestCallback;
import net.sargue.mailgun.MailRequestCallbackFactory;
import net.sargue.mailgun.Response;
import net.sargue.mailgun.*;
import org.junit.Test;

import java.util.Collections;
Expand Down Expand Up @@ -93,7 +90,6 @@ public void testNoCallbackConfigured() {
Configuration configuration = new Configuration();

assertNull(configuration.mailRequestCallbackFactory());
assertNull(configuration.createMailRequestCallback());
}

@Test
Expand All @@ -108,7 +104,7 @@ public void failed(Throwable throwable) { /*no op*/ }

MailRequestCallbackFactory factory = new MailRequestCallbackFactory() {
@Override
public MailRequestCallback create() {
public MailRequestCallback create(Mail mail) {
return mailRequestCallback;
}
};
Expand All @@ -117,41 +113,16 @@ public MailRequestCallback create() {
.registerMailRequestCallbackFactory(factory);

assertSame(factory, configuration.mailRequestCallbackFactory());
assertSame(mailRequestCallback, configuration.createMailRequestCallback());
assertSame(configuration.createMailRequestCallback(),
configuration.createMailRequestCallback());
}

@Test
public void testCallbackFactory() {
class MyCallback implements MailRequestCallback {
@Override
public void completed(Response response) { /*no op*/ }

@Override
public void failed(Throwable throwable) { /*no op*/ }
}

Configuration configuration = new Configuration()
.registerMailRequestCallbackFactory(new MailRequestCallbackFactory() {
@Override
public MailRequestCallback create() {
return new MyCallback();
}
});

assertNotSame(configuration.createMailRequestCallback(),
configuration.createMailRequestCallback());
assertEquals(MyCallback.class,
configuration.createMailRequestCallback().getClass());
assertSame(mailRequestCallback,
configuration.mailRequestCallbackFactory().create(null));
}

@Test
public void testCallbackUnregister() {
Configuration configuration = new Configuration()
.registerMailRequestCallbackFactory(new MailRequestCallbackFactory() {
@Override
public MailRequestCallback create() {
public MailRequestCallback create(Mail mail) {
return null;
}
})
Expand Down

0 comments on commit b4c8bee

Please sign in to comment.