diff --git a/src/main/java/com/example/HelloModel.java b/src/main/java/com/example/HelloModel.java index b3692844..7e0f7186 100644 --- a/src/main/java/com/example/HelloModel.java +++ b/src/main/java/com/example/HelloModel.java @@ -52,7 +52,14 @@ public void sendMessage() { } public void receiveMessage() { - connection.receive(m->Platform.runLater(()->messages.add(m))); + connection.receive(m-> { + try { + Platform.runLater(()->messages.add(m)); + } catch (IllegalStateException e) { + messages.add(m); + } + + }); } public void sendFile(File file) { diff --git a/src/main/java/com/example/NtfyConnectionImpl.java b/src/main/java/com/example/NtfyConnectionImpl.java index 77bbc928..51615c4f 100644 --- a/src/main/java/com/example/NtfyConnectionImpl.java +++ b/src/main/java/com/example/NtfyConnectionImpl.java @@ -89,7 +89,7 @@ public boolean sendFile(File file){ .PUT(HttpRequest.BodyPublishers.ofFile(file.toPath())) .build(); - http.sendAsync(request, HttpResponse.BodyHandlers.discarding()); + http.send(request, HttpResponse.BodyHandlers.discarding()); return true; } catch (Exception e) { diff --git a/src/test/java/com/example/HelloModelTest.java b/src/test/java/com/example/HelloModelTest.java index aaf7a8aa..8bb367fb 100644 --- a/src/test/java/com/example/HelloModelTest.java +++ b/src/test/java/com/example/HelloModelTest.java @@ -6,6 +6,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.io.File; +import java.io.IOException; + import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.assertj.core.api.Assertions.assertThat; @@ -33,13 +36,96 @@ void sendMessageToFakeServer(WireMockRuntimeInfo wmRuntimeInfo) { var con = new NtfyConnectionImpl("http://localhost:" + wmRuntimeInfo.getHttpPort()); var model = new HelloModel(con); model.setMessageToSend("Hello World"); - stubFor(post("/mytopic").willReturn(ok())); + stubFor(post("/adam").willReturn(ok())); model.sendMessage(); // Verify call made to server - verify(postRequestedFor(urlEqualTo("/mytopic")) + verify(postRequestedFor(urlEqualTo("/adam")) .withRequestBody(matching("Hello World"))); } + @Test + @DisplayName("Given file when calling sendFile then connection.sendFile should be called") + void sendFileCallConnectionSendFile() { + var spy = new NtfyConnectionSpy(); + var model = new HelloModel(spy); + + File file = new File("dummy.txt"); + model.sendFile(file); + + assertThat(spy.sentFile).isEqualTo(file); + } + + @Test + @DisplayName("sendFile should upload file to the server using PUT") + void sendFileToFakeServer(WireMockRuntimeInfo wmRuntimeInfo) throws Exception { + var con = new NtfyConnectionImpl("http://localhost:" + wmRuntimeInfo.getHttpPort()); + var model = new HelloModel(con); + + File temp = File.createTempFile("upload_test", ".txt"); + + stubFor(put("/adam").willReturn(ok())); + + model.sendFile(temp); + + verify(putRequestedFor(urlEqualTo("/adam"))); + + } + + @Test + @DisplayName("Model should receive messages when connection invokes handler") + void receiveMessageShouldAddToModelViewHander(){ + var spy = new NtfyConnectionSpy(); + var model = new HelloModel(spy); + + NtfyMessageDto incoming = new NtfyMessageDto( + "123", + 1000, + 0, + "message", + "adam", + "this is a test hehehe", + null + ); + + spy.simulateIncoming(incoming); + + assertThat(model.getMessages()).containsExactly(incoming); + } + + @Test + @DisplayName("Model constructor should register receive handler on connection") + void constructorShouldRegisterHandler() { + + var spy = new NtfyConnectionSpy(); + var model = new HelloModel(spy); + + assertThat(spy.handler).isNotNull(); + } + + @Test + @DisplayName("messageToSendProperty should update when setting message") + void messagePropertyShouldUpdate() { + + var spy = new NtfyConnectionSpy(); + var model = new HelloModel(spy); + + model.setMessageToSend("Hello!"); + + assertThat(model.getMessageToSend()).isEqualTo("Hello!"); + } + + @Test + @DisplayName("getGreeting should return the expected greeting text") + void greetingShouldBeCorrect() { + + var model = new HelloModel(new NtfyConnectionSpy()); + + assertThat(model.getGreeting()).isEqualTo("Chat Client by Adam"); + } + + + + } \ No newline at end of file diff --git a/src/test/java/com/example/NtfyConnectionSpy.java b/src/test/java/com/example/NtfyConnectionSpy.java index eac8d7f0..f8f7f9a1 100644 --- a/src/test/java/com/example/NtfyConnectionSpy.java +++ b/src/test/java/com/example/NtfyConnectionSpy.java @@ -1,18 +1,33 @@ package com.example; +import java.io.File; import java.util.function.Consumer; public class NtfyConnectionSpy implements NtfyConnection { String message; + File sentFile; + Consumer handler; + @Override public boolean send(String message) { this.message = message; return true; } + public boolean sendFile(File file){ + this.sentFile = file; + return true; + } + @Override public void receive(Consumer messageHandler) { + this.handler = messageHandler; + } + public void simulateIncoming(NtfyMessageDto message){ + if (handler !=null){ + handler.accept(message); + } } }