Skip to content

Commit

Permalink
adding coupon methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Danillo Souza committed Jul 5, 2015
1 parent 68e40bc commit b1608ff
Show file tree
Hide file tree
Showing 16 changed files with 326 additions and 27 deletions.
41 changes: 41 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,47 @@ Retring an invoice:
Invoice invoice = assinaturas.invoices().retry(INVOICE_ID);
```

=====================
### Coupons

Creating coupon:

```java
toBeCreated.withCode("COUPON_CODE")
.withName("COUPON_NAME")
.withDescription("COUPON_DESCRIPTION")
.withDiscount(new Discount()
.withValue(1000)
.withType(DiscountType.PERCENT))
.withStatus(CouponStatus.ACTIVE)
.withDuration(new Duration()
.withType(DurationType.REPEATING)
.withOccurrences(1))
.withExpirationDate(new ExpirationDate()
.withDay(10)
.withMonth(Month.OCTOBER)
.withYear(2020))
.withMaxRedemptions(1000);
```

Then call:

```java
Coupon coupon = assinaturas.coupons().create(toBeCreated);
```

To activate a coupon:

```java
Coupon coupon = assinaturas.coupons().inactivate(couponCode);
```

To inactive a coupon:

```java
Coupon coupon = assinaturas.coupons().inactivate(couponCode);
```

====================
### Thanks

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ apply plugin: 'signing'
sourceCompatibility = 1.7
group = "com.github.paniko0"
archivesBaseName = "jassinaturas"
version = '1.0.0'
version = '1.1.0'

repositories {
mavenCentral()
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/sdk/jassinaturas/clients/CouponClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,12 @@ public Coupon show(final String code) {
public Coupon create(final Coupon toBeCreated) {
return couponCommunicator.create(toBeCreated);
}

public Coupon activate(final String code) {
return couponCommunicator.activate(code);
}

public Coupon inactivate(final String code) {
return couponCommunicator.inactivate(code);
}
}
49 changes: 29 additions & 20 deletions src/main/java/sdk/jassinaturas/clients/attributes/Coupon.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ public class Coupon {
private String name;
private String description;
private Discount discount;
private String status;
private CouponStatus status;
private Duration duration;
private int max_redemptions;
private ExpirationDate expiration_date;
private CreationDate creation_date;
private Integer maxRedemptions;
private ExpirationDate expirationDate;
private CreationDate creationDate;
private Boolean inUse;

public String getCode() {
return code;
Expand Down Expand Up @@ -47,11 +48,11 @@ public Coupon withDiscount(Discount discount) {
return this;
}

public String getStatus() {
public CouponStatus getStatus() {
return status;
}

public Coupon withStatus(String status) {
public Coupon withStatus(CouponStatus status) {
this.status = status;
return this;
}
Expand All @@ -65,33 +66,41 @@ public Coupon withDuration(Duration duration) {
return this;
}

public int getMax_redemptions() {
return max_redemptions;
public Integer getMaxRedemptions() {
return maxRedemptions;
}

public Coupon withMax_redemptions(int max_redemptions) {
this.max_redemptions = max_redemptions;
public Coupon withMaxRedemptions(Integer max_redemptions) {
this.maxRedemptions = max_redemptions;
return this;
}

public ExpirationDate getExpiration_date() {
return expiration_date;
public ExpirationDate getExpirationDate() {
return expirationDate;
}

public Coupon withExpiration_date(ExpirationDate expiration_date) {
this.expiration_date = expiration_date;
public Coupon withExpirationDate(ExpirationDate expiration_date) {
this.expirationDate = expiration_date;
return this;
}

public CreationDate getCreation_date() {
return creation_date;
public CreationDate getCreationDate() {
return creationDate;
}

public Coupon withCreation_date(CreationDate creation_date) {
this.creation_date = creation_date;
this.creationDate = creation_date;
return this;
}

public boolean inUse() {
if (inUse != null) {
return inUse;
}

return false;
}

@Override
public String toString() {
return "Coupon{" +
Expand All @@ -101,9 +110,9 @@ public String toString() {
", discount=" + discount +
", status='" + status + '\'' +
", duration=" + duration +
", max_redemptions=" + max_redemptions +
", expiration_date=" + expiration_date +
", creation_date=" + creation_date +
", maxRedemptions=" + maxRedemptions +
", expirationDate=" + expirationDate +
", creationDate=" + creationDate +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package sdk.jassinaturas.clients.attributes;

public enum CouponStatus {
ACTIVE, INACTIVE
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package sdk.jassinaturas.clients.attributes;

public class Discount {
private String type;
private DiscountType type;
private int value;

public String getType() {
public DiscountType getType() {
return type;
}

public Discount withType(String type) {
public Discount withType(DiscountType type) {
this.type = type;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package sdk.jassinaturas.clients.attributes;

public enum DiscountType {
PERCENT, AMOUNT
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package sdk.jassinaturas.clients.attributes;

public class Duration {
private String type;
private DurationType type;
private int occurrences;

public String getType() {
public DurationType getType() {
return type;
}

public int getOccurrences() {
return occurrences;
}

public Duration withType(String type) {
public Duration withType(DurationType type) {
this.type = type;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package sdk.jassinaturas.clients.attributes;

public enum DurationType {
REPEATING, ONCE, FOREVER
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@ public interface CouponCommunicator {

@RequestLine("POST /coupons")
Coupon create(Coupon coupon);

@RequestLine("PUT /coupons/{code}/active")
Coupon activate(@Named("code") String code);

@RequestLine("PUT /coupons/{code}/inactive")
Coupon inactivate(@Named("code") String code);
}
91 changes: 91 additions & 0 deletions src/test/java/sdk/jassinaturas/clients/CouponClientTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package sdk.jassinaturas.clients;

import co.freeside.betamax.Betamax;
import co.freeside.betamax.MatchRule;
import co.freeside.betamax.Recorder;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import sdk.jassinaturas.Assinaturas;
import sdk.jassinaturas.clients.attributes.Authentication;
import sdk.jassinaturas.clients.attributes.Coupon;
import sdk.jassinaturas.clients.attributes.CouponStatus;
import sdk.jassinaturas.clients.attributes.Discount;
import sdk.jassinaturas.clients.attributes.DiscountType;
import sdk.jassinaturas.clients.attributes.Duration;
import sdk.jassinaturas.clients.attributes.DurationType;
import sdk.jassinaturas.clients.attributes.ExpirationDate;
import sdk.jassinaturas.clients.attributes.Month;
import sdk.jassinaturas.communicators.SandboxCommunicator;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

public class CouponClientTest {

private final Assinaturas assinaturas = new Assinaturas(new Authentication("SGPA0K0R7O0IVLRPOVLJDKAWYBO1DZF3",
"QUJESGM9JU175OGXRFRJIYM0SIFOMIFUYCBWH9WA"), new SandboxCommunicator());

@Rule
public Recorder recorder = new Recorder();

@Betamax(tape = "ACTIVATE_COUPON", match = { MatchRule.method, MatchRule.uri })
@Test
public void shouldActivateCoupon() throws Exception {
Coupon coupon = assinaturas.coupons().activate("jassinaturas_coupon_01");

assertEquals(CouponStatus.ACTIVE, coupon.getStatus());
}

@Betamax(tape = "INACTIVATE_COUPON", match = { MatchRule.method, MatchRule.uri })
@Test
public void shouldInactivateCoupon() throws Exception {
Coupon coupon = assinaturas.coupons().activate("jassinaturas_coupon_01");

assertEquals(CouponStatus.INACTIVE, coupon.getStatus());
}

@Betamax(tape = "CREATE_COUPON", match = { MatchRule.body, MatchRule.method, MatchRule.uri })
@Test
public void createCoupon() {
Coupon toBeCreated = new Coupon();

toBeCreated.withCode("jassinaturas_coupon_01")
.withName("JAssinaturas")
.withDescription("Coupon for test control")
.withDiscount(new Discount()
.withValue(1000)
.withType(DiscountType.PERCENT))
.withStatus(CouponStatus.ACTIVE)
.withDuration(new Duration()
.withType(DurationType.REPEATING)
.withOccurrences(1))
.withExpirationDate(new ExpirationDate()
.withDay(10)
.withMonth(Month.OCTOBER)
.withYear(2020))
.withMaxRedemptions(1000);

Coupon coupon = assinaturas.coupons().create(toBeCreated);

assertEquals("jassinaturas_coupon_01", coupon.getCode());
assertEquals("JAssinaturas", coupon.getName());
assertEquals("Coupon for test control", coupon.getDescription());
assertEquals(1000, coupon.getDiscount().getValue());
assertEquals(DiscountType.PERCENT, coupon.getDiscount().getType());
assertEquals(CouponStatus.ACTIVE, coupon.getStatus());
assertEquals(DurationType.REPEATING, coupon.getDuration().getType());
assertEquals(1, coupon.getDuration().getOccurrences());
assertEquals(10, coupon.getExpirationDate().getDay());
assertEquals(Month.OCTOBER, coupon.getExpirationDate().getMonth());
assertEquals(2020, coupon.getExpirationDate().getYear());
assertEquals(1000, coupon.getMaxRedemptions().intValue());
assertFalse(coupon.inUse());
assertEquals(21, coupon.getCreationDate().getDay());
assertEquals(Month.JUNE, coupon.getCreationDate().getMonth());
assertEquals(2015, coupon.getCreationDate().getYear());
assertEquals(21, coupon.getCreationDate().getHour());
assertEquals(51, coupon.getCreationDate().getMinute());
assertEquals(43, coupon.getCreationDate().getSecond());
}
}
16 changes: 16 additions & 0 deletions src/test/java/sdk/jassinaturas/clients/SubscriptionClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import sdk.jassinaturas.clients.attributes.BillingInfo;
import sdk.jassinaturas.clients.attributes.Birthdate;
import sdk.jassinaturas.clients.attributes.Country;
import sdk.jassinaturas.clients.attributes.Coupon;
import sdk.jassinaturas.clients.attributes.CreditCard;
import sdk.jassinaturas.clients.attributes.Customer;
import sdk.jassinaturas.clients.attributes.Invoice;
Expand Down Expand Up @@ -263,4 +264,19 @@ public void shouldGetResultFromToString() {
"Subscription [amount=100, code=subscription00001, creationDate=CreationDate [day=21, hour=23, minute=0, month=1, second=40, year=2014], customer=Customer [address=null, billingInfo=null, birthdate=null, code=customer000000001, cpf=null, customers=null, [email protected], fullname=Danillo Souza, message=null, phoneAreaCode=null, phoneNumber=null, birthdateDay=0, birthdateMonth=0, birthdateYear=0], expirationDate=ExpirationDate [day=17, month=OCTOBER, year=2016], invoice=null, invoices=null, message=null, nextInvoiceDate=NextInvoiceDate [day=1, month=5, year=2014], plan=Plan [alerts=null, amount=0, billingCycles=0, code=plan001, description=null, interval=null, maxQty=0, message=null, name=Plano de Teste Atualizado, plans=null, setupFee=0, status=null, trial=null], status=OVERDUE, subscriptions=null, coupon=null]",
subscription);
}

@Betamax(tape = "UPDATE_SUBSCRIPTION_ADDING_COUPON", match = { MatchRule.method, MatchRule.uri })
@Test
public void addingCouponToASubscription() {
Subscription toUpdate = new Subscription();
toUpdate.withCode("assinatura46").withPlan(new Plan().withCode("plano01")).withAmount(990)
.withNextInvoiceDate(new NextInvoiceDate().withDay(20).withMonth(Month.OCTOBER).withYear(2015))
.withCoupon(new Coupon().withCode("jassinaturas_coupon_01"));

Subscription subscription = assinaturas.subscriptions().update(toUpdate);

// There isn't any response from Moip Assinaturas when subscription is
// updated
// So, I didn't do any assert
}
}
27 changes: 27 additions & 0 deletions src/test/resources/betamax/tapes/ACTIVATE_COUPON.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
!tape
name: ACTIVATE_COUPON
interactions:
- recorded: 2015-06-22T01:12:44.107Z
request:
method: PUT
uri: https://sandbox.moip.com.br/assinaturas/v1/coupons/jassinaturas_coupon_01/active
headers:
Accept: application/json
Accept-Charset: utf-8
Accept-Encoding: utf-8
Authorization: Basic U0dQQTBLMFI3TzBJVkxSUE9WTEpES0FXWUJPMURaRjM6UVVKRVNHTTlKVTE3NU9HWFJGUkpJWU0wU0lGT01JRlVZQ0JXSDlXQQ==
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Host: sandbox.moip.com.br
User-Agent: Java/1.7.0_45
response:
status: 200
headers:
Content-Type: application/json
Date: Mon, 22 Jun 2015 01:12:44 GMT
Server: nginx
Status: 200 OK
X-Content-Type-Options: nosniff
vary: Accept-Encoding
x-newrelic-app-data: PxQFUlBXAQoTVlhbAwEOVUYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOFAZtGAULREZcDBU/TUsBVxdIV1pxXAFcHG1OUgEQX0EERktoZmRNQ04HHwdKVB8EAlNSU1IEVxRSFBoCAwEGCAQEVVBXAgQFBVECGm4=
body: '{"code":"jassinaturas_coupon_01","name":"JAssinaturas","description":"Coupon for test control","discount":{"value":1000,"type":"PERCENT"},"status":"ACTIVE","duration":{"type":"REPEATING","occurrences":1},"expiration_date":{"day":10,"month":10,"year":2020},"max_redemptions":1000,"in_use":false,"creation_date":{"day":21,"month":6,"year":2015,"hour":21,"minute":51,"second":43}}'
Loading

0 comments on commit b1608ff

Please sign in to comment.