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