diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java index edfc0507..5e7deb81 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java @@ -138,7 +138,7 @@ public class Account extends AcmeJsonResource { * @return {@link OrderBuilder} object */ public OrderBuilder newOrder() { - return new OrderBuilder(getLogin()); + return getLogin().newOrder(); } /** diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Login.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Login.java index d0acdb96..fe79768a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Login.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Login.java @@ -189,6 +189,16 @@ public class Login { return challenge; } + /** + * Creates a builder for a new {@link Order}. + * + * @return {@link OrderBuilder} object + * @since 3.0.0 + */ + public OrderBuilder newOrder() { + return new OrderBuilder(this); + } + /** * Sets a different {@link KeyPair}. The new key pair is only used locally in this * instance, but is not set on server side! diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java index eed445c3..b9cd6cff 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java @@ -33,7 +33,8 @@ import org.slf4j.LoggerFactory; /** * Start a new certificate {@link Order}. *

- * Use {@link Account#newOrder()} to create a new {@link OrderBuilder} instance. + * Use {@link Login#newOrder()} or {@link Account#newOrder()} to create a new + * {@link OrderBuilder} instance. Both methods are identical. */ public class OrderBuilder { private static final Logger LOG = LoggerFactory.getLogger(OrderBuilder.class); diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java index 76f9157c..ce1f6bad 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java @@ -389,6 +389,20 @@ public class AccountTest { provider.close(); } + /** + * Test that a new order can be created. + */ + @Test + public void testNewOrder() throws AcmeException, IOException { + var provider = new TestableConnectionProvider(); + var login = provider.createLogin(); + + var account = new Account(login); + assertThat(account.newOrder()).isNotNull(); + + provider.close(); + } + /** * Test that an account can be modified. */ diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/LoginTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/LoginTest.java index 43cd29f8..c005cf16 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/LoginTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/LoginTest.java @@ -28,6 +28,7 @@ import org.mockito.ArgumentMatchers; import org.shredzone.acme4j.challenge.Challenge; import org.shredzone.acme4j.challenge.Dns01Challenge; import org.shredzone.acme4j.challenge.Http01Challenge; +import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.exception.AcmeProtocolException; import org.shredzone.acme4j.provider.AcmeProvider; import org.shredzone.acme4j.provider.TestableConnectionProvider; @@ -182,4 +183,17 @@ public class LoginTest { " requested class class org.shredzone.acme4j.challenge.Dns01Challenge"); } + /** + * Test that a new order can be created. + */ + @Test + public void testNewOrder() throws AcmeException, IOException { + var provider = new TestableConnectionProvider(); + var login = provider.createLogin(); + + assertThat(login.newOrder()).isNotNull(); + + provider.close(); + } + }