Skip to content

Commit

Permalink
CA-4834 Add step builder to order shipping address update request model
Browse files Browse the repository at this point in the history
  • Loading branch information
ryankazokas committed Jun 7, 2019
1 parent b98a16a commit 2970d73
Show file tree
Hide file tree
Showing 8 changed files with 576 additions and 1,202 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ The final parameters of the SDK builder are optional and will use default values
|Minimum Request Retry Random Delay|Shopify SDK uses a random wait strategy when calculating to perform the next attempt. This is the minimum duration to wait before performing the failed request.|1 second|
|Maximum Request Retry Random Delay|Shopify SDK uses a random wait strategy when calculating to perform the next attempt. This is the maximum duration to wait before performing the failed request.|5 seconds|
|Maximum Request Retry Timeout|The maximum time to keep retrying failed requests.|3 minutes|
|Connection Timeout|The duration to attempt to read a response from Shopify's API.|1 minute|
|Connection Timeout|The duration to attempt to connect to Shopify's API.|1 minute|
|Read Timeout|The duration to attempt to read a response from Shopify's API.|15 Seconds|

## Building from source
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/com/shopify/ShopifySdk.java
Original file line number Diff line number Diff line change
Expand Up @@ -811,9 +811,7 @@ private <T> Response post(final WebTarget webTarget, final T object) {
private <T> Response put(final WebTarget webTarget, final T object) {
final Callable<Response> responseCallable = () -> {
final Entity<T> entity = Entity.entity(object, MediaType.APPLICATION_JSON);
final Response response = webTarget.request(MediaType.APPLICATION_JSON)
.header(ACCESS_TOKEN_HEADER, accessToken).put(entity);
return response;
return webTarget.request(MediaType.APPLICATION_JSON).header(ACCESS_TOKEN_HEADER, accessToken).put(entity);
};
final Response response = invokeResponseCallable(responseCallable);
return handleResponse(response, Status.OK);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.shopify.model;

import java.math.BigDecimal;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
Expand All @@ -13,14 +15,72 @@ public class ShopifyOrderShippingAddressUpdateRequest {
@XmlElement(name = "shipping_address")
private ShopifyAddressUpdateRequest shippingAddress;

public static interface OptionalsStep {
OptionalsStep withShippingAddress(final ShopifyAddressUpdateRequest shippingAddress);

public static interface BuildStep {
ShopifyOrderShippingAddressUpdateRequest build();
}

public static interface LongitudeStep {
BuildStep withLongitude(final BigDecimal longitude);
}

public static interface LatitudeStep {
LongitudeStep withLatitude(final BigDecimal latitude);
}

public static interface CompanyStep {
LatitudeStep withCompany(final String company);
}

public static interface NameStep {
CompanyStep withName(final String name);
}

public static interface LastNameStep {
NameStep withLastName(final String lastName);
}

public static interface FirstNameStep {
LastNameStep withFirstName(final String firstName);
}

public static interface PhoneStep {
FirstNameStep withPhone(final String phone);
}

public static interface CountryCodeStep {
PhoneStep withCountryCode(final String countryCode);
}

public static interface CountryStep {
CountryCodeStep withCountry(final String country);
}

public static interface ZipCodeStep {
CountryStep withZip(final String zip);
}

public static interface ProvinceCodeStep {
ZipCodeStep withProvinceCode(final String province);
}

public static interface ProvinceStep {
ProvinceCodeStep withProvince(final String province);
}

public static interface CityStep {
ProvinceStep withCity(final String city);
}

public static interface Address2Step {
CityStep withAddress2(final String address2);
}

public static interface Address1Step {
Address2Step withAddress1(final String address1);
}

public static interface IdStep {
OptionalsStep withId(final String id);
Address1Step withId(final String id);
}

public static IdStep newBuilder() {
Expand All @@ -32,27 +92,113 @@ private ShopifyOrderShippingAddressUpdateRequest(final Steps steps) {
this.shippingAddress = steps.shippingAddress;
}

private static class Steps implements IdStep, OptionalsStep {
private static class Steps implements IdStep, Address1Step, Address2Step, CityStep, ProvinceStep, ProvinceCodeStep,
ZipCodeStep, CountryStep, CountryCodeStep, PhoneStep, LatitudeStep, CompanyStep, LongitudeStep, NameStep,
LastNameStep, FirstNameStep, BuildStep {
private String id;
private ShopifyAddressUpdateRequest shippingAddress;
private final ShopifyAddressUpdateRequest shippingAddress = new ShopifyAddressUpdateRequest();

@Override
public OptionalsStep withShippingAddress(final ShopifyAddressUpdateRequest shippingAddress) {
this.shippingAddress = shippingAddress;
public ShopifyOrderShippingAddressUpdateRequest build() {
return new ShopifyOrderShippingAddressUpdateRequest(this);
}

@Override
public LastNameStep withFirstName(final String firstName) {
this.shippingAddress.setFirstName(firstName);
return this;
}

@Override
public ShopifyOrderShippingAddressUpdateRequest build() {
return new ShopifyOrderShippingAddressUpdateRequest(this);
public NameStep withLastName(final String lastName) {
this.shippingAddress.setLastname(lastName);
return this;
}

@Override
public BuildStep withLongitude(final BigDecimal longitude) {
this.shippingAddress.setLongitude(longitude);
return this;
}

@Override
public LongitudeStep withLatitude(final BigDecimal latitude) {
this.shippingAddress.setLatitude(latitude);
return this;
}

@Override
public FirstNameStep withPhone(final String phone) {
this.shippingAddress.setPhone(phone);
return this;
}

@Override
public PhoneStep withCountryCode(final String countryCode) {
this.shippingAddress.setCountryCode(countryCode);
return this;
}

@Override
public CountryCodeStep withCountry(final String country) {
this.shippingAddress.setCountry(country);
return this;
}

@Override
public CountryStep withZip(final String zip) {
this.shippingAddress.setZip(zip);
return this;
}

@Override
public ZipCodeStep withProvinceCode(final String provinceCode) {
this.shippingAddress.setProvinceCode(provinceCode);
return this;
}

@Override
public ProvinceStep withCity(final String city) {
this.shippingAddress.setCity(city);
return this;
}

@Override
public CityStep withAddress2(final String address2) {
this.shippingAddress.setAddress2(address2);
return this;
}

@Override
public Address2Step withAddress1(final String address1) {
this.shippingAddress.setAddress1(address1);
return this;
}

@Override
public OptionalsStep withId(final String id) {
public Address1Step withId(final String id) {
this.id = id;
return this;
}

@Override
public CompanyStep withName(final String name) {
this.shippingAddress.setName(name);
return this;
}

@Override
public ProvinceCodeStep withProvince(final String province) {
this.shippingAddress.setProvince(province);
return this;
}

@Override
public LatitudeStep withCompany(final String company) {
this.shippingAddress.setCompany(company);
return this;
}

}

public String getId() {
Expand Down
22 changes: 6 additions & 16 deletions src/test/java/com/shopify/ShopifySdkDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import com.shopify.model.MetafieldValueType;
import com.shopify.model.Shop;
import com.shopify.model.ShopifyAddress;
import com.shopify.model.ShopifyAddressUpdateRequest;
import com.shopify.model.ShopifyCustomer;
import com.shopify.model.ShopifyFulfillment;
import com.shopify.model.ShopifyFulfillmentCreationRequest;
Expand Down Expand Up @@ -558,25 +557,16 @@ public void givenSomeOrderWhenCreatingOrderThenCreateOrder() throws JsonProcessi

@Test
public void givenSomeValuesWhenUpdatingAnOrderThenExpectValuesToBeUpdatedOnOrder() throws JsonProcessingException {
final ShopifyAddressUpdateRequest shopifyAddress = new ShopifyAddressUpdateRequest();
final String someAddress1 = "Testing From SDK Driver";
shopifyAddress.setAddress1(someAddress1);
shopifyAddress.setAddress2(null);
shopifyAddress.setName("Ryan Kazokas224444444444444444444444");
shopifyAddress.setFirstName("Ryan");
shopifyAddress.setLastname("Kazokas");
shopifyAddress.setCountry("United States");
shopifyAddress.setCity("Scranton");

shopifyAddress.setCountryCode("US");
shopifyAddress.setProvince("PEnnsylvania");
shopifyAddress.setProvinceCode("PA");
shopifyAddress.setZip("9999999999999999999999999999999");
final ShopifyOrderShippingAddressUpdateRequest shopifyOrderUpdateRequest = ShopifyOrderShippingAddressUpdateRequest
.newBuilder().withId("1124214472765").withShippingAddress(shopifyAddress).build();
.newBuilder().withId("1124214472765").withAddress1("Testing From SDK Driver2").withAddress2("Suite 100")
.withCity("Scranton").withProvince("Pennsylvania").withProvinceCode("PA").withZip("18503")
.withCountry("United States").withCountryCode("US").withPhone("9829374293874").withFirstName("Ryan")
.withLastName("Kazokas").withName("Ryan Kazokas").withCompany("ChannelApe").withLatitude(null)
.withLongitude(null).build();

final ShopifyOrder updateOrder = shopifySdk.updateOrderShippingAddress(shopifyOrderUpdateRequest);
assertEquals(someAddress1, updateOrder.getShippingAddress().getAddress1());
assertEquals("Testing From SDK Driver2", updateOrder.getShippingAddress().getAddress1());
}

@After
Expand Down
47 changes: 23 additions & 24 deletions src/test/java/com/shopify/ShopifySdkTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import com.shopify.model.Shop;
import com.shopify.model.ShopifyAccessTokenRoot;
import com.shopify.model.ShopifyAddress;
import com.shopify.model.ShopifyAddressUpdateRequest;
import com.shopify.model.ShopifyCustomer;
import com.shopify.model.ShopifyFulfillment;
import com.shopify.model.ShopifyFulfillmentCreationRequest;
Expand Down Expand Up @@ -137,7 +136,7 @@ public void setUp() throws JsonProcessingException {
.anyTimes();

shopifySdk = ShopifySdk.newBuilder().withApiUrl(subdomainUrl).withAccessToken(accessToken)
.withMaximumRequestRetryTimeout(3, TimeUnit.SECONDS).withConnectionTimeout(3, TimeUnit.SECONDS).build();
.withMaximumRequestRetryTimeout(2, TimeUnit.SECONDS).withConnectionTimeout(1, TimeUnit.SECONDS).build();

}

Expand Down Expand Up @@ -174,7 +173,8 @@ public void givenSomeClientCredentialsWhenCallinglToTheShopifyApiThenExpectAcces
final String subdomainUrl = driver.getBaseUrl();

final String expectedPath = new StringBuilder().append(FORWARD_SLASH).append(ShopifySdk.OAUTH)
.append(FORWARD_SLASH).append(ShopifySdk.ACCESS_TOKEN).toString();
// .append(FORWARD_SLASH)
.append("/test/").append(ShopifySdk.ACCESS_TOKEN).toString();

final ShopifyAccessTokenRoot shopifyAccessTokenRoot = new ShopifyAccessTokenRoot();
shopifyAccessTokenRoot.setAccessToken("897123871827381723");
Expand All @@ -188,7 +188,8 @@ public void givenSomeClientCredentialsWhenCallinglToTheShopifyApiThenExpectAcces
.withStatus(Status.OK.getStatusCode()));

shopifySdk = ShopifySdk.newBuilder().withApiUrl(subdomainUrl).withClientId("some-client-id")
.withClientSecret("some-client-secret").withAuthorizationToken("3892742738482").build();
.withClientSecret("some-client-secret").withAuthorizationToken("3892742738482")
.withMaximumRequestRetryTimeout(2, TimeUnit.SECONDS).build();

final String expectedShopPath = new StringBuilder().append(FORWARD_SLASH).append(ShopifySdk.SHOP).toString();

Expand Down Expand Up @@ -236,7 +237,8 @@ public void givenSomeClientCredentialsAndUnexpectedStatusWhenCallingToTheShopify
.withStatus(Status.UNAUTHORIZED.getStatusCode()));

shopifySdk = ShopifySdk.newBuilder().withApiUrl(subdomainUrl).withClientId("some-client-id")
.withClientSecret("some-client-secret").withAuthorizationToken("3892742738482").build();
.withClientSecret("some-client-secret").withAuthorizationToken("3892742738482")
.withMaximumRequestRetryTimeout(2, TimeUnit.SECONDS).build();

assertNull(shopifySdk.getAccessToken());
shopifySdk.getShop();
Expand Down Expand Up @@ -1925,17 +1927,12 @@ public void givenSomeValidAccessTokenAndSubdomainAndValidRequestWhenUpdatingOrde

shopifyOrderRoot.setOrder(shopifyOrder);

final ShopifyAddressUpdateRequest shopifyAddressUpdateRequest = new ShopifyAddressUpdateRequest();
shopifyAddressUpdateRequest.setAddress1("224 Wyoming Ave");
shopifyAddressUpdateRequest.setAddress2("Suite 100");
shopifyAddressUpdateRequest.setCompany("channelape");
shopifyAddressUpdateRequest.setFirstName("Ryan Kazokas");
shopifyAddressUpdateRequest.setLastname("Kazokas");
shopifyAddressUpdateRequest.setProvince("PEnnsylvania");
shopifyAddressUpdateRequest.setProvinceCode("PA");
shopifyAddressUpdateRequest.setZip("18503");
shopifyAddressUpdateRequest.setCountry("US");
shopifyAddressUpdateRequest.setCountryCode("USA");
final ShopifyOrderShippingAddressUpdateRequest shopifyAddressRequest = ShopifyOrderShippingAddressUpdateRequest
.newBuilder().withId(someShopifyOrderId).withAddress1("224 Wyoming Ave").withAddress2("Suite 100")
.withCity("Scranton").withProvince("PEnnsylvania").withProvinceCode("PA").withZip("18503")
.withCountry("USA").withCountryCode("US").withPhone("123").withFirstName("Ryan").withLastName("Kazokas")
.withName("Ryan Kazokas").withCompany("ChannelApe").withLatitude(new BigDecimal(410.44444))
.withLongitude(new BigDecimal(123.442)).build();

final String expectedResponseBodyString = getJsonString(ShopifyOrderRoot.class, shopifyOrderRoot);

Expand All @@ -1947,9 +1944,7 @@ public void givenSomeValidAccessTokenAndSubdomainAndValidRequestWhenUpdatingOrde
.capturingBodyIn(actualRequestBody),
giveResponse(expectedResponseBodyString, MediaType.APPLICATION_JSON).withStatus(expectedStatusCode));

final ShopifyOrderShippingAddressUpdateRequest shopifyOrderRequest = ShopifyOrderShippingAddressUpdateRequest
.newBuilder().withId(someShopifyOrderId).withShippingAddress(shopifyAddressUpdateRequest).build();
final ShopifyOrder actualShopifyOrder = shopifySdk.updateOrderShippingAddress(shopifyOrderRequest);
final ShopifyOrder actualShopifyOrder = shopifySdk.updateOrderShippingAddress(shopifyAddressRequest);

assertEquals("224 Wyoming Ave",
actualRequestBody.getContent().get("order").get("shipping_address").get("address1").asText());
Expand All @@ -1958,18 +1953,22 @@ public void givenSomeValidAccessTokenAndSubdomainAndValidRequestWhenUpdatingOrde
assertEquals("PEnnsylvania",
actualRequestBody.getContent().get("order").get("shipping_address").get("province").asText());
assertEquals("18503", actualRequestBody.getContent().get("order").get("shipping_address").get("zip").asText());
assertEquals("channelape",
actualRequestBody.getContent().get("order").get("shipping_address").get("company").asText());
assertEquals("Ryan Kazokas",

assertEquals("Ryan",
actualRequestBody.getContent().get("order").get("shipping_address").get("first_name").asText());
assertEquals("Kazokas",
actualRequestBody.getContent().get("order").get("shipping_address").get("last_name").asText());
assertEquals("US", actualRequestBody.getContent().get("order").get("shipping_address").get("country").asText());
assertEquals("Ryan Kazokas",
actualRequestBody.getContent().get("order").get("shipping_address").get("name").asText());
assertEquals("USA",
actualRequestBody.getContent().get("order").get("shipping_address").get("country").asText());
assertEquals("US",
actualRequestBody.getContent().get("order").get("shipping_address").get("country_code").asText());
assertEquals("PA",
actualRequestBody.getContent().get("order").get("shipping_address").get("province_code").asText());

assertEquals("123", actualRequestBody.getContent().get("order").get("shipping_address").get("phone").asText());
assertEquals("ChannelApe",
actualRequestBody.getContent().get("order").get("shipping_address").get("company").asText());
assertEquals(shopifyOrder.getId(), actualShopifyOrder.getId());
assertEquals(shopifyOrder.getName(), actualShopifyOrder.getName());
assertEquals(shopifyCustomer.getEmail(), actualShopifyOrder.getCustomer().getEmail());
Expand Down
Loading

0 comments on commit 2970d73

Please sign in to comment.