diff --git a/fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java b/fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java index 16ce86d..9dc77f0 100644 --- a/fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java +++ b/fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java @@ -12,10 +12,12 @@ public class FeignClients private static final String BASE_URL = "http://localhost:4567"; private AccessClient accessClient; + private UserClient userClient; public FeignClients() { accessClient = buildClient(AccessClient.class); + userClient = buildClient(UserClient.class); } T buildClient(final Class client) diff --git a/fh.fd.ci.client/src/main/java/de/fd/fh/network/UserClient.java b/fh.fd.ci.client/src/main/java/de/fd/fh/network/UserClient.java new file mode 100644 index 0000000..29eaa80 --- /dev/null +++ b/fh.fd.ci.client/src/main/java/de/fd/fh/network/UserClient.java @@ -0,0 +1,32 @@ +package de.fd.fh.network; + +import de.fd.fh.shared.Utils; +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.PlayerResponse; +import de.fd.fh.shared.network.messages.UserRequest; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +public interface UserClient +{ + @RequestLine("POST /users") + @Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") + PlayerResponse updatePlayer( + @Param("authToken") final String authenticationHeader, + final ChangeUserRequest request + ); + + @RequestLine("GET /users/{userId}") + @Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") + UserRequest getShortPlayer( + @Param("authToken") final String authenticationHeader, + @Param("userId") final String userId + ); + + @RequestLine("GET /users") + @Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") + PlayerResponse getCurrentPlayer( + @Param("authToken") final String authenticationHeader + ); +} diff --git a/fh.fd.ci.client/src/test/java/de/fd/fh/network/FeignClientsTest.java b/fh.fd.ci.client/src/test/java/de/fd/fh/network/FeignClientsTest.java new file mode 100644 index 0000000..629286b --- /dev/null +++ b/fh.fd.ci.client/src/test/java/de/fd/fh/network/FeignClientsTest.java @@ -0,0 +1,17 @@ +package de.fd.fh.network; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class FeignClientsTest +{ + @Test + void testInitFeignClients() + { + final FeignClients feignClients = new FeignClients(); + + assertNotNull(feignClients.getAccessClient()); + assertNotNull(feignClients.getUserClient()); + } +} \ No newline at end of file diff --git a/fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java b/fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java new file mode 100644 index 0000000..b26ef93 --- /dev/null +++ b/fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java @@ -0,0 +1,110 @@ +package de.fd.fh.network; + +import de.fd.fh.shared.Utils; +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.PlayerResponse; +import de.fd.fh.shared.network.messages.UserRequest; +import feign.Feign; +import feign.Request; +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 UserClientTest +{ + private UserClient client; + private MockClient mockClient; + + @BeforeEach + void before() + { + mockClient = new MockClient(); + + client = Feign.builder() + .decoder(new GsonDecoder()) + .encoder(new GsonEncoder()) + .client(mockClient) + .target(new MockTarget<>(UserClient.class)); + } + + @Test + void updatePlayer() + { + mockClient.ok(HttpMethod.POST, "/users", + "{\n" + + " \"id\": {\n" + + " \"identifier\":\"12345\"\n" + + " },\n" + + " \"name\":\"TestName\"\n" + + "}"); + + final ChangeUserRequest request = new ChangeUserRequest( + "TestName", + "TestPassword"); + + final PlayerResponse response = client.updatePlayer("TestAuthHeader", request); + + assertNotNull(response); + assertEquals("TestName", response.getName()); + assertEquals("12345", response.getId().getIdentifier()); + + final Request sended = mockClient.verifyOne(HttpMethod.POST, "/users"); + + assertTrue(sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().isPresent()); + assertEquals("Bearer TestAuthHeader", + sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().get()); + } + + @Test + void getShortPlayerTest() + { + mockClient.ok(HttpMethod.GET, "/users/12345", + "{\n" + + " \"id\":\"12345\",\n" + + " \"name\":\"TestName\"\n" + + "}"); + + final UserRequest response = client.getShortPlayer("TestAuthHeader", "12345"); + + assertNotNull(response); + assertEquals("TestName", response.getName()); + assertEquals("12345", response.getId()); + + final Request sended = mockClient.verifyOne(HttpMethod.GET, "/users/12345"); + + assertTrue(sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().isPresent()); + assertEquals("Bearer TestAuthHeader", + sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().get()); + } + + @Test + void getCurrentPlayerTest() + { + mockClient.ok(HttpMethod.GET, "/users", + "{\n" + + " \"id\":\n" + + " {\n" + + " \"identifier\":\"12345\"\n" + + " },\n" + + " \"name\":\"TestName\"\n" + + "}"); + + final PlayerResponse response = client.getCurrentPlayer("TestAuthHeader"); + + assertNotNull(response); + assertEquals("TestName", response.getName()); + assertEquals("12345", response.getId().getIdentifier()); + + final Request sended = mockClient.verifyOne(HttpMethod.GET, "/users"); + + assertTrue(sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().isPresent()); + assertEquals("Bearer TestAuthHeader", + sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().get()); + } +} \ No newline at end of file diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java index 930a807..eff8f8c 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java @@ -2,8 +2,8 @@ package de.fd.fh.server.user; import de.fd.fh.server.user.events.ChangePasswordEvent; import de.fd.fh.server.user.events.ChangeUserNameEvent; -import de.fd.fh.server.user.web.ChangeUserRequest; -import de.fd.fh.server.user.web.UserRequest; +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.UserRequest; import lombok.RequiredArgsConstructor; import java.util.Observable; diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserController.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserController.java index a264e6b..52e076e 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserController.java +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserController.java @@ -6,6 +6,8 @@ import de.fd.fh.server.access.AccessToken; import de.fd.fh.server.user.User; import de.fd.fh.server.user.UserId; import de.fd.fh.server.user.UserService; +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.UserRequest; import lombok.RequiredArgsConstructor; import spark.Request; import spark.Response; diff --git a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java index 357ef0e..18f29ef 100644 --- a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java +++ b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java @@ -1,7 +1,7 @@ package de.fd.fh.server.user; -import de.fd.fh.server.user.web.ChangeUserRequest; -import de.fd.fh.server.user.web.UserRequest; +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.UserRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; diff --git a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/web/UserControllerTest.java b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/web/UserControllerTest.java index 65bf4ff..684f294 100644 --- a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/web/UserControllerTest.java +++ b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/web/UserControllerTest.java @@ -5,6 +5,7 @@ import de.fd.fh.server.access.AccessToken; import de.fd.fh.server.user.User; import de.fd.fh.server.user.UserId; import de.fd.fh.server.user.UserService; +import de.fd.fh.shared.network.messages.UserRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/ChangeUserRequest.java similarity index 84% rename from fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java rename to fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/ChangeUserRequest.java index a41e949..a45fc3e 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java +++ b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/ChangeUserRequest.java @@ -1,4 +1,4 @@ -package de.fd.fh.server.user.web; +package de.fd.fh.shared.network.messages; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/Identifier.java b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/Identifier.java new file mode 100644 index 0000000..deafda1 --- /dev/null +++ b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/Identifier.java @@ -0,0 +1,12 @@ +package de.fd.fh.shared.network.messages; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class Identifier +{ + private String identifier; +} diff --git a/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/PlayerResponse.java b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/PlayerResponse.java new file mode 100644 index 0000000..1ec5505 --- /dev/null +++ b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/PlayerResponse.java @@ -0,0 +1,13 @@ +package de.fd.fh.shared.network.messages; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public class PlayerResponse +{ + private final Identifier id; + + private String name; +} diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserRequest.java b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/UserRequest.java similarity index 81% rename from fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserRequest.java rename to fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/UserRequest.java index 981861c..77b37ac 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserRequest.java +++ b/fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/UserRequest.java @@ -1,4 +1,4 @@ -package de.fd.fh.server.user.web; +package de.fd.fh.shared.network.messages; import lombok.Getter; import lombok.RequiredArgsConstructor;