Skip to content

Commit 8f41981

Browse files
authored
Merge pull request gooddata#476 from Tantalor93/obe-update
Add feature to update user
2 parents d2b3da0 + 84a77fb commit 8f41981

8 files changed

Lines changed: 155 additions & 9 deletions

File tree

src/main/java/com/gooddata/account/Account.java

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@
1212
import com.fasterxml.jackson.annotation.JsonProperty;
1313
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1414
import com.fasterxml.jackson.annotation.JsonTypeName;
15+
import com.fasterxml.jackson.annotation.JsonView;
1516
import com.gooddata.util.GoodDataToStringBuilder;
1617
import org.springframework.web.util.UriTemplate;
1718

19+
import java.util.List;
20+
1821
/**
1922
* Account setting
2023
*/
@@ -35,11 +38,25 @@ public class Account {
3538
public static final String CURRENT_ID = "current";
3639

3740
private final String login;
38-
private final String email;
39-
private final String password;
40-
private final String verifyPassword;
41-
private final String firstName;
42-
private final String lastName;
41+
42+
@JsonView(UpdateView.class)
43+
private String email;
44+
45+
@JsonView(UpdateView.class)
46+
private String password;
47+
48+
@JsonView(UpdateView.class)
49+
private String verifyPassword;
50+
51+
@JsonView(UpdateView.class)
52+
private String firstName;
53+
54+
@JsonView(UpdateView.class)
55+
private String lastName;
56+
57+
@JsonView(UpdateView.class)
58+
private List<String> ipWhitelist;
59+
4360
@JsonIgnore
4461
private final Links links;
4562

@@ -51,6 +68,7 @@ private Account(
5168
@JsonProperty("verifyPassword") String verifyPassword,
5269
@JsonProperty("firstName") String firstName,
5370
@JsonProperty("lastName") String lastName,
71+
@JsonProperty("ipWhitelist") List<String> ipWhitelist,
5472
@JsonProperty("links") Links links
5573
) {
5674
this.login = login;
@@ -59,11 +77,12 @@ private Account(
5977
this.verifyPassword = verifyPassword;
6078
this.firstName = firstName;
6179
this.lastName = lastName;
80+
this.ipWhitelist = ipWhitelist;
6281
this.links = links;
6382
}
6483

65-
public Account(String firstName,String lastName, Links links) {
66-
this(null, null, null, null, firstName, lastName, links);
84+
public Account(String firstName, String lastName, Links links) {
85+
this(null, null, null, null, firstName, lastName, null, links);
6786
}
6887

6988
/**
@@ -74,7 +93,7 @@ public Account(String firstName,String lastName, Links links) {
7493
* @param password password
7594
*/
7695
public Account(String email, String password, String firstName, String lastName) {
77-
this(email, email, password, password, firstName, lastName, null);
96+
this(email, email, password, password, firstName, lastName, null, null);
7897
}
7998

8099
public String getLogin() {
@@ -126,6 +145,34 @@ public String getId() {
126145
return getId(getUri());
127146
}
128147

148+
public List<String> getIpWhitelist() {
149+
return ipWhitelist;
150+
}
151+
152+
public void setEmail(final String email) {
153+
this.email = email;
154+
}
155+
156+
public void setPassword(final String password) {
157+
this.password = password;
158+
}
159+
160+
public void setVerifyPassword(final String verifyPassword) {
161+
this.verifyPassword = verifyPassword;
162+
}
163+
164+
public void setFirstName(final String firstName) {
165+
this.firstName = firstName;
166+
}
167+
168+
public void setLastName(final String lastName) {
169+
this.lastName = lastName;
170+
}
171+
172+
public void setIpWhitelist(final List<String> ipWhitelist) {
173+
this.ipWhitelist = ipWhitelist;
174+
}
175+
129176
@JsonIgnoreProperties(ignoreUnknown = true)
130177
private static class Links {
131178
private final String self;
@@ -154,4 +201,10 @@ static String getId(String uri) {
154201
public String toString() {
155202
return GoodDataToStringBuilder.defaultToString(this, "password", "verifyPassword");
156203
}
204+
205+
/**
206+
* Class representing update view of account
207+
*/
208+
static class UpdateView {
209+
}
157210
}

src/main/java/com/gooddata/account/AccountService.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.gooddata.GoodDataRestException;
1111
import com.gooddata.gdc.UriResponse;
1212
import org.springframework.http.HttpStatus;
13+
import org.springframework.http.converter.json.MappingJacksonValue;
1314
import org.springframework.web.client.RestClientException;
1415
import org.springframework.web.client.RestTemplate;
1516

@@ -128,4 +129,27 @@ public Account getAccountByUri(String uri) {
128129
return getAccountById(Account.getId(uri));
129130
}
130131

132+
/**
133+
* Updates account
134+
* @param account to be updated
135+
* @throws AccountNotFoundException when account for given uri can't be found
136+
*/
137+
public void updateAccount(Account account) {
138+
notNull(account, "account");
139+
140+
try {
141+
final MappingJacksonValue jacksonValue = new MappingJacksonValue(account);
142+
jacksonValue.setSerializationView(Account.UpdateView.class);
143+
restTemplate.put(account.getUri(), jacksonValue);
144+
} catch (GoodDataRestException e) {
145+
if (HttpStatus.NOT_FOUND.value() == e.getStatusCode()) {
146+
throw new AccountNotFoundException(account.getUri(), e);
147+
} else {
148+
throw e;
149+
}
150+
} catch (GoodDataException e) {
151+
throw new GoodDataException("Unable to update account", e);
152+
}
153+
}
154+
131155
}

src/test/java/com/gooddata/account/AccountServiceAT.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@ public void getAccount() {
5656
}
5757

5858
@Test(groups = "isolated_domain", dependsOnMethods = "getAccount")
59+
public void updateAccount() throws Exception {
60+
final String newName = "Petra";
61+
account.setFirstName(newName);
62+
63+
accountService.updateAccount(account);
64+
65+
Account accountByUri = accountService.getAccountByUri(account.getUri());
66+
67+
assertThat(accountByUri.getFirstName(), is(newName));
68+
}
69+
70+
@Test(groups = "isolated_domain", dependsOnMethods = "updateAccount")
5971
public void removeAccount() {
6072
accountService.removeAccount(account);
6173
account = null;

src/test/java/com/gooddata/account/AccountServiceIT.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414

1515
import static com.gooddata.util.ResourceUtils.readFromResource;
1616
import static com.gooddata.util.ResourceUtils.readObjectFromResource;
17+
import static com.gooddata.util.ResourceUtils.readStringFromResource;
1718
import static net.jadler.Jadler.onRequest;
19+
import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
1820
import static org.hamcrest.MatcherAssert.assertThat;
1921
import static org.hamcrest.Matchers.notNullValue;
2022
import static org.hamcrest.core.Is.is;
@@ -23,6 +25,7 @@ public class AccountServiceIT extends AbstractGoodDataIT {
2325

2426
private static final String CREATE_ACCOUNT = "/account/create-account.json";
2527
private static final String ACCOUNT = "/account/account.json";
28+
private static final String ACCOUNT_UPDATE = "/account/update-account.json";
2629
private static final String ACCOUNT_ID = "ID";
2730
private static final String ACCOUNT_URI = Account.TEMPLATE.expand(ACCOUNT_ID).toString();
2831
private static final String CURRENT_ACCOUNT_URI = Account.TEMPLATE.expand(Account.CURRENT_ID).toString();
@@ -191,4 +194,40 @@ public void shouldFailToFindAccount() {
191194
gd.getAccountService().getAccountById(ACCOUNT_ID);
192195
}
193196

197+
@Test(expectedExceptions = AccountNotFoundException.class)
198+
public void shouldFailOnUpdateNonExistentAccount() {
199+
onRequest()
200+
.havingMethodEqualTo("GET")
201+
.havingPathEqualTo(ACCOUNT_URI)
202+
.respond()
203+
.withStatus(404);
204+
205+
gd.getAccountService().updateAccount(account);
206+
}
207+
208+
@Test
209+
public void shouldUpdateAccount() throws Exception {
210+
onRequest()
211+
.havingMethodEqualTo("PUT")
212+
.havingPathEqualTo(ACCOUNT_URI)
213+
.havingBody(jsonEquals(readStringFromResource(ACCOUNT_UPDATE)))
214+
.respond()
215+
.withStatus(200);
216+
217+
final Account toBeUpdated = readObjectFromResource(ACCOUNT, Account.class);
218+
219+
final String newFirstName = "newFirstName2";
220+
final String newEmail = "[email protected]";
221+
final String newPass = "password2";
222+
final String newLastName = "Muhehe2";
223+
224+
toBeUpdated.setFirstName(newFirstName);
225+
toBeUpdated.setEmail(newEmail);
226+
toBeUpdated.setPassword(newPass);
227+
toBeUpdated.setVerifyPassword(newPass);
228+
toBeUpdated.setLastName(newLastName);
229+
230+
gd.getAccountService().updateAccount(toBeUpdated);
231+
}
232+
194233
}

src/test/java/com/gooddata/account/AccountTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313
import static org.hamcrest.CoreMatchers.is;
1414
import static org.hamcrest.CoreMatchers.notNullValue;
1515
import static org.hamcrest.MatcherAssert.assertThat;
16+
import static org.hamcrest.Matchers.contains;
1617
import static org.hamcrest.text.MatchesPattern.matchesPattern;
1718

19+
import java.util.Arrays;
20+
1821
public class AccountTest {
1922

2023
private static final String MAIL = "[email protected]";
2124
private static final String FIRST_NAME = "Blah";
2225
private static final String LAST_NAME = "Muhehe";
26+
private static final String IP = "1.2.3.4/32";
2327

2428
@SuppressWarnings("deprecation")
2529
@Test
@@ -33,11 +37,13 @@ public void testDeserialize() throws Exception {
3337
assertThat(account.getUri(), is("/gdc/account/profile/ID"));
3438
assertThat(account.getProjectsLink(), is("/gdc/account/profile/ID/projects"));
3539
assertThat(account.getProjectsUri(), is("/gdc/account/profile/ID/projects"));
40+
assertThat(account.getIpWhitelist(), contains(IP));
3641
}
3742

3843
@Test
3944
public void testSerialization() {
4045
final Account account = new Account(FIRST_NAME, LAST_NAME, null);
46+
account.setIpWhitelist(Arrays.asList("1.2.3.4/32"));
4147
assertThat(account, jsonEquals(resource("account/account-input.json")));
4248
}
4349

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"accountSetting" : {
33
"firstName" : "Blah",
4-
"lastName" : "Muhehe"
4+
"lastName" : "Muhehe",
5+
"ipWhitelist" : ["1.2.3.4/32"]
56
}
67
}

src/test/resources/account/account.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"updated" : "2013-12-17 19:16:09",
1414
"lastName" : "Muhehe",
1515
"phoneNumber" : "123",
16+
"ipWhitelist" : ["1.2.3.4/32"],
1617
"links" : {
1718
"self" : "/gdc/account/profile/ID",
1819
"projects" : "/gdc/account/profile/ID/projects"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"accountSetting" : {
3+
"email": "[email protected]",
4+
"password": "password2",
5+
"verifyPassword": "password2",
6+
"firstName" : "newFirstName2",
7+
"lastName" : "Muhehe2",
8+
"ipWhitelist" : ["1.2.3.4/32"]
9+
}
10+
}

0 commit comments

Comments
 (0)