From f6afde28f9fd6bb58f40afaa6a873e718124dc8e Mon Sep 17 00:00:00 2001 From: Steffen Nitschke Date: Sun, 31 Jan 2021 20:03:59 +0100 Subject: [PATCH 1/3] add UserClient with updateUser-Method and test --- .../java/de/fd/fh/network/FeignClients.java | 2 + .../java/de/fd/fh/network/UserClient.java | 18 ++++++ .../de/fd/fh/network/FeignClientsTest.java | 17 ++++++ .../java/de/fd/fh/network/UserClientTest.java | 57 +++++++++++++++++++ .../de/fd/fh/server/user/UserService.java | 2 +- .../fd/fh/server/user/web/UserController.java | 1 + .../de/fd/fh/server/user/UserServiceTest.java | 2 +- .../network/messages}/ChangeUserRequest.java | 2 +- .../shared/network/messages/Identifier.java | 12 ++++ .../network/messages/PlayerResponse.java | 13 +++++ 10 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 fh.fd.ci.client/src/main/java/de/fd/fh/network/UserClient.java create mode 100644 fh.fd.ci.client/src/test/java/de/fd/fh/network/FeignClientsTest.java create mode 100644 fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java rename {fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web => fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages}/ChangeUserRequest.java (84%) create mode 100644 fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/Identifier.java create mode 100644 fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages/PlayerResponse.java 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..e928f09 --- /dev/null +++ b/fh.fd.ci.client/src/main/java/de/fd/fh/network/UserClient.java @@ -0,0 +1,18 @@ +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 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 + ); +} 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..b7a2375 --- /dev/null +++ b/fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java @@ -0,0 +1,57 @@ +package de.fd.fh.network; + +import de.fd.fh.shared.network.messages.ChangeUserRequest; +import de.fd.fh.shared.network.messages.PlayerResponse; +import feign.Feign; +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.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +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()); + + mockClient.verifyOne(HttpMethod.POST, "/users"); + } +} \ 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..5aa31a2 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,7 +2,7 @@ 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.shared.network.messages.ChangeUserRequest; import de.fd.fh.server.user.web.UserRequest; import lombok.RequiredArgsConstructor; 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..f276326 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,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.ChangeUserRequest; 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..86b3c7d 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,6 +1,6 @@ package de.fd.fh.server.user; -import de.fd.fh.server.user.web.ChangeUserRequest; +import de.fd.fh.shared.network.messages.ChangeUserRequest; import de.fd.fh.server.user.web.UserRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; 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; +} From 83e1e16946ebd8666c8be8540c0558886301df39 Mon Sep 17 00:00:00 2001 From: Steffen Nitschke Date: Sun, 31 Jan 2021 20:46:59 +0100 Subject: [PATCH 2/3] add getPlayer-Method and test --- .../java/de/fd/fh/network/UserClient.java | 7 ++++ .../java/de/fd/fh/network/UserClientTest.java | 35 +++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) 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 index e928f09..ad4cc77 100644 --- 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 @@ -15,4 +15,11 @@ public interface UserClient @Param("authToken") final String authenticationHeader, final ChangeUserRequest request ); + + @RequestLine("GET /users/{userId}") + @Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") + PlayerResponse getPlayer( + @Param("authToken") final String authenticationHeader, + @Param("userId") final String userId + ); } 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 index b7a2375..f551974 100644 --- 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 @@ -1,8 +1,10 @@ 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 feign.Feign; +import feign.Request; import feign.gson.GsonDecoder; import feign.gson.GsonEncoder; import feign.mock.HttpMethod; @@ -11,8 +13,7 @@ import feign.mock.MockTarget; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; class UserClientTest { @@ -52,6 +53,34 @@ class UserClientTest assertEquals("TestName", response.getName()); assertEquals("12345", response.getId().getIdentifier()); - mockClient.verifyOne(HttpMethod.POST, "/users"); + 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 getPlayerTest() + { + mockClient.ok(HttpMethod.GET, "/users/12345", + "{\n" + + " \"id\": {\n" + + " \"identifier\":\"12345\"\n" + + " },\n" + + " \"name\":\"TestName\"\n" + + "}"); + + final PlayerResponse response = client.getPlayer("TestAuthHeader", "12345"); + + assertNotNull(response); + assertEquals("TestName", response.getName()); + assertEquals("12345", response.getId().getIdentifier()); + + 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()); } } \ No newline at end of file From b9654f8697ca00b2b8a84e776152772a970039aa Mon Sep 17 00:00:00 2001 From: Steffen Nitschke Date: Sun, 31 Jan 2021 21:36:25 +0100 Subject: [PATCH 3/3] add getCurrentPlayer-Method and test and adjust getPlayer-Method --- .../java/de/fd/fh/network/UserClient.java | 9 +++++- .../java/de/fd/fh/network/UserClientTest.java | 32 ++++++++++++++++--- .../de/fd/fh/server/user/UserService.java | 2 +- .../fd/fh/server/user/web/UserController.java | 1 + .../de/fd/fh/server/user/UserServiceTest.java | 2 +- .../server/user/web/UserControllerTest.java | 1 + .../shared/network/messages}/UserRequest.java | 2 +- 7 files changed, 41 insertions(+), 8 deletions(-) rename {fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web => fh.fd.ci.shared/src/main/java/de/fd/fh/shared/network/messages}/UserRequest.java (81%) 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 index ad4cc77..29eaa80 100644 --- 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 @@ -3,6 +3,7 @@ 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; @@ -18,8 +19,14 @@ public interface UserClient @RequestLine("GET /users/{userId}") @Headers(Utils.AUTHENTICATION_HEADER + ":Bearer {authToken}") - PlayerResponse getPlayer( + 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/UserClientTest.java b/fh.fd.ci.client/src/test/java/de/fd/fh/network/UserClientTest.java index f551974..b26ef93 100644 --- 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 @@ -3,6 +3,7 @@ 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; @@ -61,23 +62,46 @@ class UserClientTest } @Test - void getPlayerTest() + void getShortPlayerTest() { mockClient.ok(HttpMethod.GET, "/users/12345", "{\n" + - " \"id\": {\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.getPlayer("TestAuthHeader", "12345"); + 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/12345"); + final Request sended = mockClient.verifyOne(HttpMethod.GET, "/users"); assertTrue(sended.headers().get(Utils.AUTHENTICATION_HEADER).stream().findFirst().isPresent()); assertEquals("Bearer TestAuthHeader", 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 5aa31a2..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 @@ -3,7 +3,7 @@ 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.shared.network.messages.ChangeUserRequest; -import de.fd.fh.server.user.web.UserRequest; +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 f276326..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 @@ -7,6 +7,7 @@ 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 86b3c7d..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.shared.network.messages.ChangeUserRequest; -import de.fd.fh.server.user.web.UserRequest; +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/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;