Browse Source
Merge remote-tracking branch 'origin/feat-loginClient' into pr-loginClient
Merge remote-tracking branch 'origin/feat-loginClient' into pr-loginClient
# Conflicts: # fh.fd.ci.server/src/main/java/de/fd/fh/server/access/web/AccessController.javapr-loginClient
Steffen Nitschke
4 years ago
8 changed files with 170 additions and 13 deletions
-
6fh.fd.ci.client/build.gradle
-
26fh.fd.ci.client/src/main/java/de/fd/fh/network/AccessClient.java
-
29fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java
-
96fh.fd.ci.client/src/test/java/de/fd/fh/network/AccessClientTest.java
-
14fh.fd.ci.server/src/main/java/de/fd/fh/server/access/AccessService.java
-
4fh.fd.ci.server/src/main/java/de/fd/fh/server/access/web/AccessController.java
-
6fh.fd.ci.server/src/test/java/de/fd/fh/server/access/AccessServiceTest.java
-
2fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/LoginResponse.java
@ -0,0 +1,26 @@ |
|||
package de.fd.fh.network; |
|||
|
|||
import de.fd.fh.shared.Utils; |
|||
import de.fd.fh.shared.network.messages.LoginResponse; |
|||
import de.fd.fh.shared.network.messages.RegistrateRequest; |
|||
import feign.Headers; |
|||
import feign.Param; |
|||
import feign.RequestLine; |
|||
import feign.Response; |
|||
|
|||
public interface AccessClient |
|||
{ |
|||
@RequestLine("POST /accounts/registrate") |
|||
Response registrate(RegistrateRequest request); |
|||
|
|||
@RequestLine("POST /accounts/login") |
|||
@Headers(Utils.AUTHENTICATION_HEADER + ":Basic {authToken}") |
|||
LoginResponse login(@Param("authToken") final String authenticationHeader); |
|||
|
|||
@RequestLine("POST /accounts/logout") |
|||
@Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") |
|||
Response logout(@Param("authToken") final String authenticationHeader); |
|||
|
|||
@RequestLine("DELETE /accounts/{playerId}") |
|||
Response deletePlayer(@Param("playerId") final String playerId); |
|||
} |
@ -0,0 +1,29 @@ |
|||
package de.fd.fh.network; |
|||
|
|||
import feign.Feign; |
|||
import feign.gson.GsonDecoder; |
|||
import feign.gson.GsonEncoder; |
|||
import feign.okhttp.OkHttpClient; |
|||
import lombok.Getter; |
|||
|
|||
@Getter |
|||
public class FeignClients |
|||
{ |
|||
private static final String BASE_URL = "http://localhost:4567"; |
|||
|
|||
private AccessClient accessClient; |
|||
|
|||
public FeignClients() |
|||
{ |
|||
accessClient = buildClient(AccessClient.class); |
|||
} |
|||
|
|||
<T> T buildClient(final Class<T> client) |
|||
{ |
|||
return Feign.builder() |
|||
.client(new OkHttpClient()) |
|||
.encoder(new GsonEncoder()) |
|||
.decoder(new GsonDecoder()) |
|||
.target(client, BASE_URL); |
|||
} |
|||
} |
@ -0,0 +1,96 @@ |
|||
package de.fd.fh.network; |
|||
|
|||
import de.fd.fh.shared.Utils; |
|||
import de.fd.fh.shared.network.messages.LoginResponse; |
|||
import de.fd.fh.shared.network.messages.RegistrateRequest; |
|||
import feign.Feign; |
|||
import feign.Request; |
|||
import feign.Response; |
|||
import feign.gson.GsonDecoder; |
|||
import feign.gson.GsonEncoder; |
|||
import feign.mock.HttpMethod; |
|||
import feign.mock.MockClient; |
|||
import feign.mock.MockTarget; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
import static org.junit.jupiter.api.Assertions.*; |
|||
|
|||
class AccessClientTest |
|||
{ |
|||
private AccessClient client; |
|||
private MockClient mockClient; |
|||
|
|||
@BeforeEach |
|||
void before() |
|||
{ |
|||
mockClient = new MockClient(); |
|||
|
|||
client = Feign.builder() |
|||
.decoder(new GsonDecoder()) |
|||
.encoder(new GsonEncoder()) |
|||
.client(mockClient) |
|||
.target(new MockTarget<>(AccessClient.class)); |
|||
} |
|||
|
|||
@Test |
|||
void testRegistrate() |
|||
{ |
|||
mockClient.ok(HttpMethod.POST, "/accounts/registrate"); |
|||
|
|||
final RegistrateRequest request = RegistrateRequest.of("TestName", "TestPassword"); |
|||
|
|||
final Response result = client.registrate(request); |
|||
|
|||
assertEquals(200, result.status(), "Should return status code 200."); |
|||
|
|||
mockClient.verifyStatus(); |
|||
} |
|||
|
|||
@Test |
|||
void testLogin() |
|||
{ |
|||
mockClient |
|||
.ok(HttpMethod.POST, "/accounts/login", |
|||
"{\n" + |
|||
" \"name\":\"testName\",\n" + |
|||
" \"userId\": \"12345\",\n" + |
|||
" \"token\": \"testToken\"\n" + |
|||
"}" |
|||
); |
|||
final LoginResponse result = client.login("testToken"); |
|||
|
|||
final Request request = mockClient.verifyOne(HttpMethod.POST, "/accounts/login"); |
|||
|
|||
assertNotNull(result); |
|||
assertEquals("testName", result.getName()); |
|||
assertEquals("12345", result.getUserId()); |
|||
assertEquals("testToken", result.getToken()); |
|||
|
|||
assertTrue(request.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().isPresent(), |
|||
"Should have auth header"); |
|||
final String authHeader = request.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().get(); |
|||
|
|||
assertEquals("Basic testToken", authHeader, "Should use given token."); |
|||
} |
|||
|
|||
@Test |
|||
void testLogout() |
|||
{ |
|||
mockClient.ok(HttpMethod.POST, "/accounts/logout"); |
|||
|
|||
final Response result = client.logout("testToken"); |
|||
|
|||
assertEquals(200, result.status(), "Should return status code 200."); |
|||
} |
|||
|
|||
@Test |
|||
void testDeletePlayer() |
|||
{ |
|||
mockClient.ok(HttpMethod.DELETE, "/accounts/12345"); |
|||
|
|||
final Response result = client.deletePlayer("12345"); |
|||
|
|||
assertEquals(200, result.status(), "Should return status code 200."); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue