Skip to content

Commit 0a233c2

Browse files
lbalmacedahzalaz
authored andcommitted
Handle entry with null as non-existent (#25)
* dont send username on signUp if not required * make ParameterBuilder ignore null parameter values * reformat condition check
1 parent 7e1724b commit 0a233c2

4 files changed

Lines changed: 68 additions & 9 deletions

File tree

auth0/src/main/java/com/auth0/authentication/AuthenticationAPIClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ public DatabaseConnectionRequest<DatabaseUser> createUser(String email, String p
297297
.addPathSegment(SIGN_UP_PATH)
298298
.build();
299299

300-
Map<String, Object> parameters = ParameterBuilder.newBuilder()
300+
final Map<String, Object> parameters = ParameterBuilder.newBuilder()
301301
.set(USERNAME_KEY, username)
302302
.set(EMAIL_KEY, email)
303303
.set(PASSWORD_KEY, password)

auth0/src/main/java/com/auth0/authentication/ParameterBuilder.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,23 +145,31 @@ public ParameterBuilder setSend(PasswordlessType passwordlessType) {
145145
* Sets a parameter
146146
*
147147
* @param key parameter name
148-
* @param value parameter value
148+
* @param value parameter value. A null value will remove the key if present.
149149
* @return itself
150150
*/
151151
public ParameterBuilder set(String key, Object value) {
152-
this.parameters.put(key, value);
152+
if (value == null) {
153+
this.parameters.remove(key);
154+
} else {
155+
this.parameters.put(key, value);
156+
}
153157
return this;
154158
}
155159

156160
/**
157161
* Adds all parameter from a map
158162
*
159-
* @param parameters map with parameters to add
163+
* @param parameters map with parameters to add. Null values will be skipped.
160164
* @return itself
161165
*/
162166
public ParameterBuilder addAll(Map<String, Object> parameters) {
163167
if (parameters != null) {
164-
this.parameters.putAll(parameters);
168+
for (String k : parameters.keySet()) {
169+
if (parameters.get(k) != null) {
170+
this.parameters.put(k, parameters.get(k));
171+
}
172+
}
165173
}
166174
return this;
167175
}

auth0/src/test/java/com/auth0/authentication/AuthenticationAPIClientTest.java

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ public void shouldCreateUserWithoutUsername() throws Exception {
323323

324324
Map<String, String> body = bodyFromRequest(request);
325325
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
326-
assertThat(body, not(hasEntry("username", SUPPORT)));
326+
assertThat(body, not(hasKey("username")));
327327
assertThat(body, hasEntry("password", PASSWORD));
328328

329329
assertThat(callback, hasPayloadOfType(DatabaseUser.class));
@@ -342,7 +342,44 @@ public void shouldCreateUserWithoutUsernameSync() throws Exception {
342342

343343
Map<String, String> body = bodyFromRequest(request);
344344
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
345-
assertThat(body, hasEntry("username", null));
345+
assertThat(body, not(hasKey("username")));
346+
assertThat(body, hasEntry("password", PASSWORD));
347+
348+
assertThat(user, is(notNullValue()));
349+
}
350+
351+
@Test
352+
public void shouldNotSendNullUsernameOnSignUp() throws Exception {
353+
mockAPI.willReturnSuccessfulSignUp();
354+
355+
final MockBaseCallback<DatabaseUser> callback = new MockBaseCallback<>();
356+
client.createUser(SUPPORT_AUTH0_COM, PASSWORD, null)
357+
.start(callback);
358+
359+
final RecordedRequest request = mockAPI.takeRequest();
360+
assertThat(request.getPath(), equalTo("/dbconnections/signup"));
361+
362+
Map<String, String> body = bodyFromRequest(request);
363+
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
364+
assertThat(body, not(hasKey("username")));
365+
assertThat(body, hasEntry("password", PASSWORD));
366+
367+
assertThat(callback, hasPayloadOfType(DatabaseUser.class));
368+
}
369+
370+
@Test
371+
public void shouldNotSendNullUsernameOnSignUpSync() throws Exception {
372+
mockAPI.willReturnSuccessfulSignUp();
373+
374+
final DatabaseUser user = client.createUser(SUPPORT_AUTH0_COM, PASSWORD, null)
375+
.execute();
376+
377+
final RecordedRequest request = mockAPI.takeRequest();
378+
assertThat(request.getPath(), equalTo("/dbconnections/signup"));
379+
380+
Map<String, String> body = bodyFromRequest(request);
381+
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
382+
assertThat(body, not(hasKey("username")));
346383
assertThat(body, hasEntry("password", PASSWORD));
347384

348385
assertThat(user, is(notNullValue()));
@@ -487,7 +524,7 @@ public void shouldSignUpUserWithoutUsername() throws Exception {
487524

488525
Map<String, String> body = bodyFromRequest(request);
489526
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
490-
assertThat(body, not(hasEntry("username", SUPPORT)));
527+
assertThat(body, not(hasKey("username")));
491528
assertThat(body, hasEntry("password", PASSWORD));
492529
assertThat(body, hasEntry("connection", USERNAME_PASSWORD_AUTHENTICATION));
493530

@@ -509,7 +546,7 @@ public void shouldSignUpUserWithoutUsernameSync() throws Exception {
509546

510547
Map<String, String> body = bodyFromRequest(request);
511548
assertThat(body, hasEntry("email", SUPPORT_AUTH0_COM));
512-
assertThat(body, hasEntry("username", null));
549+
assertThat(body, not(hasKey("username")));
513550
assertThat(body, hasEntry("password", PASSWORD));
514551
assertThat(body, hasEntry("connection", USERNAME_PASSWORD_AUTHENTICATION));
515552

auth0/src/test/java/com/auth0/authentication/ParameterBuilderTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,27 @@ public void shouldAddArbitraryEntry() throws Exception {
118118
assertThat(builder.set("key", "value").asDictionary(), hasEntry("key", "value"));
119119
}
120120

121+
@Test
122+
public void shouldNotAddNullEntry() throws Exception {
123+
assertThat(builder.set("key", null).asDictionary(), not(hasEntry("key", null)));
124+
}
125+
121126
@Test
122127
public void shouldAddAllFromDictionary() throws Exception {
123128
Map<String, Object> parameters = new HashMap<>();
124129
parameters.put("key", "value");
125130
assertThat(builder.addAll(parameters).asDictionary(), hasEntry("key", "value"));
126131
}
127132

133+
@Test
134+
public void shouldSkipNullValuesOnAddAllFromDictionary() throws Exception {
135+
Map<String, Object> parameters = new HashMap<>();
136+
parameters.put("key", "value");
137+
parameters.put("null", null);
138+
assertThat(builder.addAll(parameters).asDictionary(), hasEntry("key", "value"));
139+
assertThat(builder.addAll(parameters).asDictionary(), not(hasEntry("null", null)));
140+
}
141+
128142
@Test
129143
public void shouldDoNothingWhenAddingNullParameters() throws Exception {
130144
assertThat(builder.addAll(null).asDictionary(), hasEntry("scope", ParameterBuilder.SCOPE_OPENID));

0 commit comments

Comments
 (0)