diff --git a/fh.fd.ci.client/build.gradle b/fh.fd.ci.client/build.gradle index 2e0dd87..2593e5e 100644 --- a/fh.fd.ci.client/build.gradle +++ b/fh.fd.ci.client/build.gradle @@ -7,6 +7,12 @@ mainClassName = 'de.fd.fh.ClientApp' dependencies { implementation project(':fh.fd.ci.shared') + + implementation 'io.github.openfeign:feign-okhttp:11.0' + implementation 'io.github.openfeign:feign-gson:11.0' + implementation 'io.github.openfeign:feign-slf4j:11.0' + + testImplementation 'io.github.openfeign:feign-mock:11.0' } javafx { diff --git a/fh.fd.ci.client/src/main/java/de/fd/fh/network/AccessClient.java b/fh.fd.ci.client/src/main/java/de/fd/fh/network/AccessClient.java new file mode 100644 index 0000000..9bfa233 --- /dev/null +++ b/fh.fd.ci.client/src/main/java/de/fd/fh/network/AccessClient.java @@ -0,0 +1,11 @@ +package de.fd.fh.network; + +import de.fd.fh.shared.network.messages.RegistrateRequest; +import feign.RequestLine; +import feign.Response; + +public interface AccessClient +{ + @RequestLine("POST /accounts/registrate") + Response registrate(RegistrateRequest request); +} 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 new file mode 100644 index 0000000..16ce86d --- /dev/null +++ b/fh.fd.ci.client/src/main/java/de/fd/fh/network/FeignClients.java @@ -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 buildClient(final Class client) + { + return Feign.builder() + .client(new OkHttpClient()) + .encoder(new GsonEncoder()) + .decoder(new GsonDecoder()) + .target(client, BASE_URL); + } +} diff --git a/fh.fd.ci.client/src/test/java/de/fd/fh/network/AccessClientTest.java b/fh.fd.ci.client/src/test/java/de/fd/fh/network/AccessClientTest.java new file mode 100644 index 0000000..adb3016 --- /dev/null +++ b/fh.fd.ci.client/src/test/java/de/fd/fh/network/AccessClientTest.java @@ -0,0 +1,46 @@ +package de.fd.fh.network; + +import de.fd.fh.shared.network.messages.RegistrateRequest; +import feign.Feign; +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.assertEquals; + +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(); + } +} \ No newline at end of file