Skip to content

Commit e0b7abe

Browse files
committed
CA-4834 Merges feature/Update-Customer into develop
2 parents 2d390fb + cd8f815 commit e0b7abe

File tree

8 files changed

+477
-171
lines changed

8 files changed

+477
-171
lines changed

src/main/java/com/shopify/ShopifySdk.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
import com.shopify.model.Shop;
4545
import com.shopify.model.ShopifyAccessTokenRoot;
4646
import com.shopify.model.ShopifyCancelOrderRequest;
47+
import com.shopify.model.ShopifyCustomer;
48+
import com.shopify.model.ShopifyCustomerRoot;
49+
import com.shopify.model.ShopifyCustomerUpdateRequest;
50+
import com.shopify.model.ShopifyCustomerUpdateRoot;
4751
import com.shopify.model.ShopifyFulfillment;
4852
import com.shopify.model.ShopifyFulfillmentCreationRequest;
4953
import com.shopify.model.ShopifyFulfillmentRoot;
@@ -171,6 +175,8 @@ public class ShopifySdk {
171175

172176
private static final Client CLIENT = buildClient();
173177

178+
private static final String CUSTOMERS = "customers";
179+
174180
public static interface OptionalsStep {
175181

176182
/**
@@ -630,6 +636,15 @@ public ShopifyOrder updateOrderShippingAddress(
630636
return shopifyOrderRootResponse.getOrder();
631637
}
632638

639+
public ShopifyCustomer updateCustomer(final ShopifyCustomerUpdateRequest shopifyCustomerUpdateRequest) {
640+
final ShopifyCustomerUpdateRoot shopifyCustomerUpdateRequestRoot = new ShopifyCustomerUpdateRoot();
641+
shopifyCustomerUpdateRequestRoot.setCustomer(shopifyCustomerUpdateRequest);
642+
final Response response = put(getWebTarget().path(CUSTOMERS).path(shopifyCustomerUpdateRequest.getId()),
643+
shopifyCustomerUpdateRequestRoot);
644+
final ShopifyCustomerRoot shopifyCustomerRootResponse = response.readEntity(ShopifyCustomerRoot.class);
645+
return shopifyCustomerRootResponse.getCustomer();
646+
}
647+
633648
public ShopifyFulfillment cancelFulfillment(final String orderId, final String fulfillmentId) {
634649
final Response response = post(
635650
getWebTarget().path(ORDERS).path(orderId).path(FULFILLMENTS).path(fulfillmentId).path(CANCEL),
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.shopify.model;
2+
3+
public class ShopifyCustomerRoot {
4+
5+
private ShopifyCustomer customer;
6+
7+
public ShopifyCustomer getCustomer() {
8+
return customer;
9+
}
10+
11+
public void setCustomer(final ShopifyCustomer customer) {
12+
this.customer = customer;
13+
}
14+
15+
}
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package com.shopify.model;
2+
3+
import javax.xml.bind.annotation.XmlAccessType;
4+
import javax.xml.bind.annotation.XmlAccessorType;
5+
import javax.xml.bind.annotation.XmlElement;
6+
import javax.xml.bind.annotation.XmlRootElement;
7+
8+
import com.fasterxml.jackson.annotation.JsonInclude;
9+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
10+
11+
@XmlRootElement
12+
@XmlAccessorType(XmlAccessType.FIELD)
13+
@JsonInclude(Include.ALWAYS)
14+
public class ShopifyCustomerUpdateRequest {
15+
16+
private String id;
17+
private String email;
18+
@XmlElement(name = "first_name")
19+
private String firstName;
20+
@XmlElement(name = "last_name")
21+
private String lastname;
22+
private String phone;
23+
24+
private ShopifyCustomerUpdateRequest(final Steps steps) {
25+
this.id = steps.id;
26+
this.email = steps.email;
27+
this.firstName = steps.firstName;
28+
this.lastname = steps.lastname;
29+
this.phone = steps.phone;
30+
}
31+
32+
public static interface BuildStep {
33+
ShopifyCustomerUpdateRequest build();
34+
}
35+
36+
public static interface PhoneStep {
37+
BuildStep withPhone(final String phone);
38+
}
39+
40+
public static interface EmailStep {
41+
PhoneStep withEmail(final String email);
42+
}
43+
44+
public static interface LastNameStep {
45+
EmailStep withLastName(final String lastName);
46+
}
47+
48+
public static interface FirstNameStep {
49+
LastNameStep withFirstName(final String firstName);
50+
}
51+
52+
public static interface IdStep {
53+
FirstNameStep withId(final String id);
54+
}
55+
56+
public static IdStep newBuilder() {
57+
return new Steps();
58+
}
59+
60+
private static class Steps implements IdStep, FirstNameStep, LastNameStep, EmailStep, PhoneStep, BuildStep {
61+
private String id;
62+
private String email;
63+
private String firstName;
64+
private String lastname;
65+
private String phone;
66+
67+
@Override
68+
public ShopifyCustomerUpdateRequest build() {
69+
return new ShopifyCustomerUpdateRequest(this);
70+
}
71+
72+
@Override
73+
public BuildStep withPhone(final String phone) {
74+
this.phone = phone;
75+
return this;
76+
}
77+
78+
@Override
79+
public PhoneStep withEmail(final String email) {
80+
this.email = email;
81+
return this;
82+
}
83+
84+
@Override
85+
public EmailStep withLastName(final String lastName) {
86+
this.lastname = lastName;
87+
return this;
88+
}
89+
90+
@Override
91+
public LastNameStep withFirstName(final String firstName) {
92+
this.firstName = firstName;
93+
return this;
94+
}
95+
96+
@Override
97+
public FirstNameStep withId(final String id) {
98+
this.id = id;
99+
return this;
100+
}
101+
}
102+
103+
public String getId() {
104+
return id;
105+
}
106+
107+
public void setId(final String id) {
108+
this.id = id;
109+
}
110+
111+
public String getEmail() {
112+
return email;
113+
}
114+
115+
public void setEmail(final String email) {
116+
this.email = email;
117+
}
118+
119+
public String getFirstName() {
120+
return firstName;
121+
}
122+
123+
public void setFirstName(final String firstName) {
124+
this.firstName = firstName;
125+
}
126+
127+
public String getLastname() {
128+
return lastname;
129+
}
130+
131+
public void setLastname(final String lastname) {
132+
this.lastname = lastname;
133+
}
134+
135+
public String getPhone() {
136+
return phone;
137+
}
138+
139+
public void setPhone(final String phone) {
140+
this.phone = phone;
141+
}
142+
143+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.shopify.model;
2+
3+
import javax.xml.bind.annotation.XmlAccessType;
4+
import javax.xml.bind.annotation.XmlAccessorType;
5+
import javax.xml.bind.annotation.XmlRootElement;
6+
7+
@XmlRootElement
8+
@XmlAccessorType(XmlAccessType.FIELD)
9+
public class ShopifyCustomerUpdateRoot {
10+
11+
private ShopifyCustomerUpdateRequest customer;
12+
13+
public ShopifyCustomerUpdateRequest getCustomer() {
14+
return customer;
15+
}
16+
17+
public void setCustomer(final ShopifyCustomerUpdateRequest customer) {
18+
this.customer = customer;
19+
}
20+
21+
}

src/test/java/com/shopify/ShopifySdkDriver.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.shopify.model.Shop;
2929
import com.shopify.model.ShopifyAddress;
3030
import com.shopify.model.ShopifyCustomer;
31+
import com.shopify.model.ShopifyCustomerUpdateRequest;
3132
import com.shopify.model.ShopifyFulfillment;
3233
import com.shopify.model.ShopifyFulfillmentCreationRequest;
3334
import com.shopify.model.ShopifyFulfillmentUpdateRequest;
@@ -569,6 +570,18 @@ public void givenSomeValuesWhenUpdatingAnOrderThenExpectValuesToBeUpdatedOnOrder
569570
assertEquals("Testing From SDK Driver2", updateOrder.getShippingAddress().getAddress1());
570571
}
571572

573+
@Test
574+
public void givenSomeValuesWhenUpdatingACustomerThenExpectValuesToBeUpdatedOnCustomer()
575+
throws JsonProcessingException {
576+
577+
final ShopifyCustomerUpdateRequest shopifyOrderUpdateRequest = ShopifyCustomerUpdateRequest.newBuilder()
578+
.withId("6780238412").withFirstName("RyanTest").withLastName("Kazokas123")
579+
.withEmail("rkazokas@channelape.com").withPhone("5702392904").build();
580+
581+
final ShopifyCustomer updatedCustomer = shopifySdk.updateCustomer(shopifyOrderUpdateRequest);
582+
assertEquals("RyanTest", updatedCustomer.getFirstName());
583+
}
584+
572585
@After
573586
public void after() {
574587
System.out.println(TEST_DELIMITER);

src/test/java/com/shopify/ShopifySdkTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import com.shopify.model.ShopifyAccessTokenRoot;
5252
import com.shopify.model.ShopifyAddress;
5353
import com.shopify.model.ShopifyCustomer;
54+
import com.shopify.model.ShopifyCustomerRoot;
55+
import com.shopify.model.ShopifyCustomerUpdateRequest;
5456
import com.shopify.model.ShopifyFulfillment;
5557
import com.shopify.model.ShopifyFulfillmentCreationRequest;
5658
import com.shopify.model.ShopifyFulfillmentRoot;
@@ -2017,6 +2019,53 @@ public void givenSomeValidAccessTokenAndSubdomainAndValidRequestWhenUpdatingOrde
20172019

20182020
}
20192021

2022+
@Test
2023+
public void givenSomeUpdateCustomerRequestWhenUpdatingCustomerThenUpdateAndReturnCustomer()
2024+
throws JsonProcessingException {
2025+
final String someCustomerId = "some-id";
2026+
final String expectedPath = new StringBuilder().append(FORWARD_SLASH).append("customers").append(FORWARD_SLASH)
2027+
.append(someCustomerId).toString();
2028+
final ShopifyCustomerUpdateRequest shopifyCustomerUpdateRequest = ShopifyCustomerUpdateRequest.newBuilder()
2029+
.withId(someCustomerId).withFirstName("Ryan").withLastName("Kazokas")
2030+
.withEmail("rkazokas@channelape.com").withPhone("57087482349").build();
2031+
final ShopifyCustomerRoot shopifyCustomerRoot = new ShopifyCustomerRoot();
2032+
final ShopifyCustomer shopifyCustomer = new ShopifyCustomer();
2033+
shopifyCustomer.setFirstName("Ryan");
2034+
shopifyCustomer.setLastname("Kazokas");
2035+
shopifyCustomer.setEmail("rkazokas@channelape.com");
2036+
shopifyCustomer.setNote("Some NOtes");
2037+
shopifyCustomer.setOrdersCount(3);
2038+
shopifyCustomer.setState("some-state");
2039+
shopifyCustomer.setPhone("57087482349");
2040+
shopifyCustomer.setTotalSpent(new BigDecimal(32.12));
2041+
shopifyCustomerRoot.setCustomer(shopifyCustomer);
2042+
final String expectedResponseBodyString = getJsonString(ShopifyCustomerRoot.class, shopifyCustomerRoot);
2043+
2044+
final Status expectedStatus = Status.OK;
2045+
final int expectedStatusCode = expectedStatus.getStatusCode();
2046+
final JsonBodyCapture actualRequestBody = new JsonBodyCapture();
2047+
driver.addExpectation(
2048+
onRequestTo(expectedPath).withHeader("X-Shopify-Access-Token", accessToken).withMethod(Method.PUT)
2049+
.capturingBodyIn(actualRequestBody),
2050+
giveResponse(expectedResponseBodyString, MediaType.APPLICATION_JSON).withStatus(expectedStatusCode));
2051+
2052+
final ShopifyCustomer updatedCustomer = shopifySdk.updateCustomer(shopifyCustomerUpdateRequest);
2053+
2054+
assertEquals("rkazokas@channelape.com", updatedCustomer.getEmail());
2055+
assertEquals("Ryan", updatedCustomer.getFirstName());
2056+
assertEquals("Kazokas", updatedCustomer.getLastname());
2057+
assertEquals("Some NOtes", updatedCustomer.getNote());
2058+
assertEquals(3, updatedCustomer.getOrdersCount());
2059+
assertEquals("57087482349", updatedCustomer.getPhone());
2060+
assertEquals("some-state", updatedCustomer.getState());
2061+
assertEquals(new BigDecimal(32.12), updatedCustomer.getTotalSpent());
2062+
2063+
assertEquals("rkazokas@channelape.com", actualRequestBody.getContent().get("customer").get("email").asText());
2064+
assertEquals("Ryan", actualRequestBody.getContent().get("customer").get("first_name").asText());
2065+
assertEquals("Kazokas", actualRequestBody.getContent().get("customer").get("last_name").asText());
2066+
assertEquals("57087482349", actualRequestBody.getContent().get("customer").get("phone").asText());
2067+
}
2068+
20202069
@Test
20212070
public void givenSomeValidAccessTokenAndSubdomainAndValidRequestAndCreatingRefundThenCalculateAndCreateRefundAndReturn()
20222071
throws Exception {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.shopify.model;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import org.junit.Test;
6+
7+
public class ShopifyCustomerUpdateRequestTest {
8+
9+
@Test
10+
public void givenSomeValuesWhenShopifyCustomerUpdateRequestThenExpectCorrectValues() {
11+
12+
final ShopifyCustomerUpdateRequest shopifyCustomerUpdateRequest = ShopifyCustomerUpdateRequest.newBuilder()
13+
.withId("some-id").withFirstName("Ryan").withLastName("Kazokas").withEmail("rkazokas@channelape.com")
14+
.withPhone("209378429734").build();
15+
16+
assertEquals("some-id", shopifyCustomerUpdateRequest.getId());
17+
assertEquals("Ryan", shopifyCustomerUpdateRequest.getFirstName());
18+
assertEquals("Kazokas", shopifyCustomerUpdateRequest.getLastname());
19+
assertEquals("rkazokas@channelape.com", shopifyCustomerUpdateRequest.getEmail());
20+
}
21+
22+
}

0 commit comments

Comments
 (0)