Skip to content

Commit

Permalink
[DE-117] DE-545 Tests for "Add Coupons to Subscription" (#61)
Browse files Browse the repository at this point in the history
  • Loading branch information
patryk-grudzien-keen authored Dec 13, 2023
1 parent 4863336 commit 618f2c9
Show file tree
Hide file tree
Showing 2 changed files with 179 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
package com.maxio.advancedbilling.controllers.subscriptions;

import com.maxio.advancedbilling.AdvancedBillingClient;
import com.maxio.advancedbilling.TestClient;
import com.maxio.advancedbilling.controllers.SubscriptionsController;
import com.maxio.advancedbilling.exceptions.ApiException;
import com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException;
import com.maxio.advancedbilling.models.AddCouponsRequest;
import com.maxio.advancedbilling.models.Coupon;
import com.maxio.advancedbilling.models.Customer;
import com.maxio.advancedbilling.models.Product;
import com.maxio.advancedbilling.models.ProductFamily;
import com.maxio.advancedbilling.models.Subscription;
import com.maxio.advancedbilling.utils.TestSetup;
import com.maxio.advancedbilling.utils.TestTeardown;
import com.maxio.advancedbilling.utils.assertions.CommonAssertions;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.io.IOException;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;

class SubscriptionsControllerAddCouponsTest {

private static final TestSetup TEST_SETUP = new TestSetup();
private static final AdvancedBillingClient CLIENT = TestClient.createClient();
private static final SubscriptionsController SUBSCRIPTIONS_CONTROLLER = CLIENT.getSubscriptionsController();

private static ProductFamily productFamily;
private static Product product;
private static Customer customer;
private static Subscription subscription;
private static Coupon stackableCoupon;
private static Coupon nonStackableCoupon;

@BeforeAll
static void setUp() throws IOException, ApiException {
productFamily = TEST_SETUP.createProductFamily();
product = TEST_SETUP.createProduct(productFamily);
customer = TEST_SETUP.createCustomer();
subscription = TEST_SETUP.createSubscription(customer, product);
stackableCoupon = TEST_SETUP.createPercentageCoupon(productFamily, "0.5");
nonStackableCoupon = TEST_SETUP.createPercentageCoupon(productFamily, "0.25", "false");
}

@AfterAll
static void teardown() throws IOException, ApiException {
new TestTeardown().deleteCustomer(customer);
}

@Test
void shouldReturn404WhenSubscriptionNotExists() {
// when - then
CommonAssertions.assertNotFound(() -> SUBSCRIPTIONS_CONTROLLER
.applyCouponToSubscription(123, "coupon", null)
);
}

@ParameterizedTest
@MethodSource("argsForShouldReturn422WhenRequestIsIncorrect")
void shouldReturn422WhenRequestIsIncorrect(String code, AddCouponsRequest request,
Consumer<SubscriptionAddCouponErrorException> additionalRequirements) {
// when - then
CommonAssertions.assertUnprocessableEntity(

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[1]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[2]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[3]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[4]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[5]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Check failure on line 72 in tests/src/test/java/com/maxio/advancedbilling/controllers/subscriptions/SubscriptionsControllerAddCouponsTest.java

View workflow job for this annotation

GitHub Actions / Test Report

SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(String, AddCouponsRequest, Consumer)[6]

Expecting actual throwable to be an instance of: com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException but was: com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26) at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65) at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211) ...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
Raw output
java.lang.AssertionError: 

Expecting actual throwable to be an instance of:
  com.maxio.advancedbilling.exceptions.SubscriptionAddCouponErrorException
but was:
  com.maxio.advancedbilling.exceptions.ApiException: HTTP Response Not OK
	at com.maxio.advancedbilling.controllers.BaseController.lambda$static$0(BaseController.java:26)
	at io.apimatic.core.ErrorCase.throwException(ErrorCase.java:65)
	at io.apimatic.core.ResponseHandler.validateResponse(ResponseHandler.java:211)
	...(137 remaining lines not displayed - this can be changed with Assertions.setMaxStackTraceElementsDisplayed)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:63)
	at com.maxio.advancedbilling.utils.assertions.CommonAssertions.assertUnprocessableEntity(CommonAssertions.java:55)
	at com.maxio.advancedbilling.controllers.subscriptions.SubscriptionsControllerAddCouponsTest.shouldReturn422WhenRequestIsIncorrect(SubscriptionsControllerAddCouponsTest.java:72)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
SubscriptionAddCouponErrorException.class,
() -> SUBSCRIPTIONS_CONTROLLER.applyCouponToSubscription(subscription.getId(), code, request),
additionalRequirements
);
}

private static Stream<Arguments> argsForShouldReturn422WhenRequestIsIncorrect() {
return Stream.of(
Arguments.arguments(
null, null,
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).isNull();
assertThat(e.getSubscription()).containsExactly("A valid coupon code is required.");
}
),
Arguments.arguments(
null, new AddCouponsRequest(),
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).isNull();
assertThat(e.getSubscription()).containsExactly("A valid coupon code is required.");
}
),
Arguments.arguments(
null, new AddCouponsRequest(List.of("not-existing-coupon")),
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).containsExactly("Coupon Codes: 'not-existing-coupon' - Coupon code could not be found.");
assertThat(e.getSubscription()).containsExactly("Coupon is invalid.");
}
),
Arguments.arguments(
"code-in-query-param", new AddCouponsRequest(List.of("not-existing-coupon")),
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).isNull();
assertThat(e.getSubscription()).containsExactlyInAnyOrder("Coupon is invalid.", "Only one of 'code' or 'codes' may be set.");
}
),
Arguments.arguments(
"code-in-query-param", null,
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).containsExactly("Coupon Code: 'code-in-query-param' - Coupon code could not be found.");
assertThat(e.getCouponCodes()).isNull();
assertThat(e.getSubscription()).containsExactly("Coupon is invalid.");
}
),
Arguments.arguments(
null, new AddCouponsRequest(List.of(stackableCoupon.getCode(), nonStackableCoupon.getCode())),
(Consumer<SubscriptionAddCouponErrorException>) e -> {
assertThat(e.getCodes()).isNull();
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).containsExactly("Coupon Codes: '%s' - That coupon is not stackable".formatted(nonStackableCoupon.getCode()));
assertThat(e.getSubscription()).containsExactly("Coupon is invalid.");
}
)
);
}

@Test
void shouldReturn422WhenApplyingNonStackableCouponSecondTime() throws IOException, ApiException {
// given
Subscription subscription = TEST_SETUP.createSubscription(customer, product, b -> b.couponCode(nonStackableCoupon.getCode()));

// when - then
CommonAssertions.assertUnprocessableEntity(
SubscriptionAddCouponErrorException.class,
() -> SUBSCRIPTIONS_CONTROLLER.applyCouponToSubscription(subscription.getId(), null, new AddCouponsRequest(List.of(nonStackableCoupon.getCode()))),
e -> {
assertThat(e.getCodes()).containsExactly("Coupon Codes: Subscription already has at least one non-stackable coupon.");
assertThat(e.getCouponCode()).isNull();
assertThat(e.getCouponCodes()).isNull();
assertThat(e.getSubscription()).containsExactly("Coupon is invalid.");
}
);
}

@Test
void shouldAddCouponsToSubscription() throws IOException, ApiException {
// given
Subscription subscription = TEST_SETUP.createSubscription(customer, product);
Coupon percentageCoupon = TEST_SETUP.createPercentageCoupon(productFamily, "0.1");

// when
subscription = SUBSCRIPTIONS_CONTROLLER
.applyCouponToSubscription(subscription.getId(), null,
new AddCouponsRequest(List.of(stackableCoupon.getCode(), percentageCoupon.getCode()))
)
.getSubscription();

// then
assertThat(subscription.getCoupons()).isNull();
assertThat(subscription.getCouponCode()).isEqualTo(stackableCoupon.getCode());
assertThat(subscription.getCouponCodes()).containsExactly(stackableCoupon.getCode(), percentageCoupon.getCode());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,10 @@ public Customer createCustomer() throws IOException, ApiException {
}

public Coupon createPercentageCoupon(ProductFamily productFamily, String percentage) throws IOException, ApiException {
return createPercentageCoupon(productFamily, percentage, "true");
}

public Coupon createPercentageCoupon(ProductFamily productFamily, String percentage, String stackable) throws IOException, ApiException {
return advancedBillingClient.getCouponsController()
.createCoupon(productFamily.getId(), new CreateOrUpdateCoupon.Builder()
.coupon(CreateOrUpdateCouponCoupon.fromCreateOrUpdatePercentageCoupon(
Expand All @@ -178,7 +182,7 @@ public Coupon createPercentageCoupon(ProductFamily productFamily, String percent
.code("PERCENTAGE_DISCOUNT_" + randomNumeric(5))
.description("Huuuuge percentage discount: " + percentage)
.percentage(CreateOrUpdatePercentageCouponPercentage.fromString(percentage))
.stackable("true")
.stackable(stackable)
.build()
))
.build())
Expand Down

0 comments on commit 618f2c9

Please sign in to comment.