diff --git a/src/main/java/com/ning/billing/recurly/RecurlyClient.java b/src/main/java/com/ning/billing/recurly/RecurlyClient.java index 0111fa84..afbedead 100644 --- a/src/main/java/com/ning/billing/recurly/RecurlyClient.java +++ b/src/main/java/com/ning/billing/recurly/RecurlyClient.java @@ -51,6 +51,8 @@ import com.ning.billing.recurly.model.ExternalAccounts; import com.ning.billing.recurly.model.ExternalInvoice; import com.ning.billing.recurly.model.ExternalInvoices; +import com.ning.billing.recurly.model.ExternalPaymentPhase; +import com.ning.billing.recurly.model.ExternalPaymentPhases; import com.ning.billing.recurly.model.GiftCard; import com.ning.billing.recurly.model.GiftCards; import com.ning.billing.recurly.model.Invoice; @@ -1323,6 +1325,45 @@ public ExternalInvoice getExternalInvoice(final String externalInvoiceUuid) { return doGET(ExternalInvoices.EXTERNAL_INVOICES_RESOURCE + "/" + urlEncode(externalInvoiceUuid), ExternalInvoice.class); } + /** + * Get a specific External Payment Phase + *

+ * Returns the requested external payment phase + * + * @param externalPaymentPhaseUuid external payment phase uuid + * @return The requested external payment phase + */ + public ExternalPaymentPhase getExternalPaymentPhase(final String externalPaymentPhaseUuid) { + return doGET(ExternalPaymentPhases.EXTERNAL_PAYMENT_PHASES_RESOURCE + "/" + urlEncode(externalPaymentPhaseUuid), ExternalPaymentPhase.class); + } + + /** + * Get External Payment Phases of an external subscription + *

+ * Returns all External Payment Phases for a given external subscription. + * + * @param externalSubscriptionUUID recurly external subscription uuid + * @return List of External Payment Phases for the given external subscription on success, null otherwise + */ + public ExternalPaymentPhases getExternalPaymentPhasesByExternalSubscription(final String externalSubscriptionUUID) { + return doGET(ExternalSubscriptions.EXTERNAL_SUBSCRIPTIONS_RESOURCE + "/" + urlEncode(externalSubscriptionUUID) + ExternalPaymentPhases.EXTERNAL_PAYMENT_PHASES_RESOURCE, + ExternalPaymentPhases.class); + } + + /** + * Get External Payment Phase of an external subscription + *

+ * Returns an External Payment Phase for a given external subscription. + * + * @param externalSubscriptionUUID recurly external subscription uuid + * @param externalPaymentPhaseUUID recurly external payment phase uuid + * @return An External Payment Phase for the given external subscription on success, null otherwise + */ + public ExternalPaymentPhase getExternalPaymentPhaseByExternalSubscription(final String externalSubscriptionUUID, final String externalPaymentPhaseUUID) { + return doGET(ExternalSubscriptions.EXTERNAL_SUBSCRIPTIONS_RESOURCE + "/" + urlEncode(externalSubscriptionUUID) + ExternalPaymentPhases.EXTERNAL_PAYMENT_PHASES_RESOURCE + "/" + urlEncode(externalPaymentPhaseUUID), + ExternalPaymentPhase.class); + } + /** * Get External Products *

diff --git a/src/main/java/com/ning/billing/recurly/model/ExternalInvoice.java b/src/main/java/com/ning/billing/recurly/model/ExternalInvoice.java index ab113838..ceaaed3d 100644 --- a/src/main/java/com/ning/billing/recurly/model/ExternalInvoice.java +++ b/src/main/java/com/ning/billing/recurly/model/ExternalInvoice.java @@ -33,6 +33,9 @@ public class ExternalInvoice extends RecurlyObject { @XmlElement(name = "external_subscription") private ExternalSubscription externalSubscription; + @XmlElement(name = "external_payment_phase") + private ExternalPaymentPhase externalPaymentPhase; + @XmlElement(name = "external_id") private String externalId; @@ -74,6 +77,14 @@ public void setExternalSubscription(final ExternalSubscription externalSubscript this.externalSubscription = externalSubscription; } + public ExternalPaymentPhase getExternalPaymentPhase() { + return this.externalPaymentPhase; + } + + public void setExternalPaymentPhase(final ExternalPaymentPhase externalPaymentPhase) { + this.externalPaymentPhase = externalPaymentPhase; + } + public String getExternalId() { return this.externalId; } diff --git a/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhase.java b/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhase.java new file mode 100644 index 00000000..84468aa0 --- /dev/null +++ b/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhase.java @@ -0,0 +1,179 @@ +/* + * Copyright 2010-2014 Ning, Inc. + * Copyright 2014-2015 The Billing Project, LLC + * + * The Billing Project licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package com.ning.billing.recurly.model; + +import java.math.BigDecimal; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.joda.time.DateTime; + +@XmlRootElement(name = "external_payment_phase") +public class ExternalPaymentPhase extends RecurlyObject { + + @XmlElement(name = "started_at") + private DateTime startedAt; + + @XmlElement(name = "ends_at") + private DateTime endsAt; + + @XmlElement(name = "starting_billing_period_index") + private int startingBillingPeriodIndex; + + @XmlElement(name = "ending_billing_period_index") + private int endingBillingPeriodIndex; + + @XmlElement(name = "offer_type") + private String offerType; + + @XmlElement(name = "offer_name") + private String offerName; + + @XmlElement(name = "period_count") + private int periodCount; + + @XmlElement(name = "period_length") + private String periodLength; + + @XmlElement(name = "amount") + private BigDecimal amount; + + @XmlElement(name = "currency") + private String currency; + + @XmlElement(name = "created_at") + private DateTime createdAt; + + @XmlElement(name = "updated_at") + private DateTime updatedAt; + + public DateTime getStartedAt() { + return this.startedAt; + } + + public void setStartedAt(final Object startedAt) { + this.startedAt = dateTimeOrNull(startedAt); + } + + public DateTime getEndsAt() { + return this.endsAt; + } + + public void setEndsAt(final Object endsAt) { + this.endsAt = dateTimeOrNull(endsAt); + } + + public int getStartingBillingPeriodIndex() { + return this.startingBillingPeriodIndex; + } + + public void setStartingBillingPeriodIndex(final Object startingBillingPeriodIndex) { + this.startingBillingPeriodIndex = integerOrNull(startingBillingPeriodIndex); + } + + public int getEndingBillingPeriodIndex() { + return this.endingBillingPeriodIndex; + } + + public void setEndingBillingPeriodIndex(final Object endingBillingPeriodIndex) { + this.endingBillingPeriodIndex = integerOrNull(endingBillingPeriodIndex); + } + + public String getOfferType() { + return this.offerType; + } + + public void setOfferType(final Object offerType) { + this.offerType = stringOrNull(offerType); + } + + public String getOfferName() { + return this.offerName; + } + + public void setOfferName(final Object offerName) { + this.offerName = stringOrNull(offerName); + } + + public int getPeriodCount() { + return this.periodCount; + } + + public void setPeriodCount(final Object periodCount) { + this.periodCount = integerOrNull(periodCount); + } + + public String getPeriodLength() { + return this.periodLength; + } + + public void setPeriodLength(final Object periodLength) { + this.periodLength = stringOrNull(periodLength); + } + + public BigDecimal getAmount() { + return this.amount; + } + + public void setAmount(final Object amount) { + this.amount = bigDecimalOrNull(amount); + } + + public String getCurrency() { + return this.currency; + } + + public void setCurrency(final Object currency) { + this.currency = stringOrNull(currency); + } + + public DateTime getCreatedAt() { + return this.createdAt; + } + + public void setCreatedAt(final Object createdAt) { + this.createdAt = dateTimeOrNull(createdAt); + } + + public DateTime getUpdatedAt() { + return this.updatedAt; + } + + public void setUpdatedAt(final Object updatedAt) { + this.updatedAt = dateTimeOrNull(updatedAt); + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("ExternalPaymentPhase{"); + sb.append("started_at=").append(startedAt); + sb.append(", ends_at=").append(endsAt); + sb.append(", starting_billing_period_index=").append(startingBillingPeriodIndex); + sb.append(", ending_billing_period_index=").append(endingBillingPeriodIndex); + sb.append(", offer_type=").append(offerType); + sb.append(", offer_name=").append(offerName); + sb.append(", period_count=").append(periodCount); + sb.append(", period_length=").append(periodLength); + sb.append(", amount=").append(amount); + sb.append(", currency=").append(currency); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhases.java b/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhases.java new file mode 100644 index 00000000..d1c748b3 --- /dev/null +++ b/src/main/java/com/ning/billing/recurly/model/ExternalPaymentPhases.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2014 Ning, Inc. + * Copyright 2014-2015 The Billing Project, LLC + * + * The Billing Project licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package com.ning.billing.recurly.model; + +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonSetter; + +@XmlRootElement(name = "external_payment_phases") +public class ExternalPaymentPhases extends RecurlyObjects { + + @XmlTransient + public static final String EXTERNAL_PAYMENT_PHASES_RESOURCE = "/external_payment_phases"; + + @XmlTransient + public static final String PROPERTY_NAME = "external_payment_phase"; + + @JsonSetter(value = PROPERTY_NAME) + @Override + public void setRecurlyObject(final ExternalPaymentPhase value) { + super.setRecurlyObject(value); + } + + @JsonIgnore + @Override + public ExternalPaymentPhases getStart() { + return getStart(ExternalPaymentPhases.class); + } + + @JsonIgnore + @Override + public ExternalPaymentPhases getNext() { + return getNext(ExternalPaymentPhases.class); + } + +} diff --git a/src/main/java/com/ning/billing/recurly/model/ExternalSubscription.java b/src/main/java/com/ning/billing/recurly/model/ExternalSubscription.java index c3424f97..02823a65 100644 --- a/src/main/java/com/ning/billing/recurly/model/ExternalSubscription.java +++ b/src/main/java/com/ning/billing/recurly/model/ExternalSubscription.java @@ -17,6 +17,7 @@ package com.ning.billing.recurly.model; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import org.joda.time.DateTime; @@ -29,6 +30,16 @@ public class ExternalSubscription extends RecurlyObject { @XmlElement(name = "external_product_reference") private ExternalProductReference externalProductReference; + @XmlElementWrapper(name = "external_invoices") + @XmlElement(name = "external_invoice") + private ExternalInvoices externalInvoices; + + + @XmlElementWrapper(name = "external_payment_phases") + @XmlElement(name = "external_payment_phase") + private ExternalPaymentPhases externalPaymentPhases; + + @XmlElement(name = "last_purchased") private DateTime lastPurchased; @@ -87,6 +98,22 @@ public void setExternalProductReference(final ExternalProductReference externalP this.externalProductReference = externalProductReference; } + public ExternalInvoices getExternalInvoices() { + return this.externalInvoices; + } + + public void setExternalInvoices(final ExternalInvoices externalInvoices) { + this.externalInvoices = externalInvoices; + } + + public ExternalPaymentPhases getExternalPaymentPhases() { + return this.externalPaymentPhases; + } + + public void setExternalPaymentPhases(final ExternalPaymentPhases externalPaymentPhases) { + this.externalPaymentPhases = externalPaymentPhases; + } + public DateTime getLastPurchased() { return lastPurchased; } diff --git a/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhase.java b/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhase.java new file mode 100644 index 00000000..adaf46b5 --- /dev/null +++ b/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhase.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010-2014 Ning, Inc. + * Copyright 2014-2015 The Billing Project, LLC + * + * The Billing Project licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + + package com.ning.billing.recurly.model; + + import java.math.BigDecimal; + + import org.joda.time.DateTime; + import org.testng.Assert; + import org.testng.annotations.Test; + + public class TestExternalPaymentPhase extends TestModelBase { + + @Test(groups = "fast") + public void testDeserialization() throws Exception { + final String externalPaymentPhaseData = + "\n" + + "" + + " twqswp627ri3" + + " 2023-11-15T00:00:00Z" + + " 2023-11-17T21:27:10Z" + + " 1" + + " 2" + + " FREE_TRIAL" + + " introductory" + + " 2" + + " TWO WEEKS" + + " 1.99" + + " USD" + + " 2022-09-12T18:40:51Z" + + " 2022-09-12T18:40:51Z" + + ""; + + final ExternalPaymentPhase externalPaymentPhase = xmlMapper.readValue(externalPaymentPhaseData, ExternalPaymentPhase.class); + + Assert.assertEquals(externalPaymentPhase.getHref(), "https://your-subdomain.recurly.com/v2/external_invoices/twqswp627ri3"); + Assert.assertEquals(externalPaymentPhase.getStartedAt(), new DateTime("2023-11-15T00:00:00Z")); + Assert.assertEquals(externalPaymentPhase.getEndsAt(), new DateTime("2023-11-17T21:27:10Z")); + Assert.assertEquals(externalPaymentPhase.getStartingBillingPeriodIndex(), 1); + Assert.assertEquals(externalPaymentPhase.getEndingBillingPeriodIndex(), 2); + Assert.assertEquals(externalPaymentPhase.getOfferType(), "FREE_TRIAL"); + Assert.assertEquals(externalPaymentPhase.getOfferName(), "introductory"); + Assert.assertEquals(externalPaymentPhase.getPeriodCount(), 2); + Assert.assertEquals(externalPaymentPhase.getPeriodLength(), "TWO WEEKS"); + Assert.assertEquals(externalPaymentPhase.getAmount(), new BigDecimal("1.99")); + Assert.assertEquals(externalPaymentPhase.getCurrency(), "USD"); + Assert.assertEquals(externalPaymentPhase.getCreatedAt(), new DateTime("2022-09-12T18:40:51Z")); + Assert.assertEquals(externalPaymentPhase.getUpdatedAt(), new DateTime("2022-09-12T18:40:51Z")); + } + } + \ No newline at end of file diff --git a/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhases.java b/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhases.java new file mode 100644 index 00000000..2cc35b87 --- /dev/null +++ b/src/test/java/com/ning/billing/recurly/model/TestExternalPaymentPhases.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010-2014 Ning, Inc. + * Copyright 2014-2015 The Billing Project, LLC + * + * The Billing Project licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + + package com.ning.billing.recurly.model; + + import java.math.BigDecimal; + + import org.joda.time.DateTime; + import org.testng.Assert; + import org.testng.annotations.Test; + + public class TestExternalPaymentPhases extends TestModelBase { + + @Test(groups = "fast") + public void testDeserialization() throws Exception { + final String externalPaymentPhasesData = + "\n" + + "" + + " " + + " twqswp627ri3" + + " 2023-11-15T00:00:00Z" + + " 2023-11-17T21:27:10Z" + + " 1" + + " 2" + + " FREE_TRIAL" + + " introductory" + + " 2" + + " TWO WEEKS" + + " 1.99" + + " USD" + + " 2022-09-12T18:40:51Z" + + " 2022-09-12T18:40:51Z" + + " " + + ""; + + + final ExternalPaymentPhases externalPaymentPhases = xmlMapper.readValue(externalPaymentPhasesData, ExternalPaymentPhases.class); + Assert.assertEquals(externalPaymentPhases.size(), 1); + + final ExternalPaymentPhase externalPaymentPhase = externalPaymentPhases.get(0); + + Assert.assertEquals(externalPaymentPhase.getHref(), "https://your-subdomain.recurly.com/v2/external_invoices/twqswp627ri3"); + Assert.assertEquals(externalPaymentPhase.getStartedAt(), new DateTime("2023-11-15T00:00:00Z")); + Assert.assertEquals(externalPaymentPhase.getEndsAt(), new DateTime("2023-11-17T21:27:10Z")); + Assert.assertEquals(externalPaymentPhase.getStartingBillingPeriodIndex(), 1); + Assert.assertEquals(externalPaymentPhase.getEndingBillingPeriodIndex(), 2); + Assert.assertEquals(externalPaymentPhase.getOfferType(), "FREE_TRIAL"); + Assert.assertEquals(externalPaymentPhase.getOfferName(), "introductory"); + Assert.assertEquals(externalPaymentPhase.getPeriodCount(), 2); + Assert.assertEquals(externalPaymentPhase.getPeriodLength(), "TWO WEEKS"); + Assert.assertEquals(externalPaymentPhase.getAmount(), new BigDecimal("1.99")); + Assert.assertEquals(externalPaymentPhase.getCurrency(), "USD"); + Assert.assertEquals(externalPaymentPhase.getCreatedAt(), new DateTime("2022-09-12T18:40:51Z")); + Assert.assertEquals(externalPaymentPhase.getUpdatedAt(), new DateTime("2022-09-12T18:40:51Z")); + } + } + \ No newline at end of file