Skip to content

Commit 68c9192

Browse files
committed
Add comprehensive test coverage and documentation for updateCredential method
- Add test cases for updateCredential method including null parameter validation - Add comprehensive client credential management documentation to EXAMPLES.md - Include examples for all credential CRUD operations with required scopes - Document the new updateCredential functionality with proper usage examples
1 parent 2b522cf commit 68c9192

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

EXAMPLES.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- [HTTP Client configuration](#http-client-configuration)
55
- [Verifying an ID token](#verifying-an-id-token)
66
- [Organizations](#organizations)
7+
- [Client credential management](#client-credential-management)
78
- [Asynchronous operations](#asynchronous-operations)
89

910
## Error handling
@@ -131,6 +132,59 @@ String url = auth.authorizeUrl("https://me.auth0.com/callback")
131132
.build();
132133
```
133134

135+
## Client credential management
136+
137+
The SDK provides comprehensive support for managing client credentials used for machine-to-machine authentication and API access.
138+
139+
### List client credentials
140+
141+
```java
142+
ManagementAPI mgmt = ManagementAPI.newBuilder("{YOUR_DOMAIN}", "{YOUR_API_TOKEN}").build();
143+
Request<List<Credential>> request = mgmt.clients().listCredentials("{CLIENT_ID}");
144+
List<Credential> credentials = request.execute().getBody();
145+
```
146+
147+
### Get a specific client credential
148+
149+
```java
150+
Request<Credential> request = mgmt.clients().getCredential("{CLIENT_ID}", "{CREDENTIAL_ID}");
151+
Credential credential = request.execute().getBody();
152+
```
153+
154+
### Create a new client credential
155+
156+
```java
157+
Credential newCredential = new Credential("public_key", "{PEM_CONTENT}");
158+
newCredential.setName("My API Credential");
159+
Request<Credential> request = mgmt.clients().createCredential("{CLIENT_ID}", newCredential);
160+
Credential createdCredential = request.execute().getBody();
161+
```
162+
163+
### Update an existing client credential
164+
165+
```java
166+
Credential updates = new Credential();
167+
updates.setName("Updated credential name");
168+
// Note: expires_at can also be updated by setting a Date object
169+
Request<Credential> request = mgmt.clients().updateCredential("{CLIENT_ID}", "{CREDENTIAL_ID}", updates);
170+
Credential updatedCredential = request.execute().getBody();
171+
```
172+
173+
### Delete a client credential
174+
175+
```java
176+
Request<Void> request = mgmt.clients().deleteCredential("{CLIENT_ID}", "{CREDENTIAL_ID}");
177+
request.execute();
178+
```
179+
180+
**Required Scopes**:
181+
- `read:client_credentials` - for listing and getting credentials
182+
- `create:client_credentials` - for creating new credentials
183+
- `update:client_credentials` - for updating existing credentials
184+
- `delete:client_credentials` - for deleting credentials
185+
186+
For more information, see the [Auth0 Management API documentation](https://auth0.com/docs/api/management/v2/clients).
187+
134188
## Asynchronous operations
135189

136190
Requests can be executed asynchronously, using the `executeAsync()` method, which returns a `CompletableFuture<T>`.

src/test/java/com/auth0/client/mgmt/ClientsEntityTest.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,4 +426,47 @@ public void shouldThrowOnDeleteCredentialsWithNullCredentialId() {
426426
() -> api.clients().deleteCredential("clientId", null),
427427
"'credential id' cannot be null!");
428428
}
429+
430+
@Test
431+
public void shouldUpdateClientCredential() throws Exception {
432+
Credential credential = new Credential();
433+
credential.setName("Updated credential name");
434+
Request<Credential> request = api.clients().updateCredential("clientId", "credId", credential);
435+
assertThat(request, is(notNullValue()));
436+
437+
server.jsonResponse(MGMT_CLIENT_CREDENTIAL, 200);
438+
Credential response = request.execute().getBody();
439+
RecordedRequest recordedRequest = server.takeRequest();
440+
441+
assertThat(recordedRequest, hasMethodAndPath(HttpMethod.PATCH, "/api/v2/clients/clientId/credentials/credId"));
442+
assertThat(recordedRequest, hasHeader("Content-Type", "application/json"));
443+
assertThat(recordedRequest, hasHeader("Authorization", "Bearer apiToken"));
444+
445+
Map<String, Object> body = bodyFromRequest(recordedRequest);
446+
assertThat(body.size(), is(1));
447+
assertThat(body, hasEntry("name", "Updated credential name"));
448+
449+
assertThat(response, is(notNullValue()));
450+
}
451+
452+
@Test
453+
public void shouldThrowOnUpdateCredentialWithNullClientId() {
454+
verifyThrows(IllegalArgumentException.class,
455+
() -> api.clients().updateCredential(null, "credId", new Credential()),
456+
"'client id' cannot be null!");
457+
}
458+
459+
@Test
460+
public void shouldThrowOnUpdateCredentialWithNullCredentialId() {
461+
verifyThrows(IllegalArgumentException.class,
462+
() -> api.clients().updateCredential("clientId", null, new Credential()),
463+
"'credential id' cannot be null!");
464+
}
465+
466+
@Test
467+
public void shouldThrowOnUpdateCredentialWithNullCredential() {
468+
verifyThrows(IllegalArgumentException.class,
469+
() -> api.clients().updateCredential("clientId", "credId", null),
470+
"'credential' cannot be null!");
471+
}
429472
}

0 commit comments

Comments
 (0)