From 4a21b2572912db5bc1cf84a01ed4fbfc110c9dd6 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Thu, 28 Sep 2017 21:01:27 +0200 Subject: [PATCH 01/22] Create first wiremock tests --- build.gradle | 1 + .../matrix/client/AMatrixHttpGetTester.java | 42 +++++++ .../matrix/client/AMatrixHttpPutTester.java | 43 +++++++ .../matrix/client/AMatrixHttpTester.java | 36 ++++++ .../client/MatrixHttpGetTesterSuccessful.java | 49 ++++++++ .../MatrixHttpGetTesterUnsuccessful.java | 60 +++++++++ .../client/MatrixHttpPutTesterSuccessful.java | 16 +++ .../MatrixHttpPutTesterUnsuccessful.java | 59 +++++++++ .../matrix/client/MatrixHttpRoomTest.java | 115 ++++++++++++++++++ .../kamax/matrix/client/MatrixHttpTest.java | 49 ++++++++ .../client/regular/MatrixHttpClientTest.java | 63 ++++++++++ 11 files changed, 533 insertions(+) create mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java create mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java create mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpTest.java create mode 100644 src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java diff --git a/build.gradle b/build.gradle index d67a704..d2db9ad 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,7 @@ dependencies { compile 'com.google.code.gson:gson:2.8.0' testCompile 'junit:junit:4.12' + testCompile "com.github.tomakehurst:wiremock:2.8.0" testRuntimeOnly 'org.slf4j:slf4j-simple:1.7.25' deployerJars "org.apache.maven.wagon:wagon-ssh:2.2" diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java new file mode 100644 index 0000000..7803988 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java @@ -0,0 +1,42 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import java.util.Optional; +import java.util.function.Supplier; + +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + +public abstract class AMatrixHttpGetTester extends AMatrixHttpTester { + protected final Supplier> getMethod; + + public AMatrixHttpGetTester(Supplier> getMethod) { + this.getMethod = getMethod; + } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return get(urlEqualTo(url)); + } +} diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java new file mode 100644 index 0000000..209a109 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java @@ -0,0 +1,43 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import java.util.function.Consumer; + +import static com.github.tomakehurst.wiremock.client.WireMock.put; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + +public abstract class AMatrixHttpPutTester extends AMatrixHttpTester { + protected final Consumer putMethod; + protected final String valueToConsume; + + public AMatrixHttpPutTester(Consumer putMethod, String valueToConsume) { + this.putMethod = putMethod; + this.valueToConsume = valueToConsume; + } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return put(urlEqualTo(url)); + } +} diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java new file mode 100644 index 0000000..47e1e56 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java @@ -0,0 +1,36 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; + +public abstract class AMatrixHttpTester { + public abstract void runTest(); + + protected void setupWiremock(String url, int returnStatus, String returnBody) { + stubFor(createUrlMappingBuilder(url).willReturn(aResponse().withStatus(returnStatus).withBody(returnBody))); + } + + protected abstract MappingBuilder createUrlMappingBuilder(String url); +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java new file mode 100644 index 0000000..3eb6889 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java @@ -0,0 +1,49 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import java.util.Optional; +import java.util.function.Supplier; + +import static org.junit.Assert.assertEquals; + +public class MatrixHttpGetTesterSuccessful extends AMatrixHttpGetTester { + private final Optional expectedResult; + + public MatrixHttpGetTesterSuccessful(Supplier> getMethod, String url, String returnBody, + Optional expectedResult) { + super(getMethod); + this.expectedResult = expectedResult; + setupWiremock(url, 200, returnBody); + } + + public MatrixHttpGetTesterSuccessful(Supplier> getMethod, String url, int resultStatus, + String returnBody, Optional expectedResult) { + super(getMethod); + this.expectedResult = expectedResult; + setupWiremock(url, resultStatus, returnBody); + } + + @Override + public void runTest() { + assertEquals(getMethod.get(), expectedResult); + } +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java new file mode 100644 index 0000000..74e6fb8 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java @@ -0,0 +1,60 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import java.util.Optional; +import java.util.function.Supplier; + +import static org.junit.Assert.fail; + +public class MatrixHttpGetTesterUnsuccessful extends AMatrixHttpGetTester { + + private final String errcode; + private final String error; + + public MatrixHttpGetTesterUnsuccessful(Supplier> getMethod, String url, int returnStatus, + String errcode, String error) { + super(getMethod); + this.errcode = errcode; + this.error = error; + setupWiremock(url, returnStatus, getReturnBody()); + } + + @Override + public void runTest() { + try { + getMethod.get(); + } catch (MatrixClientRequestException e) { + /* + * TODO refactor error handling, so that the error is returned. Afterwards, the error + * values can be checked here by using e.getError(). + */ + // assertThat(e.getMessage(), containsString(errcode)); + // assertThat(e.getMessage(), containsString(error)); + return; + } + fail("In this case, an exception has to be thrown."); + } + + private String getReturnBody() { + return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); + } +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java new file mode 100644 index 0000000..947cdfb --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java @@ -0,0 +1,16 @@ +package io.kamax.matrix.client; + +import java.util.function.Consumer; + +public class MatrixHttpPutTesterSuccessful extends AMatrixHttpPutTester { + public MatrixHttpPutTesterSuccessful(Consumer putMethod, String valueToConsume, String url, + String returnBody) { + super(putMethod, valueToConsume); + setupWiremock(url, 200, returnBody); + } + + @Override + public void runTest() { + putMethod.accept(valueToConsume); + } +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java new file mode 100644 index 0000000..cd5b8bc --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java @@ -0,0 +1,59 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import io.kamax.matrix.MatrixErrorInfo; + +import java.util.Optional; +import java.util.function.Consumer; + +import static org.junit.Assert.*; + +public class MatrixHttpPutTesterUnsuccessful extends AMatrixHttpPutTester { + private final String errcode; + private final String error; + + public MatrixHttpPutTesterUnsuccessful(Consumer putMethod, String valueToConsume, String url, + int returnStatus, String errcode, String error) { + super(putMethod, valueToConsume); + this.errcode = errcode; + this.error = error; + setupWiremock(url, returnStatus, getReturnBody()); + } + + @Override + public void runTest() { + try { + putMethod.accept(valueToConsume); + } catch (MatrixClientRequestException e) { + Optional errorOptional = e.getError(); + assertTrue(errorOptional.isPresent()); + assertEquals(errorOptional.get().getErrcode(), errcode); + assertEquals(errorOptional.get().getError(), error); + return; + } + fail("In this case, an exception has to be thrown."); + } + + private String getReturnBody() { + return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); + } +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java new file mode 100644 index 0000000..d040fe9 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -0,0 +1,115 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import org.junit.Test; + +import java.net.URISyntaxException; +import java.util.Optional; +import java.util.function.Supplier; + +public class MatrixHttpRoomTest extends MatrixHttpTest { + + private static final String ROOM_NAME = "test room"; + private static final String ROOM_ID = "roomId892347847"; + private static final String TOPIC_NAME = "the room's topic"; + + @Test + public void getName() throws URISyntaxException { + MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(createRoomObject()::getName, + createGetNameUrl(), ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'), Optional.of(ROOM_NAME)); + tester.runTest(); + } + + @Test + public void getNameError403() throws URISyntaxException { + error403(createGetNameUrl(), createRoomObject()::getName); + } + + @Test + public void getNameError404() throws URISyntaxException { + error404(createGetNameUrl(), createRoomObject()::getName); + } + + @Test + public void getNameError429() throws URISyntaxException { + error429(createGetNameUrl(), createRoomObject()::getName); + } + + @Test + public void getTopic() throws URISyntaxException { + MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(createRoomObject()::getTopic, + createGetTopicUrl(), ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'), Optional.of(TOPIC_NAME)); + tester.runTest(); + } + + @Test + public void getTopicError403() throws URISyntaxException { + error403(createGetTopicUrl(), createRoomObject()::getTopic); + } + + @Test + public void getTopicError404() throws URISyntaxException { + error404(createGetTopicUrl(), createRoomObject()::getTopic); + } + + @Test + public void getTopic429() throws URISyntaxException { + error429(createGetTopicUrl(), createRoomObject()::getTopic); + } + + private MatrixHttpRoom createRoomObject() throws URISyntaxException { + MatrixClientContext context = createClientContext(); + return new MatrixHttpRoom(context, ROOM_ID); + } + + private String createGetNameUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.name" + getAcessTokenParameter(); + } + + private String createGetTopicUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.topic" + getAcessTokenParameter(); + } + + private void error403(String url, Supplier> methodToTest) throws URISyntaxException { + String errcode = "M_FORBIDDEN"; + String error = "You aren't a member of the room and weren't previously a member of the room."; + + MatrixHttpGetTesterUnsuccessful tester = new MatrixHttpGetTesterUnsuccessful(methodToTest, url, 403, errcode, + error); + tester.runTest(); + } + + private void error404(String url, Supplier> methodToTest) throws URISyntaxException { + MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(methodToTest, url, 404, "{}", + Optional.empty()); + tester.runTest(); + } + + private void error429(String url, Supplier> methodToTest) throws URISyntaxException { + String errcode = "M_LIMIT_EXCEEDED"; + String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; + + new MatrixHttpGetTesterUnsuccessful(methodToTest, url, 429, errcode, error).runTest(); + } + + // TODO join, leave, sendText, sendNotice, invite, getJoinedUsers +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java new file mode 100644 index 0000000..7ee6ead --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -0,0 +1,49 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.junit.WireMockRule; + +import io.kamax.matrix.MatrixID; +import io.kamax.matrix.hs.MatrixHomeserver; + +import org.junit.Rule; + +import java.net.URISyntaxException; + +public class MatrixHttpTest { + private static final String TEST_TOKEN = "testToken"; + protected static final int PORT = 8098; + + @Rule + public WireMockRule wireMockRule = new WireMockRule(PORT); + + protected MatrixClientContext createClientContext() throws URISyntaxException { + String domain = "localhost"; + String baseUrl = "http://localhost:" + PORT; + MatrixHomeserver hs = new MatrixHomeserver(domain, baseUrl); + return new MatrixClientContext(hs, new MatrixID("Testuser", domain), TEST_TOKEN); + } + + protected String getAcessTokenParameter() { + return "?access_token=" + TEST_TOKEN; + } +} diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java new file mode 100644 index 0000000..c6bb82c --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -0,0 +1,63 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client.regular; + +import io.kamax.matrix.client.MatrixClientContext; +import io.kamax.matrix.client.MatrixHttpPutTesterSuccessful; +import io.kamax.matrix.client.MatrixHttpPutTesterUnsuccessful; +import io.kamax.matrix.client.MatrixHttpTest; + +import org.junit.Test; + +import java.net.URISyntaxException; +import java.util.function.Consumer; + +public class MatrixHttpClientTest extends MatrixHttpTest { + + @Test + public void setDisplayname() throws URISyntaxException { + MatrixHttpPutTesterSuccessful tester = new MatrixHttpPutTesterSuccessful(createClientObject()::setDisplayName, + "new name", createSetDisplaynameUrl(), ("{}")); + tester.runTest(); + } + + @Test + public void setDisplaynameError429() throws URISyntaxException { + error429(createSetDisplaynameUrl(), createClientObject()::setDisplayName, "new name"); + } + + private String createSetDisplaynameUrl() throws URISyntaxException { + return "/_matrix/client/r0/profile/" + createClientContext().getUser().getId() + "/displayname" + + getAcessTokenParameter(); + } + + private MatrixHttpClient createClientObject() throws URISyntaxException { + MatrixClientContext context = createClientContext(); + return new MatrixHttpClient(context); + } + + private void error429(String url, Consumer methodToTest, String valueToConsume) throws URISyntaxException { + String errcode = "M_LIMIT_EXCEEDED"; + String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; + + new MatrixHttpPutTesterUnsuccessful(methodToTest, valueToConsume, url, 429, errcode, error).runTest(); + } +} From 42dce74cf75918066aab2812bc822d0026088326 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 29 Sep 2017 16:49:55 +0200 Subject: [PATCH 02/22] Add tests for MatrixApplicationServiceClient --- ...ter.java => AMatrixHttpConsumeTester.java} | 17 ++--- .../matrix/client/MatrixHttpContentTest.java | 25 +++++++ .../MatrixHttpPostTesterSuccessful.java | 26 +++++++ .../MatrixHttpPostTesterUnsuccessful.java | 70 +++++++++++++++++++ .../client/MatrixHttpPutTesterSuccessful.java | 14 +++- .../MatrixHttpPutTesterUnsuccessful.java | 15 +++- .../kamax/matrix/client/MatrixHttpTest.java | 8 ++- .../MatrixApplicationServiceClientTest.java | 62 ++++++++++++++++ 8 files changed, 217 insertions(+), 20 deletions(-) rename src/test/java/io/kamax/matrix/client/{AMatrixHttpPutTester.java => AMatrixHttpConsumeTester.java} (62%) create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java similarity index 62% rename from src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java rename to src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java index 209a109..4f0ca6c 100644 --- a/src/test/java/io/kamax/matrix/client/AMatrixHttpPutTester.java +++ b/src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java @@ -20,24 +20,15 @@ package io.kamax.matrix.client; -import com.github.tomakehurst.wiremock.client.MappingBuilder; - import java.util.function.Consumer; -import static com.github.tomakehurst.wiremock.client.WireMock.put; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -public abstract class AMatrixHttpPutTester extends AMatrixHttpTester { - protected final Consumer putMethod; +public abstract class AMatrixHttpConsumeTester extends AMatrixHttpTester { + protected final Consumer consumeMethod; protected final String valueToConsume; - public AMatrixHttpPutTester(Consumer putMethod, String valueToConsume) { - this.putMethod = putMethod; + public AMatrixHttpConsumeTester(Consumer consumeMethod, String valueToConsume) { + this.consumeMethod = consumeMethod; this.valueToConsume = valueToConsume; } - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return put(urlEqualTo(url)); - } } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java new file mode 100644 index 0000000..491384b --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -0,0 +1,25 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +public class MatrixHttpContentTest extends MatrixHttpTest { + // TODO getType, getData, getFilename +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java new file mode 100644 index 0000000..6314e44 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java @@ -0,0 +1,26 @@ +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import java.util.function.Consumer; + +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + +public class MatrixHttpPostTesterSuccessful extends AMatrixHttpConsumeTester { + public MatrixHttpPostTesterSuccessful(Consumer postMethod, String valueToConsume, String url, + String returnBody) { + super(postMethod, valueToConsume); + setupWiremock(url, 200, returnBody); + } + + @Override + public void runTest() { + consumeMethod.accept(valueToConsume); + } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return post(urlEqualTo(url)); + } +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java new file mode 100644 index 0000000..6f3ce2c --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java @@ -0,0 +1,70 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import io.kamax.matrix.MatrixErrorInfo; + +import java.util.Optional; +import java.util.function.Consumer; + +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + +import static org.junit.Assert.*; + +public class MatrixHttpPostTesterUnsuccessful extends AMatrixHttpConsumeTester { + private final String errcode; + private final String error; + + public MatrixHttpPostTesterUnsuccessful(Consumer postMethod, String valueToConsume, String url, + int returnStatus, String errcode, String error) { + super(postMethod, valueToConsume); + this.errcode = errcode; + this.error = error; + setupWiremock(url, returnStatus, getReturnBody()); + } + + @Override + public void runTest() { + try { + consumeMethod.accept(valueToConsume); + } catch (MatrixClientRequestException e) { + Optional errorOptional = e.getError(); + assertTrue(errorOptional.isPresent()); + assertEquals(errorOptional.get().getErrcode(), errcode); + assertEquals(errorOptional.get().getError(), error); + return; + } + fail("In this case, an exception has to be thrown."); + } + + private String getReturnBody() { + return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); + } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return post(urlEqualTo(url)); + } + +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java index 947cdfb..7d11075 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java @@ -1,8 +1,13 @@ package io.kamax.matrix.client; +import com.github.tomakehurst.wiremock.client.MappingBuilder; + import java.util.function.Consumer; -public class MatrixHttpPutTesterSuccessful extends AMatrixHttpPutTester { +import static com.github.tomakehurst.wiremock.client.WireMock.put; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + +public class MatrixHttpPutTesterSuccessful extends AMatrixHttpConsumeTester { public MatrixHttpPutTesterSuccessful(Consumer putMethod, String valueToConsume, String url, String returnBody) { super(putMethod, valueToConsume); @@ -11,6 +16,11 @@ public MatrixHttpPutTesterSuccessful(Consumer putMethod, String valueToC @Override public void runTest() { - putMethod.accept(valueToConsume); + consumeMethod.accept(valueToConsume); + } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return put(urlEqualTo(url)); } } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java index cd5b8bc..a111504 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java @@ -20,14 +20,19 @@ package io.kamax.matrix.client; +import com.github.tomakehurst.wiremock.client.MappingBuilder; + import io.kamax.matrix.MatrixErrorInfo; import java.util.Optional; import java.util.function.Consumer; +import static com.github.tomakehurst.wiremock.client.WireMock.put; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; + import static org.junit.Assert.*; -public class MatrixHttpPutTesterUnsuccessful extends AMatrixHttpPutTester { +public class MatrixHttpPutTesterUnsuccessful extends AMatrixHttpConsumeTester { private final String errcode; private final String error; @@ -42,7 +47,7 @@ public MatrixHttpPutTesterUnsuccessful(Consumer putMethod, String valueT @Override public void runTest() { try { - putMethod.accept(valueToConsume); + consumeMethod.accept(valueToConsume); } catch (MatrixClientRequestException e) { Optional errorOptional = e.getError(); assertTrue(errorOptional.isPresent()); @@ -56,4 +61,10 @@ public void runTest() { private String getReturnBody() { return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); } + + @Override + protected MappingBuilder createUrlMappingBuilder(String url) { + return put(urlEqualTo(url)); + } + } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java index 7ee6ead..ab6ff8f 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -29,18 +29,20 @@ import java.net.URISyntaxException; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; + public class MatrixHttpTest { - private static final String TEST_TOKEN = "testToken"; + protected static final String TEST_TOKEN = "testToken"; protected static final int PORT = 8098; @Rule - public WireMockRule wireMockRule = new WireMockRule(PORT); + public WireMockRule wireMockRule = new WireMockRule(options().port(PORT)); protected MatrixClientContext createClientContext() throws URISyntaxException { String domain = "localhost"; String baseUrl = "http://localhost:" + PORT; MatrixHomeserver hs = new MatrixHomeserver(domain, baseUrl); - return new MatrixClientContext(hs, new MatrixID("Testuser", domain), TEST_TOKEN); + return new MatrixClientContext(hs, new MatrixID("testuser", domain), TEST_TOKEN); } protected String getAcessTokenParameter() { diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java new file mode 100644 index 0000000..b5ebbcf --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -0,0 +1,62 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client.as; + +import io.kamax.matrix.client.*; +import io.kamax.matrix.hs.MatrixHomeserver; + +import org.junit.Test; + +import java.net.URISyntaxException; +import java.util.function.Consumer; + +public class MatrixApplicationServiceClientTest extends MatrixHttpTest { + + @Test + public void createUser() throws URISyntaxException { + MatrixHttpPostTesterSuccessful tester = new MatrixHttpPostTesterSuccessful(createClientObject()::createUser, + "testuser", createUserUrl(), ("{}")); + tester.runTest(); + } + + @Test + public void createUserError429() throws URISyntaxException { + error429(createUserUrl(), createClientObject()::createUser, "testuser"); + } + + private String createUserUrl() throws URISyntaxException { + return "/_matrix/client/r0/register" + getAcessTokenParameter(); + } + + private MatrixApplicationServiceClient createClientObject() throws URISyntaxException { + String domain = "localhost"; + String baseUrl = "http://localhost:" + PORT; + MatrixHomeserver hs = new MatrixHomeserver(domain, baseUrl); + return new MatrixApplicationServiceClient(hs, TEST_TOKEN, "testuser"); + } + + private void error429(String url, Consumer methodToTest, String valueToConsume) throws URISyntaxException { + String errcode = "M_LIMIT_EXCEEDED"; + String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; + + new MatrixHttpPostTesterUnsuccessful(methodToTest, valueToConsume, url, 429, errcode, error).runTest(); + } +} From 5e0df5b490b78674d1c89fcd044d3791a4734b1e Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 18:43:48 +0200 Subject: [PATCH 03/22] Refactor test class structure --- .../client/AMatrixHttpConsumeTester.java | 34 ------ .../matrix/client/AMatrixHttpGetTester.java | 42 ------- .../matrix/client/AMatrixHttpTester.java | 36 ------ .../kamax/matrix/client/ErrorTestRunner.java | 108 ++++++++++++++++++ .../matrix/client/MatrixHttpContentTest.java | 24 ++++ .../client/MatrixHttpGetTesterSuccessful.java | 49 -------- .../MatrixHttpGetTesterUnsuccessful.java | 60 ---------- .../MatrixHttpPostTesterSuccessful.java | 26 ----- .../MatrixHttpPostTesterUnsuccessful.java | 70 ------------ .../client/MatrixHttpPutTesterSuccessful.java | 26 ----- .../MatrixHttpPutTesterUnsuccessful.java | 70 ------------ .../matrix/client/MatrixHttpRoomTest.java | 71 +++++------- .../matrix/client/SuccessTestRunner.java | 44 +++++++ .../MatrixApplicationServiceClientTest.java | 24 ++-- .../client/regular/MatrixHttpClientTest.java | 32 +++--- 15 files changed, 236 insertions(+), 480 deletions(-) delete mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java delete mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java delete mode 100644 src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java create mode 100644 src/test/java/io/kamax/matrix/client/ErrorTestRunner.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java delete mode 100644 src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java create mode 100644 src/test/java/io/kamax/matrix/client/SuccessTestRunner.java diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java deleted file mode 100644 index 4f0ca6c..0000000 --- a/src/test/java/io/kamax/matrix/client/AMatrixHttpConsumeTester.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import java.util.function.Consumer; - -public abstract class AMatrixHttpConsumeTester extends AMatrixHttpTester { - protected final Consumer consumeMethod; - protected final String valueToConsume; - - public AMatrixHttpConsumeTester(Consumer consumeMethod, String valueToConsume) { - this.consumeMethod = consumeMethod; - this.valueToConsume = valueToConsume; - } - -} diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java deleted file mode 100644 index 7803988..0000000 --- a/src/test/java/io/kamax/matrix/client/AMatrixHttpGetTester.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import java.util.Optional; -import java.util.function.Supplier; - -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -public abstract class AMatrixHttpGetTester extends AMatrixHttpTester { - protected final Supplier> getMethod; - - public AMatrixHttpGetTester(Supplier> getMethod) { - this.getMethod = getMethod; - } - - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return get(urlEqualTo(url)); - } -} diff --git a/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java b/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java deleted file mode 100644 index 47e1e56..0000000 --- a/src/test/java/io/kamax/matrix/client/AMatrixHttpTester.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; - -public abstract class AMatrixHttpTester { - public abstract void runTest(); - - protected void setupWiremock(String url, int returnStatus, String returnBody) { - stubFor(createUrlMappingBuilder(url).willReturn(aResponse().withStatus(returnStatus).withBody(returnBody))); - } - - protected abstract MappingBuilder createUrlMappingBuilder(String url); -} diff --git a/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java b/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java new file mode 100644 index 0000000..4e2a71d --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java @@ -0,0 +1,108 @@ +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; + +import io.kamax.matrix.MatrixErrorInfo; + +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.Assert.*; + +public class ErrorTestRunner { + private final int responseStatus; + private final String url; + + private Optional customErrcode = Optional.empty(); + private Optional customError = Optional.empty(); + + public ErrorTestRunner(String url, int responseStatus) { + this.responseStatus = responseStatus; + this.url = url; + } + + public ResponseDefinitionBuilder getResponse() { + return aResponse().withStatus(responseStatus).withBody(getErrorReturnBody()); + } + + public void runGetTest(Supplier method) { + stubFor(get(urlEqualTo(url)).willReturn(getResponse())); + + try { + method.get(); + } catch (MatrixClientRequestException e) { + /* + * TODO refactor error handling, so that the error is returned. Afterwards, the error + * values can be checked here by using e.getError(). + */ + // checkErrorInfo( e); + return; + } + fail("In this case, an exception has to be thrown."); + } + + public void runPostTest(Consumer

method, P parameter) { + stubFor(post(urlEqualTo(url)).willReturn(getResponse())); + runErrorTest(method, parameter); + } + + public void runPutTest(Consumer

method, P parameter) { + stubFor(put(urlEqualTo(url)).willReturn(getResponse())); + runErrorTest(method, parameter); + } + + private void runErrorTest(Consumer

method, P parameter) { + try { + method.accept(parameter); + } catch (MatrixClientRequestException e) { + checkErrorInfo(e); + return; + } + fail("In this case, an exception has to be thrown."); + } + + private void checkErrorInfo(MatrixClientRequestException e) { + Optional errorOptional = e.getError(); + assertTrue(errorOptional.isPresent()); + assertEquals(errorOptional.get().getErrcode(), getErrcode()); + assertEquals(errorOptional.get().getError(), getError()); + } + + private String getErrcode() { + if (customErrcode.isPresent()) { + return customErrcode.get(); + } + + switch (responseStatus) { + case 403: + return "M_FORBIDDEN"; + case 429: + return "M_LIMIT_EXCEEDED"; + default: + return ""; + } + } + + private String getError() { + if (customError.isPresent()) { + return customError.get(); + } + + switch (responseStatus) { + case 403: + return "You aren't a member of the room and weren't previously a member of the room."; + case 429: + return "Too many requests have been sent in a short period of time. Wait a while then try again."; + default: + return ""; + } + } + + private String getErrorReturnBody() { + return ("{'errcode': `" + getErrcode() + "`, " + "error: `" + getError() + "`}").replace('`', '"'); + } + +} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 491384b..83209f6 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -20,6 +20,30 @@ package io.kamax.matrix.client; +import org.junit.Test; + +import java.net.URI; +import java.net.URISyntaxException; + public class MatrixHttpContentTest extends MatrixHttpTest { + URI address = new URI("http://localhost/testAddress.txt"); + + public MatrixHttpContentTest() throws URISyntaxException { + } // TODO getType, getData, getFilename + + @Test + public void isValid() throws URISyntaxException { + String url = createDownloadUrl(); + } + + private MatrixHttpContent createContentObject() throws URISyntaxException { + MatrixClientContext context = createClientContext(); + return new MatrixHttpContent(context, address); + } + + private String createDownloadUrl() { + return "/_matrix/client/r0/download/" + address.getHost() + address.getPath() + getAcessTokenParameter(); + } + } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java deleted file mode 100644 index 3eb6889..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterSuccessful.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import java.util.Optional; -import java.util.function.Supplier; - -import static org.junit.Assert.assertEquals; - -public class MatrixHttpGetTesterSuccessful extends AMatrixHttpGetTester { - private final Optional expectedResult; - - public MatrixHttpGetTesterSuccessful(Supplier> getMethod, String url, String returnBody, - Optional expectedResult) { - super(getMethod); - this.expectedResult = expectedResult; - setupWiremock(url, 200, returnBody); - } - - public MatrixHttpGetTesterSuccessful(Supplier> getMethod, String url, int resultStatus, - String returnBody, Optional expectedResult) { - super(getMethod); - this.expectedResult = expectedResult; - setupWiremock(url, resultStatus, returnBody); - } - - @Override - public void runTest() { - assertEquals(getMethod.get(), expectedResult); - } -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java deleted file mode 100644 index 74e6fb8..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpGetTesterUnsuccessful.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import java.util.Optional; -import java.util.function.Supplier; - -import static org.junit.Assert.fail; - -public class MatrixHttpGetTesterUnsuccessful extends AMatrixHttpGetTester { - - private final String errcode; - private final String error; - - public MatrixHttpGetTesterUnsuccessful(Supplier> getMethod, String url, int returnStatus, - String errcode, String error) { - super(getMethod); - this.errcode = errcode; - this.error = error; - setupWiremock(url, returnStatus, getReturnBody()); - } - - @Override - public void runTest() { - try { - getMethod.get(); - } catch (MatrixClientRequestException e) { - /* - * TODO refactor error handling, so that the error is returned. Afterwards, the error - * values can be checked here by using e.getError(). - */ - // assertThat(e.getMessage(), containsString(errcode)); - // assertThat(e.getMessage(), containsString(error)); - return; - } - fail("In this case, an exception has to be thrown."); - } - - private String getReturnBody() { - return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); - } -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java deleted file mode 100644 index 6314e44..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterSuccessful.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import java.util.function.Consumer; - -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -public class MatrixHttpPostTesterSuccessful extends AMatrixHttpConsumeTester { - public MatrixHttpPostTesterSuccessful(Consumer postMethod, String valueToConsume, String url, - String returnBody) { - super(postMethod, valueToConsume); - setupWiremock(url, 200, returnBody); - } - - @Override - public void runTest() { - consumeMethod.accept(valueToConsume); - } - - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return post(urlEqualTo(url)); - } -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java deleted file mode 100644 index 6f3ce2c..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPostTesterUnsuccessful.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import io.kamax.matrix.MatrixErrorInfo; - -import java.util.Optional; -import java.util.function.Consumer; - -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -import static org.junit.Assert.*; - -public class MatrixHttpPostTesterUnsuccessful extends AMatrixHttpConsumeTester { - private final String errcode; - private final String error; - - public MatrixHttpPostTesterUnsuccessful(Consumer postMethod, String valueToConsume, String url, - int returnStatus, String errcode, String error) { - super(postMethod, valueToConsume); - this.errcode = errcode; - this.error = error; - setupWiremock(url, returnStatus, getReturnBody()); - } - - @Override - public void runTest() { - try { - consumeMethod.accept(valueToConsume); - } catch (MatrixClientRequestException e) { - Optional errorOptional = e.getError(); - assertTrue(errorOptional.isPresent()); - assertEquals(errorOptional.get().getErrcode(), errcode); - assertEquals(errorOptional.get().getError(), error); - return; - } - fail("In this case, an exception has to be thrown."); - } - - private String getReturnBody() { - return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); - } - - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return post(urlEqualTo(url)); - } - -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java deleted file mode 100644 index 7d11075..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterSuccessful.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import java.util.function.Consumer; - -import static com.github.tomakehurst.wiremock.client.WireMock.put; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -public class MatrixHttpPutTesterSuccessful extends AMatrixHttpConsumeTester { - public MatrixHttpPutTesterSuccessful(Consumer putMethod, String valueToConsume, String url, - String returnBody) { - super(putMethod, valueToConsume); - setupWiremock(url, 200, returnBody); - } - - @Override - public void runTest() { - consumeMethod.accept(valueToConsume); - } - - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return put(urlEqualTo(url)); - } -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java b/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java deleted file mode 100644 index a111504..0000000 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpPutTesterUnsuccessful.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.MappingBuilder; - -import io.kamax.matrix.MatrixErrorInfo; - -import java.util.Optional; -import java.util.function.Consumer; - -import static com.github.tomakehurst.wiremock.client.WireMock.put; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; - -import static org.junit.Assert.*; - -public class MatrixHttpPutTesterUnsuccessful extends AMatrixHttpConsumeTester { - private final String errcode; - private final String error; - - public MatrixHttpPutTesterUnsuccessful(Consumer putMethod, String valueToConsume, String url, - int returnStatus, String errcode, String error) { - super(putMethod, valueToConsume); - this.errcode = errcode; - this.error = error; - setupWiremock(url, returnStatus, getReturnBody()); - } - - @Override - public void runTest() { - try { - consumeMethod.accept(valueToConsume); - } catch (MatrixClientRequestException e) { - Optional errorOptional = e.getError(); - assertTrue(errorOptional.isPresent()); - assertEquals(errorOptional.get().getErrcode(), errcode); - assertEquals(errorOptional.get().getError(), error); - return; - } - fail("In this case, an exception has to be thrown."); - } - - private String getReturnBody() { - return ("{'errcode': `" + errcode + "`, " + "error: `" + error + "`}").replace('`', '"'); - } - - @Override - protected MappingBuilder createUrlMappingBuilder(String url) { - return put(urlEqualTo(url)); - } - -} diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index d040fe9..f1b136e 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -24,9 +24,9 @@ import java.net.URISyntaxException; import java.util.Optional; -import java.util.function.Supplier; public class MatrixHttpRoomTest extends MatrixHttpTest { + // TODO join, leave, sendText, sendNotice, invite, getJoinedUsers private static final String ROOM_NAME = "test room"; private static final String ROOM_ID = "roomId892347847"; @@ -34,46 +34,59 @@ public class MatrixHttpRoomTest extends MatrixHttpTest { @Test public void getName() throws URISyntaxException { - MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(createRoomObject()::getName, - createGetNameUrl(), ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'), Optional.of(ROOM_NAME)); - tester.runTest(); + getNameSuccessful(Optional.of(ROOM_NAME), 200); } @Test - public void getNameError403() throws URISyntaxException { - error403(createGetNameUrl(), createRoomObject()::getName); + public void getName404() throws URISyntaxException { + getNameSuccessful(Optional.empty(), 404); } @Test - public void getNameError404() throws URISyntaxException { - error404(createGetNameUrl(), createRoomObject()::getName); + public void getNameError403() throws URISyntaxException { + ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetNameUrl(), 403); + runner.runGetTest(createRoomObject()::getName); } @Test public void getNameError429() throws URISyntaxException { - error429(createGetNameUrl(), createRoomObject()::getName); + ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetNameUrl(), 429); + runner.runGetTest(createRoomObject()::getName); + } + + private void getNameSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { + String url = createGetNameUrl(); + String body = ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'); + new SuccessTestRunner<>(url, responseStatus, body).runGetTest(createRoomObject()::getName, expectedResult); } @Test public void getTopic() throws URISyntaxException { - MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(createRoomObject()::getTopic, - createGetTopicUrl(), ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'), Optional.of(TOPIC_NAME)); - tester.runTest(); + getTopicSuccessful(Optional.of(TOPIC_NAME), 200); } @Test - public void getTopicError403() throws URISyntaxException { - error403(createGetTopicUrl(), createRoomObject()::getTopic); + public void getTopic404() throws URISyntaxException { + getTopicSuccessful(Optional.empty(), 404); } @Test - public void getTopicError404() throws URISyntaxException { - error404(createGetTopicUrl(), createRoomObject()::getTopic); + public void getTopicError403() throws URISyntaxException { + ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetTopicUrl(), 403); + runner.runGetTest(createRoomObject()::getTopic); } @Test public void getTopic429() throws URISyntaxException { - error429(createGetTopicUrl(), createRoomObject()::getTopic); + ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetTopicUrl(), 429); + runner.runGetTest(createRoomObject()::getTopic); + } + + private void getTopicSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { + String url = createGetTopicUrl(); + String body = ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'); + + new SuccessTestRunner<>(url, responseStatus, body).runGetTest(createRoomObject()::getTopic, expectedResult); } private MatrixHttpRoom createRoomObject() throws URISyntaxException { @@ -88,28 +101,4 @@ private String createGetNameUrl() { private String createGetTopicUrl() { return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.topic" + getAcessTokenParameter(); } - - private void error403(String url, Supplier> methodToTest) throws URISyntaxException { - String errcode = "M_FORBIDDEN"; - String error = "You aren't a member of the room and weren't previously a member of the room."; - - MatrixHttpGetTesterUnsuccessful tester = new MatrixHttpGetTesterUnsuccessful(methodToTest, url, 403, errcode, - error); - tester.runTest(); - } - - private void error404(String url, Supplier> methodToTest) throws URISyntaxException { - MatrixHttpGetTesterSuccessful tester = new MatrixHttpGetTesterSuccessful(methodToTest, url, 404, "{}", - Optional.empty()); - tester.runTest(); - } - - private void error429(String url, Supplier> methodToTest) throws URISyntaxException { - String errcode = "M_LIMIT_EXCEEDED"; - String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; - - new MatrixHttpGetTesterUnsuccessful(methodToTest, url, 429, errcode, error).runTest(); - } - - // TODO join, leave, sendText, sendNotice, invite, getJoinedUsers } diff --git a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java new file mode 100644 index 0000000..6acd2f3 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java @@ -0,0 +1,44 @@ +package io.kamax.matrix.client; + +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.Assert.assertEquals; + +public class SuccessTestRunner { + private final int responseStatus; + private final String url; + private final String body; + + public SuccessTestRunner(String url, int responseStatus, String body) { + this.responseStatus = responseStatus; + this.url = url; + this.body = body; + } + + public void runGetTest(Supplier method, R expectedResult) { + stubFor(get(urlEqualTo(url)).willReturn(createResponse())); + + assertEquals(method.get(), expectedResult); + } + + public void runPostTest(Consumer

method, P parameter, String verifyBody) { + stubFor(post(urlEqualTo(url)).willReturn(createResponse())); + method.accept(parameter); + verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + } + + public void runPutTest(Consumer

method, P parameter, String verifyBody) { + stubFor(put(urlEqualTo(url)).willReturn(createResponse())); + method.accept(parameter); + verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + } + + private ResponseDefinitionBuilder createResponse() { + return aResponse().withStatus(responseStatus).withBody(body); + } +} diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index b5ebbcf..982f5ab 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -20,26 +20,32 @@ package io.kamax.matrix.client.as; -import io.kamax.matrix.client.*; +import io.kamax.matrix.client.ErrorTestRunner; +import io.kamax.matrix.client.MatrixHttpTest; +import io.kamax.matrix.client.SuccessTestRunner; import io.kamax.matrix.hs.MatrixHomeserver; import org.junit.Test; import java.net.URISyntaxException; -import java.util.function.Consumer; public class MatrixApplicationServiceClientTest extends MatrixHttpTest { @Test public void createUser() throws URISyntaxException { - MatrixHttpPostTesterSuccessful tester = new MatrixHttpPostTesterSuccessful(createClientObject()::createUser, - "testuser", createUserUrl(), ("{}")); - tester.runTest(); + String url = createUserUrl(); + String body = ("{}"); + + String verifyBody = "`username`:`testuser`".replace('`', '"'); + new SuccessTestRunner(url, 200, body).runPostTest(createClientObject()::createUser, "testuser", + verifyBody); + } @Test public void createUserError429() throws URISyntaxException { - error429(createUserUrl(), createClientObject()::createUser, "testuser"); + ErrorTestRunner runner = new ErrorTestRunner<>(createUserUrl(), 429); + runner.runPostTest(createClientObject()::createUser, "testuser"); } private String createUserUrl() throws URISyntaxException { @@ -53,10 +59,4 @@ private MatrixApplicationServiceClient createClientObject() throws URISyntaxExce return new MatrixApplicationServiceClient(hs, TEST_TOKEN, "testuser"); } - private void error429(String url, Consumer methodToTest, String valueToConsume) throws URISyntaxException { - String errcode = "M_LIMIT_EXCEEDED"; - String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; - - new MatrixHttpPostTesterUnsuccessful(methodToTest, valueToConsume, url, 429, errcode, error).runTest(); - } } diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index c6bb82c..fb7bfa6 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -20,28 +20,39 @@ package io.kamax.matrix.client.regular; +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; + +import io.kamax.matrix.client.ErrorTestRunner; import io.kamax.matrix.client.MatrixClientContext; -import io.kamax.matrix.client.MatrixHttpPutTesterSuccessful; -import io.kamax.matrix.client.MatrixHttpPutTesterUnsuccessful; import io.kamax.matrix.client.MatrixHttpTest; import org.junit.Test; import java.net.URISyntaxException; -import java.util.function.Consumer; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; public class MatrixHttpClientTest extends MatrixHttpTest { @Test public void setDisplayname() throws URISyntaxException { - MatrixHttpPutTesterSuccessful tester = new MatrixHttpPutTesterSuccessful(createClientObject()::setDisplayName, - "new name", createSetDisplaynameUrl(), ("{}")); - tester.runTest(); + String url = createSetDisplaynameUrl(); + String body = ("{}"); + + ResponseDefinitionBuilder response = aResponse().withStatus(200).withBody(body); + stubFor(put(urlEqualTo(url)).willReturn(response)); + + String displayname = "new name"; + createClientObject().setDisplayName(displayname); + + String verifyBody = ("`displayname`:`" + displayname + "`").replace('`', '"'); + verify(putRequestedFor(urlEqualTo(createSetDisplaynameUrl())).withRequestBody(containing(verifyBody))); } @Test public void setDisplaynameError429() throws URISyntaxException { - error429(createSetDisplaynameUrl(), createClientObject()::setDisplayName, "new name"); + ErrorTestRunner runner = new ErrorTestRunner<>(createSetDisplaynameUrl(), 429); + runner.runPutTest(createClientObject()::setDisplayName, "new name"); } private String createSetDisplaynameUrl() throws URISyntaxException { @@ -53,11 +64,4 @@ private MatrixHttpClient createClientObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); return new MatrixHttpClient(context); } - - private void error429(String url, Consumer methodToTest, String valueToConsume) throws URISyntaxException { - String errcode = "M_LIMIT_EXCEEDED"; - String error = "Too many requests have been sent in a short period of time. " + "Wait a while then try again."; - - new MatrixHttpPutTesterUnsuccessful(methodToTest, valueToConsume, url, 429, errcode, error).runTest(); - } } From 56a05cd09971582e28e5aa2db547abddd43f9c60 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 22:14:16 +0200 Subject: [PATCH 04/22] Create builders and add some more tests --- .../matrix/client/MatrixHttpContentTest.java | 79 ++++++++++++++++++- .../matrix/client/MatrixHttpRoomTest.java | 10 ++- .../kamax/matrix/client/MatrixHttpTest.java | 3 +- .../kamax/matrix/client/RequestBuilder.java | 14 ++++ .../kamax/matrix/client/ResponseBuilder.java | 65 +++++++++++++++ .../matrix/client/SuccessTestRunner.java | 45 ++++++++--- .../MatrixApplicationServiceClientTest.java | 11 +-- .../resources/wiremock/__files/textfile.txt | 1 + 8 files changed, 203 insertions(+), 25 deletions(-) create mode 100644 src/test/java/io/kamax/matrix/client/RequestBuilder.java create mode 100644 src/test/java/io/kamax/matrix/client/ResponseBuilder.java create mode 100644 src/test/resources/wiremock/__files/textfile.txt diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 83209f6..8fad43b 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -22,19 +22,94 @@ import org.junit.Test; +import java.io.File; +import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Optional; public class MatrixHttpContentTest extends MatrixHttpTest { - URI address = new URI("http://localhost/testAddress.txt"); + private URI address = new URI("mxc://localhost/testAddress.txt"); public MatrixHttpContentTest() throws URISyntaxException { } // TODO getType, getData, getFilename + // TODO test error handling @Test public void isValid() throws URISyntaxException { String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + .setContentType("text/plain"); + + new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::isValid, true); + + } + + public void isValidMissingContentType() throws URISyntaxException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); + new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::isValid, false); + } + + @Test + public void getType() throws URISyntaxException, IOException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + String contentType = "text/plain"; + + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + .setContentType("text/plain");// + + new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getType, contentType); + + } + + @Test + public void getData() throws URISyntaxException, IOException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + byte[] expectedResult = Files.readAllBytes(Paths.get(ClassLoader + .getSystemResource("wiremock" + File.separator + "__files" + File.separator + bodyFile).toURI())); + + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + .setContentType("text/plain"); + + new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getData, expectedResult); + } + + @Test + public void getFilename() throws URISyntaxException, IOException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + .setContentType("text/plain")// + .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); + + new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + + responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`;").replace('`', '"')); + new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + + responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`").replace('`', '"')); + new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + + responseBuilder.putHeader("Content-Disposition", "filename=" + bodyFile); + new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); } private MatrixHttpContent createContentObject() throws URISyntaxException { @@ -43,7 +118,7 @@ private MatrixHttpContent createContentObject() throws URISyntaxException { } private String createDownloadUrl() { - return "/_matrix/client/r0/download/" + address.getHost() + address.getPath() + getAcessTokenParameter(); + return "/_matrix/media/v1/download/" + address.getHost() + address.getPath() + getAcessTokenParameter(); } } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index f1b136e..372dd4e 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -55,9 +55,11 @@ public void getNameError429() throws URISyntaxException { } private void getNameSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { - String url = createGetNameUrl(); String body = ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'); - new SuccessTestRunner<>(url, responseStatus, body).runGetTest(createRoomObject()::getName, expectedResult); + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); + + new SuccessTestRunner, Void>(new RequestBuilder(createGetNameUrl()), responseBuilder) + .runGetTest(createRoomObject()::getName, expectedResult); } @Test @@ -85,8 +87,10 @@ public void getTopic429() throws URISyntaxException { private void getTopicSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { String url = createGetTopicUrl(); String body = ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'); + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); - new SuccessTestRunner<>(url, responseStatus, body).runGetTest(createRoomObject()::getTopic, expectedResult); + new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createRoomObject()::getTopic, expectedResult); } private MatrixHttpRoom createRoomObject() throws URISyntaxException { diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java index ab6ff8f..8fd7ebc 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -34,9 +34,10 @@ public class MatrixHttpTest { protected static final String TEST_TOKEN = "testToken"; protected static final int PORT = 8098; + protected static final String RESOURCE_PATH = "src/test/resources/wiremock"; @Rule - public WireMockRule wireMockRule = new WireMockRule(options().port(PORT)); + public WireMockRule wireMockRule = new WireMockRule(options().port(PORT).usingFilesUnderDirectory(RESOURCE_PATH)); protected MatrixClientContext createClientContext() throws URISyntaxException { String domain = "localhost"; diff --git a/src/test/java/io/kamax/matrix/client/RequestBuilder.java b/src/test/java/io/kamax/matrix/client/RequestBuilder.java new file mode 100644 index 0000000..8376005 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/RequestBuilder.java @@ -0,0 +1,14 @@ +package io.kamax.matrix.client; + +public class RequestBuilder { + private final String url; + + public RequestBuilder(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } + +} diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java new file mode 100644 index 0000000..1180812 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java @@ -0,0 +1,65 @@ +package io.kamax.matrix.client; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class ResponseBuilder { + private final int status; + + private Optional contentType = Optional.empty(); + private Map headers = new HashMap<>(); + private Optional body = Optional.empty(); + private Optional bodyFile = Optional.empty(); + + public ResponseBuilder(int status) { + this.status = status; + } + + public int getStatus() { + return status; + } + + public ResponseBuilder setContentType(String contentType) { + this.contentType = Optional.ofNullable(contentType); + return this; + } + + public Optional getContentType() { + return contentType; + } + + public ResponseBuilder putHeader(String header, String value) { + headers.put(header, value); + return this; + } + + public Map getHeaders() { + return headers; + } + + public ResponseBuilder setBody(String body) { + this.body = Optional.ofNullable(body); + return this; + } + + public Optional getBody() { + return body; + } + + /** + * Careful: Body takes precedence over bodyFile, if both values are set. + * + * @param bodyFile + * Path to the bodyFile + * @return The object itself (builder pattern) + */ + public ResponseBuilder setBodyFile(String bodyFile) { + this.bodyFile = Optional.ofNullable(bodyFile); + return this; + } + + public Optional getBodyFile() { + return bodyFile; + } +} diff --git a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java index 6acd2f3..ae4ddb2 100644 --- a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java @@ -2,43 +2,64 @@ import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; +import org.hamcrest.core.IsEqual; + +import java.util.Map; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Supplier; import static com.github.tomakehurst.wiremock.client.WireMock.*; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class SuccessTestRunner { - private final int responseStatus; - private final String url; - private final String body; - - public SuccessTestRunner(String url, int responseStatus, String body) { - this.responseStatus = responseStatus; - this.url = url; - this.body = body; + private RequestBuilder requestBuilder; + private ResponseBuilder responseBuilder; + + public SuccessTestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + this.requestBuilder = requestBuilder; + this.responseBuilder = responseBuilder; } public void runGetTest(Supplier method, R expectedResult) { - stubFor(get(urlEqualTo(url)).willReturn(createResponse())); + stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); - assertEquals(method.get(), expectedResult); + assertThat(method.get(), IsEqual.equalTo(expectedResult)); } public void runPostTest(Consumer

method, P parameter, String verifyBody) { + String url = requestBuilder.getUrl(); stubFor(post(urlEqualTo(url)).willReturn(createResponse())); method.accept(parameter); verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } public void runPutTest(Consumer

method, P parameter, String verifyBody) { + String url = requestBuilder.getUrl(); stubFor(put(urlEqualTo(url)).willReturn(createResponse())); method.accept(parameter); verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } private ResponseDefinitionBuilder createResponse() { - return aResponse().withStatus(responseStatus).withBody(body); + ResponseDefinitionBuilder response = aResponse().withStatus(responseBuilder.getStatus()); + Optional body = responseBuilder.getBody(); + if (body.isPresent()) { + response.withBody(body.get()); + } else { + response.withBodyFile(responseBuilder.getBodyFile().get()); + } + + Optional contentType = responseBuilder.getContentType(); + if (contentType.isPresent()) { + response.withHeader("Content-Type", contentType.get()); + } + + Map headers = responseBuilder.getHeaders(); + for (String header : headers.keySet()) { + response.withHeader(header, headers.get(header)); + } + return response; } } diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index 982f5ab..bb20eea 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -20,9 +20,7 @@ package io.kamax.matrix.client.as; -import io.kamax.matrix.client.ErrorTestRunner; -import io.kamax.matrix.client.MatrixHttpTest; -import io.kamax.matrix.client.SuccessTestRunner; +import io.kamax.matrix.client.*; import io.kamax.matrix.hs.MatrixHomeserver; import org.junit.Test; @@ -34,11 +32,10 @@ public class MatrixApplicationServiceClientTest extends MatrixHttpTest { @Test public void createUser() throws URISyntaxException { String url = createUserUrl(); - String body = ("{}"); - String verifyBody = "`username`:`testuser`".replace('`', '"'); - new SuccessTestRunner(url, 200, body).runPostTest(createClientObject()::createUser, "testuser", - verifyBody); + + new SuccessTestRunner(new RequestBuilder(url), new ResponseBuilder(200)) + .runPostTest(createClientObject()::createUser, "testuser", verifyBody); } diff --git a/src/test/resources/wiremock/__files/textfile.txt b/src/test/resources/wiremock/__files/textfile.txt new file mode 100644 index 0000000..53b68c0 --- /dev/null +++ b/src/test/resources/wiremock/__files/textfile.txt @@ -0,0 +1 @@ +text file with test text \ No newline at end of file From 23780556fd8c8bd8833272a331c989cb50178254 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 22:14:30 +0200 Subject: [PATCH 05/22] Fix regular expression --- src/main/java/io/kamax/matrix/client/MatrixHttpContent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java b/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java index 0aac443..4f526c5 100644 --- a/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java +++ b/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java @@ -45,7 +45,7 @@ public class MatrixHttpContent extends AMatrixHttpClient implements _MatrixConte private Logger log = LoggerFactory.getLogger(MatrixHttpContent.class); - private final Pattern filenamePattern = Pattern.compile("filename=\"?(?.+)\"?;?"); + private final Pattern filenamePattern = Pattern.compile("filename=\"?(?.+[^\";])"); private URI address; private String type; From 04912b8d1d3c77d64584a939a43a8ad091ea7d8f Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 22:19:22 +0200 Subject: [PATCH 06/22] Fix error in runner --- .../kamax/matrix/client/ErrorTestRunner.java | 20 ++++++++++++++ .../kamax/matrix/client/RequestBuilder.java | 20 ++++++++++++++ .../kamax/matrix/client/ResponseBuilder.java | 20 ++++++++++++++ .../matrix/client/SuccessTestRunner.java | 26 +++++++++++++++++-- 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java b/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java index 4e2a71d..db74010 100644 --- a/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java @@ -1,3 +1,23 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package io.kamax.matrix.client; import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; diff --git a/src/test/java/io/kamax/matrix/client/RequestBuilder.java b/src/test/java/io/kamax/matrix/client/RequestBuilder.java index 8376005..583bc04 100644 --- a/src/test/java/io/kamax/matrix/client/RequestBuilder.java +++ b/src/test/java/io/kamax/matrix/client/RequestBuilder.java @@ -1,3 +1,23 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package io.kamax.matrix.client; public class RequestBuilder { diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java index 1180812..0997c52 100644 --- a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java +++ b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java @@ -1,3 +1,23 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package io.kamax.matrix.client; import java.util.HashMap; diff --git a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java index ae4ddb2..bda292d 100644 --- a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java @@ -1,3 +1,23 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package io.kamax.matrix.client; import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; @@ -45,10 +65,12 @@ public void runPutTest(Consumer

method, P parameter, String verifyBody) { private ResponseDefinitionBuilder createResponse() { ResponseDefinitionBuilder response = aResponse().withStatus(responseBuilder.getStatus()); Optional body = responseBuilder.getBody(); + Optional bodyFile = responseBuilder.getBodyFile(); + if (body.isPresent()) { response.withBody(body.get()); - } else { - response.withBodyFile(responseBuilder.getBodyFile().get()); + } else if (bodyFile.isPresent()) { + response.withBodyFile(bodyFile.get()); } Optional contentType = responseBuilder.getContentType(); From c6d245a48ac379b5bf28fa2626526815247ba513 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 23:35:53 +0200 Subject: [PATCH 07/22] Add more tests for MatrixHttpContent --- ...stRunner.java => ExceptionTestRunner.java} | 71 ++++------- .../matrix/client/MatrixHttpContentTest.java | 112 ++++++++++++++---- .../matrix/client/MatrixHttpRoomTest.java | 16 ++- .../kamax/matrix/client/RequestBuilder.java | 2 + .../kamax/matrix/client/ResponseBuilder.java | 38 ++++++ ...SuccessTestRunner.java => TestRunner.java} | 4 +- .../MatrixApplicationServiceClientTest.java | 5 +- .../client/regular/MatrixHttpClientTest.java | 7 +- 8 files changed, 167 insertions(+), 88 deletions(-) rename src/test/java/io/kamax/matrix/client/{ErrorTestRunner.java => ExceptionTestRunner.java} (56%) rename src/test/java/io/kamax/matrix/client/{SuccessTestRunner.java => TestRunner.java} (95%) diff --git a/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java b/src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java similarity index 56% rename from src/test/java/io/kamax/matrix/client/ErrorTestRunner.java rename to src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java index db74010..0e5a1dc 100644 --- a/src/test/java/io/kamax/matrix/client/ErrorTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java @@ -32,24 +32,30 @@ import static org.junit.Assert.*; -public class ErrorTestRunner { - private final int responseStatus; - private final String url; +/** + * Test runner for error cases, in which MatrixClientRequestException get thrown. + * + * @param + * Return type of the tested get-method + * @param

+ * Parameter type of the tested consume-method + */ +public class ExceptionTestRunner { - private Optional customErrcode = Optional.empty(); - private Optional customError = Optional.empty(); + private final RequestBuilder requestBuilder; + private final ResponseBuilder responseBuilder; - public ErrorTestRunner(String url, int responseStatus) { - this.responseStatus = responseStatus; - this.url = url; + public ExceptionTestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + this.requestBuilder = requestBuilder; + this.responseBuilder = responseBuilder; } public ResponseDefinitionBuilder getResponse() { - return aResponse().withStatus(responseStatus).withBody(getErrorReturnBody()); + return aResponse().withStatus(responseBuilder.getStatus()).withBody(responseBuilder.getBody().get()); } - public void runGetTest(Supplier method) { - stubFor(get(urlEqualTo(url)).willReturn(getResponse())); + public void runGetTest(Supplier method) { + stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); try { method.get(); @@ -65,12 +71,12 @@ public void runGetTest(Supplier method) { } public void runPostTest(Consumer

method, P parameter) { - stubFor(post(urlEqualTo(url)).willReturn(getResponse())); + stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); runErrorTest(method, parameter); } public void runPutTest(Consumer

method, P parameter) { - stubFor(put(urlEqualTo(url)).willReturn(getResponse())); + stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); runErrorTest(method, parameter); } @@ -87,42 +93,7 @@ private void runErrorTest(Consumer

method, P parameter) { private void checkErrorInfo(MatrixClientRequestException e) { Optional errorOptional = e.getError(); assertTrue(errorOptional.isPresent()); - assertEquals(errorOptional.get().getErrcode(), getErrcode()); - assertEquals(errorOptional.get().getError(), getError()); - } - - private String getErrcode() { - if (customErrcode.isPresent()) { - return customErrcode.get(); - } - - switch (responseStatus) { - case 403: - return "M_FORBIDDEN"; - case 429: - return "M_LIMIT_EXCEEDED"; - default: - return ""; - } - } - - private String getError() { - if (customError.isPresent()) { - return customError.get(); - } - - switch (responseStatus) { - case 403: - return "You aren't a member of the room and weren't previously a member of the room."; - case 429: - return "Too many requests have been sent in a short period of time. Wait a while then try again."; - default: - return ""; - } + assertEquals(errorOptional.get().getErrcode(), responseBuilder.getErrcode()); + assertEquals(errorOptional.get().getError(), responseBuilder.getError()); } - - private String getErrorReturnBody() { - return ("{'errcode': `" + getErrcode() + "`, " + "error: `" + getError() + "`}").replace('`', '"'); - } - } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 8fad43b..c1219fe 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -30,60 +30,102 @@ import java.nio.file.Paths; import java.util.Optional; +/* + * TODO As the spec is outdated, I'm not sure, if the error 403 can really happen in this case. Has to be re-checked, + * when the spec is up to date, again. + */ public class MatrixHttpContentTest extends MatrixHttpTest { private URI address = new URI("mxc://localhost/testAddress.txt"); public MatrixHttpContentTest() throws URISyntaxException { } - // TODO getType, getData, getFilename - // TODO test error handling @Test - public void isValid() throws URISyntaxException { + public void isValidMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); + new TestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::isValid, false); + } - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// - .setContentType("text/plain"); + @Test + public void isValid() throws URISyntaxException { + isValidSuccessful(true, 200); + } - new SuccessTestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::isValid, true); + @Test + public void isValid404() throws URISyntaxException { + isValidSuccessful(false, 404); + } + @Test + public void isValid403() throws URISyntaxException { + isValidSuccessful(false, 403); } - public void isValidMissingContentType() throws URISyntaxException { + private void isValidSuccessful(boolean expectedResult, int responseStatus) throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new SuccessTestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::isValid, false); + + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// + .setContentType("text/plain"); + + new TestRunner(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::isValid, expectedResult); } @Test public void getType() throws URISyntaxException, IOException { + getTypeSuccessful(200, "text/plain"); + } + + @Test + public void getType404() throws URISyntaxException, IOException { + getTypeSuccessful(404, null); + } + + @Test + public void getType403() throws URISyntaxException, IOException { + getTypeSuccessful(403, null); + } + + private void getTypeSuccessful(int responseStatus, String contentType) throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - String contentType = "text/plain"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile) .setContentType("text/plain");// - new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + new TestRunner(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getType, contentType); - } @Test public void getData() throws URISyntaxException, IOException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; byte[] expectedResult = Files.readAllBytes(Paths.get(ClassLoader - .getSystemResource("wiremock" + File.separator + "__files" + File.separator + bodyFile).toURI())); + .getSystemResource("wiremock" + File.separator + "__files" + File.separator + "textfile.txt").toURI())); + getDataSuccessful(200, expectedResult, "textfile.txt"); + } - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + @Test + public void getData404() throws URISyntaxException, IOException { + getDataSuccessful(404, null, "textfile.txt"); + } + + @Test + public void getData403() throws URISyntaxException, IOException { + getDataSuccessful(403, null, "textfile.txt"); + } + + private void getDataSuccessful(int responseStatus, byte[] expectedResult, String bodyFile) + throws URISyntaxException { + String url = createDownloadUrl(); + + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new SuccessTestRunner(new RequestBuilder(url), responseBuilder) + new TestRunner(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getData, expectedResult); } @@ -96,22 +138,44 @@ public void getFilename() throws URISyntaxException, IOException { .setContentType("text/plain")// .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); - new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`;").replace('`', '"')); - new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`").replace('`', '"')); - new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", "filename=" + bodyFile); - new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); } + @Test + public void getFilename404() throws URISyntaxException, IOException { + getFilenameSuccessful(404, "textfile.txt", Optional.empty()); + } + + @Test + public void getFilename403() throws URISyntaxException, IOException { + getFilenameSuccessful(404, "textfile.txt", Optional.empty()); + } + + private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional expectedResult) + throws URISyntaxException { + String url = createDownloadUrl(); + + ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// + .setContentType("text/plain")// + .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); + + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + .runGetTest(createContentObject()::getFilename, expectedResult); + } + private MatrixHttpContent createContentObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); return new MatrixHttpContent(context, address); diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 372dd4e..e6f4aca 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -44,13 +44,15 @@ public void getName404() throws URISyntaxException { @Test public void getNameError403() throws URISyntaxException { - ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetNameUrl(), 403); + ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( + new RequestBuilder(createGetNameUrl()), new ResponseBuilder(403)); runner.runGetTest(createRoomObject()::getName); } @Test public void getNameError429() throws URISyntaxException { - ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetNameUrl(), 429); + ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( + new RequestBuilder(createGetNameUrl()), new ResponseBuilder(429)); runner.runGetTest(createRoomObject()::getName); } @@ -58,7 +60,7 @@ private void getNameSuccessful(Optional expectedResult, int responseStat String body = ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); - new SuccessTestRunner, Void>(new RequestBuilder(createGetNameUrl()), responseBuilder) + new TestRunner, Void>(new RequestBuilder(createGetNameUrl()), responseBuilder) .runGetTest(createRoomObject()::getName, expectedResult); } @@ -74,13 +76,15 @@ public void getTopic404() throws URISyntaxException { @Test public void getTopicError403() throws URISyntaxException { - ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetTopicUrl(), 403); + ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( + new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(403)); runner.runGetTest(createRoomObject()::getTopic); } @Test public void getTopic429() throws URISyntaxException { - ErrorTestRunner, Void> runner = new ErrorTestRunner(createGetTopicUrl(), 429); + ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( + new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(429)); runner.runGetTest(createRoomObject()::getTopic); } @@ -89,7 +93,7 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta String body = ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); - new SuccessTestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunner, Void>(new RequestBuilder(url), responseBuilder) .runGetTest(createRoomObject()::getTopic, expectedResult); } diff --git a/src/test/java/io/kamax/matrix/client/RequestBuilder.java b/src/test/java/io/kamax/matrix/client/RequestBuilder.java index 583bc04..0a293ab 100644 --- a/src/test/java/io/kamax/matrix/client/RequestBuilder.java +++ b/src/test/java/io/kamax/matrix/client/RequestBuilder.java @@ -20,6 +20,8 @@ package io.kamax.matrix.client; +// TODO really needed? + public class RequestBuilder { private final String url; diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java index 0997c52..207df77 100644 --- a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java +++ b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java @@ -32,6 +32,9 @@ public class ResponseBuilder { private Optional body = Optional.empty(); private Optional bodyFile = Optional.empty(); + private Optional customErrcode = Optional.empty(); + private Optional customError = Optional.empty(); + public ResponseBuilder(int status) { this.status = status; } @@ -64,6 +67,11 @@ public ResponseBuilder setBody(String body) { } public Optional getBody() { + if (status != 200) { + return Optional + .of(("{'errcode': `" + getErrcode() + "`, " + "error: `" + getError() + "`}").replace('`', '"')); + } + return body; } @@ -82,4 +90,34 @@ public ResponseBuilder setBodyFile(String bodyFile) { public Optional getBodyFile() { return bodyFile; } + + public String getErrcode() { + if (customErrcode.isPresent()) { + return customErrcode.get(); + } + + switch (getStatus()) { + case 403: + return "M_FORBIDDEN"; + case 429: + return "M_LIMIT_EXCEEDED"; + default: + return ""; + } + } + + public String getError() { + if (customError.isPresent()) { + return customError.get(); + } + + switch (getStatus()) { + case 403: + return "You aren't a member of the room and weren't previously a member of the room."; + case 429: + return "Too many requests have been sent in a short period of time. Wait a while then try again."; + default: + return ""; + } + } } diff --git a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java b/src/test/java/io/kamax/matrix/client/TestRunner.java similarity index 95% rename from src/test/java/io/kamax/matrix/client/SuccessTestRunner.java rename to src/test/java/io/kamax/matrix/client/TestRunner.java index bda292d..3dabf52 100644 --- a/src/test/java/io/kamax/matrix/client/SuccessTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/TestRunner.java @@ -33,11 +33,11 @@ import static org.junit.Assert.assertThat; -public class SuccessTestRunner { +public class TestRunner { private RequestBuilder requestBuilder; private ResponseBuilder responseBuilder; - public SuccessTestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + public TestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { this.requestBuilder = requestBuilder; this.responseBuilder = responseBuilder; } diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index bb20eea..87d105f 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -34,14 +34,15 @@ public void createUser() throws URISyntaxException { String url = createUserUrl(); String verifyBody = "`username`:`testuser`".replace('`', '"'); - new SuccessTestRunner(new RequestBuilder(url), new ResponseBuilder(200)) + new TestRunner(new RequestBuilder(url), new ResponseBuilder(200)) .runPostTest(createClientObject()::createUser, "testuser", verifyBody); } @Test public void createUserError429() throws URISyntaxException { - ErrorTestRunner runner = new ErrorTestRunner<>(createUserUrl(), 429); + ExceptionTestRunner runner = new ExceptionTestRunner<>(new RequestBuilder(createUserUrl()), + new ResponseBuilder(429)); runner.runPostTest(createClientObject()::createUser, "testuser"); } diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index fb7bfa6..f35d079 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -22,9 +22,7 @@ import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; -import io.kamax.matrix.client.ErrorTestRunner; -import io.kamax.matrix.client.MatrixClientContext; -import io.kamax.matrix.client.MatrixHttpTest; +import io.kamax.matrix.client.*; import org.junit.Test; @@ -51,7 +49,8 @@ public void setDisplayname() throws URISyntaxException { @Test public void setDisplaynameError429() throws URISyntaxException { - ErrorTestRunner runner = new ErrorTestRunner<>(createSetDisplaynameUrl(), 429); + ExceptionTestRunner runner = new ExceptionTestRunner<>( + new RequestBuilder(createSetDisplaynameUrl()), new ResponseBuilder(429)); runner.runPutTest(createClientObject()::setDisplayName, "new name"); } From 12a0019d800e3f1117e875e799d8e3f06a0b7a58 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Mon, 2 Oct 2017 23:54:18 +0200 Subject: [PATCH 08/22] Refactor test runners --- .../matrix/client/MatrixHttpContentTest.java | 26 ++++----- .../matrix/client/MatrixHttpRoomTest.java | 28 ++++----- .../io/kamax/matrix/client/TestRunner.java | 36 ++---------- .../io/kamax/matrix/client/TestRunnerGet.java | 58 +++++++++++++++++++ ...TestRunner.java => TestRunnerPostPut.java} | 57 ++++++------------ .../MatrixApplicationServiceClientTest.java | 7 +-- .../client/regular/MatrixHttpClientTest.java | 22 +++---- 7 files changed, 118 insertions(+), 116 deletions(-) create mode 100644 src/test/java/io/kamax/matrix/client/TestRunnerGet.java rename src/test/java/io/kamax/matrix/client/{ExceptionTestRunner.java => TestRunnerPostPut.java} (55%) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index c1219fe..6ef37c7 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -45,8 +45,8 @@ public void isValidMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::isValid, false); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::isValid, + false); } @Test @@ -71,8 +71,8 @@ private void isValidSuccessful(boolean expectedResult, int responseStatus) throw ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::isValid, expectedResult); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::isValid, + expectedResult); } @Test @@ -97,8 +97,8 @@ private void getTypeSuccessful(int responseStatus, String contentType) throws UR ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile) .setContentType("text/plain");// - new TestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getType, contentType); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::getType, + contentType); } @Test @@ -125,8 +125,8 @@ private void getDataSuccessful(int responseStatus, byte[] expectedResult, String ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunner(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getData, expectedResult); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::getData, + expectedResult); } @Test @@ -138,19 +138,19 @@ public void getFilename() throws URISyntaxException, IOException { .setContentType("text/plain")// .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`;").replace('`', '"')); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`").replace('`', '"')); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", "filename=" + bodyFile); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); } @@ -172,7 +172,7 @@ private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional .setContentType("text/plain")// .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createContentObject()::getFilename, expectedResult); } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index e6f4aca..e25de78 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -44,23 +44,23 @@ public void getName404() throws URISyntaxException { @Test public void getNameError403() throws URISyntaxException { - ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( - new RequestBuilder(createGetNameUrl()), new ResponseBuilder(403)); - runner.runGetTest(createRoomObject()::getName); + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), + new ResponseBuilder(403)); + runner.runGetTestExceptionExpected(createRoomObject()::getName); } @Test public void getNameError429() throws URISyntaxException { - ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( - new RequestBuilder(createGetNameUrl()), new ResponseBuilder(429)); - runner.runGetTest(createRoomObject()::getName); + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), + new ResponseBuilder(429)); + runner.runGetTestExceptionExpected(createRoomObject()::getName); } private void getNameSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { String body = ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); - new TestRunner, Void>(new RequestBuilder(createGetNameUrl()), responseBuilder) + new TestRunnerGet>(new RequestBuilder(createGetNameUrl()), responseBuilder) .runGetTest(createRoomObject()::getName, expectedResult); } @@ -76,16 +76,16 @@ public void getTopic404() throws URISyntaxException { @Test public void getTopicError403() throws URISyntaxException { - ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( - new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(403)); - runner.runGetTest(createRoomObject()::getTopic); + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), + new ResponseBuilder(403)); + runner.runGetTestExceptionExpected(createRoomObject()::getTopic); } @Test public void getTopic429() throws URISyntaxException { - ExceptionTestRunner, Void> runner = new ExceptionTestRunner<>( - new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(429)); - runner.runGetTest(createRoomObject()::getTopic); + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), + new ResponseBuilder(429)); + runner.runGetTestExceptionExpected(createRoomObject()::getTopic); } private void getTopicSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { @@ -93,7 +93,7 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta String body = ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); - new TestRunner, Void>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runGetTest(createRoomObject()::getTopic, expectedResult); } diff --git a/src/test/java/io/kamax/matrix/client/TestRunner.java b/src/test/java/io/kamax/matrix/client/TestRunner.java index 3dabf52..2238374 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunner.java +++ b/src/test/java/io/kamax/matrix/client/TestRunner.java @@ -22,47 +22,21 @@ import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; -import org.hamcrest.core.IsEqual; - import java.util.Map; import java.util.Optional; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; -import static org.junit.Assert.assertThat; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -public class TestRunner { - private RequestBuilder requestBuilder; - private ResponseBuilder responseBuilder; +public class TestRunner { + protected RequestBuilder requestBuilder; + protected ResponseBuilder responseBuilder; public TestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { this.requestBuilder = requestBuilder; this.responseBuilder = responseBuilder; } - public void runGetTest(Supplier method, R expectedResult) { - stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); - - assertThat(method.get(), IsEqual.equalTo(expectedResult)); - } - - public void runPostTest(Consumer

method, P parameter, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(post(urlEqualTo(url)).willReturn(createResponse())); - method.accept(parameter); - verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); - } - - public void runPutTest(Consumer

method, P parameter, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(put(urlEqualTo(url)).willReturn(createResponse())); - method.accept(parameter); - verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); - } - - private ResponseDefinitionBuilder createResponse() { + protected ResponseDefinitionBuilder createResponse() { ResponseDefinitionBuilder response = aResponse().withStatus(responseBuilder.getStatus()); Optional body = responseBuilder.getBody(); Optional bodyFile = responseBuilder.getBodyFile(); diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java new file mode 100644 index 0000000..4226c10 --- /dev/null +++ b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java @@ -0,0 +1,58 @@ +/* + * matrix-java-sdk - Matrix Client SDK for Java + * Copyright (C) 2017 Arne Augenstein + * + * https://max.kamax.io/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package io.kamax.matrix.client; + +import org.hamcrest.core.IsEqual; + +import java.util.function.Supplier; + +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.Assert.*; + +public class TestRunnerGet extends TestRunner { + + public TestRunnerGet(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + super(requestBuilder, responseBuilder); + } + + public void runGetTest(Supplier method, R expectedResult) { + stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + + assertThat(method.get(), IsEqual.equalTo(expectedResult)); + } + + public void runGetTestExceptionExpected(Supplier method) { + stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + + try { + method.get(); + } catch (MatrixClientRequestException e) { + /* + * TODO refactor error handling, so that the error is returned. Afterwards, the error + * values can be checked here by using e.getError(). + */ + // checkErrorInfo( e); + return; + } + fail("In this case, an exception has to be thrown."); + } +} diff --git a/src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java similarity index 55% rename from src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java rename to src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java index 0e5a1dc..cd6905e 100644 --- a/src/test/java/io/kamax/matrix/client/ExceptionTestRunner.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java @@ -20,63 +20,42 @@ package io.kamax.matrix.client; -import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; - import io.kamax.matrix.MatrixErrorInfo; import java.util.Optional; import java.util.function.Consumer; -import java.util.function.Supplier; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.junit.Assert.*; -/** - * Test runner for error cases, in which MatrixClientRequestException get thrown. - * - * @param - * Return type of the tested get-method - * @param

- * Parameter type of the tested consume-method - */ -public class ExceptionTestRunner { - - private final RequestBuilder requestBuilder; - private final ResponseBuilder responseBuilder; +public class TestRunnerPostPut

extends TestRunner { - public ExceptionTestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { - this.requestBuilder = requestBuilder; - this.responseBuilder = responseBuilder; + public TestRunnerPostPut(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + super(requestBuilder, responseBuilder); } - public ResponseDefinitionBuilder getResponse() { - return aResponse().withStatus(responseBuilder.getStatus()).withBody(responseBuilder.getBody().get()); + public void runPostTest(Consumer

method, P parameter, String verifyBody) { + String url = requestBuilder.getUrl(); + stubFor(post(urlEqualTo(url)).willReturn(createResponse())); + method.accept(parameter); + verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } - public void runGetTest(Supplier method) { - stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); - - try { - method.get(); - } catch (MatrixClientRequestException e) { - /* - * TODO refactor error handling, so that the error is returned. Afterwards, the error - * values can be checked here by using e.getError(). - */ - // checkErrorInfo( e); - return; - } - fail("In this case, an exception has to be thrown."); + public void runPostTestExceptionExpected(Consumer

method, P parameter) { + stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + runErrorTest(method, parameter); } - public void runPostTest(Consumer

method, P parameter) { - stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); - runErrorTest(method, parameter); + public void runPutTest(Consumer

method, P parameter, String verifyBody) { + String url = requestBuilder.getUrl(); + stubFor(put(urlEqualTo(url)).willReturn(createResponse())); + method.accept(parameter); + verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } - public void runPutTest(Consumer

method, P parameter) { - stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(getResponse())); + public void runPutTestExceptionExpected(Consumer

method, P parameter) { + stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); runErrorTest(method, parameter); } diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index 87d105f..5538e06 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -34,16 +34,15 @@ public void createUser() throws URISyntaxException { String url = createUserUrl(); String verifyBody = "`username`:`testuser`".replace('`', '"'); - new TestRunner(new RequestBuilder(url), new ResponseBuilder(200)) + new TestRunnerPostPut(new RequestBuilder(url), new ResponseBuilder(200)) .runPostTest(createClientObject()::createUser, "testuser", verifyBody); - } @Test public void createUserError429() throws URISyntaxException { - ExceptionTestRunner runner = new ExceptionTestRunner<>(new RequestBuilder(createUserUrl()), + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createUserUrl()), new ResponseBuilder(429)); - runner.runPostTest(createClientObject()::createUser, "testuser"); + runner.runPostTestExceptionExpected(createClientObject()::createUser, "testuser"); } private String createUserUrl() throws URISyntaxException { diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index f35d079..0bb0170 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -20,38 +20,30 @@ package io.kamax.matrix.client.regular; -import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; - import io.kamax.matrix.client.*; import org.junit.Test; import java.net.URISyntaxException; -import static com.github.tomakehurst.wiremock.client.WireMock.*; - public class MatrixHttpClientTest extends MatrixHttpTest { @Test public void setDisplayname() throws URISyntaxException { String url = createSetDisplaynameUrl(); - String body = ("{}"); - - ResponseDefinitionBuilder response = aResponse().withStatus(200).withBody(body); - stubFor(put(urlEqualTo(url)).willReturn(response)); - + ResponseBuilder responseBuilder = new ResponseBuilder(200); String displayname = "new name"; - createClientObject().setDisplayName(displayname); - String verifyBody = ("`displayname`:`" + displayname + "`").replace('`', '"'); - verify(putRequestedFor(urlEqualTo(createSetDisplaynameUrl())).withRequestBody(containing(verifyBody))); + + new TestRunnerPostPut(new RequestBuilder(url), responseBuilder) + .runPutTest(createClientObject()::setDisplayName, displayname, verifyBody); } @Test public void setDisplaynameError429() throws URISyntaxException { - ExceptionTestRunner runner = new ExceptionTestRunner<>( - new RequestBuilder(createSetDisplaynameUrl()), new ResponseBuilder(429)); - runner.runPutTest(createClientObject()::setDisplayName, "new name"); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createSetDisplaynameUrl()), + new ResponseBuilder(429)); + runner.runPutTestExceptionExpected(createClientObject()::setDisplayName, "new name"); } private String createSetDisplaynameUrl() throws URISyntaxException { From 2524f6f16a65edd3778c21ea39bb257ea4a7b627 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 00:53:14 +0200 Subject: [PATCH 09/22] Add more tests --- .../matrix/client/MatrixHttpContentTest.java | 71 ++++++++++----- .../matrix/client/MatrixHttpRoomTest.java | 88 +++++++++++++++++-- .../io/kamax/matrix/client/TestRunnerGet.java | 4 +- .../matrix/client/TestRunnerPostPut.java | 38 ++++++++ 4 files changed, 171 insertions(+), 30 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 6ef37c7..d751fdb 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -40,27 +40,27 @@ public class MatrixHttpContentTest extends MatrixHttpTest { public MatrixHttpContentTest() throws URISyntaxException { } + @Test + public void isValid() throws URISyntaxException { + isValidSuccessful(true, 200); + } + @Test public void isValidMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::isValid, + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, false); } @Test - public void isValid() throws URISyntaxException { - isValidSuccessful(true, 200); - } - - @Test - public void isValid404() throws URISyntaxException { + public void isValidError404() throws URISyntaxException { isValidSuccessful(false, 404); } @Test - public void isValid403() throws URISyntaxException { + public void isValidError403() throws URISyntaxException { isValidSuccessful(false, 403); } @@ -71,7 +71,7 @@ private void isValidSuccessful(boolean expectedResult, int responseStatus) throw ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::isValid, + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, expectedResult); } @@ -81,12 +81,21 @@ public void getType() throws URISyntaxException, IOException { } @Test - public void getType404() throws URISyntaxException, IOException { + public void getTypeMissingContentType() throws URISyntaxException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, + null); + } + + @Test + public void getTypeError404() throws URISyntaxException, IOException { getTypeSuccessful(404, null); } @Test - public void getType403() throws URISyntaxException, IOException { + public void getTypeError403() throws URISyntaxException, IOException { getTypeSuccessful(403, null); } @@ -97,7 +106,7 @@ private void getTypeSuccessful(int responseStatus, String contentType) throws UR ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile) .setContentType("text/plain");// - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::getType, + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, contentType); } @@ -109,12 +118,21 @@ public void getData() throws URISyntaxException, IOException { } @Test - public void getData404() throws URISyntaxException, IOException { + public void getDataMissingContentType() throws URISyntaxException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, + null); + } + + @Test + public void getDataError404() throws URISyntaxException, IOException { getDataSuccessful(404, null, "textfile.txt"); } @Test - public void getData403() throws URISyntaxException, IOException { + public void getDataError403() throws URISyntaxException, IOException { getDataSuccessful(403, null, "textfile.txt"); } @@ -125,7 +143,7 @@ private void getDataSuccessful(int responseStatus, byte[] expectedResult, String ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runGetTest(createContentObject()::getData, + new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, expectedResult); } @@ -139,28 +157,37 @@ public void getFilename() throws URISyntaxException, IOException { .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`;").replace('`', '"')); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`").replace('`', '"')); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", "filename=" + bodyFile); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getFilename, Optional.of(bodyFile)); + .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); + } + + @Test + public void getFilenameMissingContentType() throws URISyntaxException { + String url = createDownloadUrl(); + String bodyFile = "textfile.txt"; + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + .runTest(createContentObject()::getFilename, Optional.empty()); } @Test - public void getFilename404() throws URISyntaxException, IOException { + public void getFilenameError404() throws URISyntaxException, IOException { getFilenameSuccessful(404, "textfile.txt", Optional.empty()); } @Test - public void getFilename403() throws URISyntaxException, IOException { + public void getFilenameError403() throws URISyntaxException, IOException { getFilenameSuccessful(404, "textfile.txt", Optional.empty()); } @@ -173,7 +200,7 @@ private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createContentObject()::getFilename, expectedResult); + .runTest(createContentObject()::getFilename, expectedResult); } private MatrixHttpContent createContentObject() throws URISyntaxException { diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index e25de78..8bd65e0 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -46,14 +46,14 @@ public void getName404() throws URISyntaxException { public void getNameError403() throws URISyntaxException { TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), new ResponseBuilder(403)); - runner.runGetTestExceptionExpected(createRoomObject()::getName); + runner.runTestExceptionExpected(createRoomObject()::getName); } @Test public void getNameError429() throws URISyntaxException { TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), new ResponseBuilder(429)); - runner.runGetTestExceptionExpected(createRoomObject()::getName); + runner.runTestExceptionExpected(createRoomObject()::getName); } private void getNameSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { @@ -61,7 +61,7 @@ private void getNameSuccessful(Optional expectedResult, int responseStat ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); new TestRunnerGet>(new RequestBuilder(createGetNameUrl()), responseBuilder) - .runGetTest(createRoomObject()::getName, expectedResult); + .runTest(createRoomObject()::getName, expectedResult); } @Test @@ -78,14 +78,14 @@ public void getTopic404() throws URISyntaxException { public void getTopicError403() throws URISyntaxException { TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(403)); - runner.runGetTestExceptionExpected(createRoomObject()::getTopic); + runner.runTestExceptionExpected(createRoomObject()::getTopic); } @Test public void getTopic429() throws URISyntaxException { TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), new ResponseBuilder(429)); - runner.runGetTestExceptionExpected(createRoomObject()::getTopic); + runner.runTestExceptionExpected(createRoomObject()::getTopic); } private void getTopicSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { @@ -94,7 +94,75 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) - .runGetTest(createRoomObject()::getTopic, expectedResult); + .runTest(createRoomObject()::getTopic, expectedResult); + } + + @Test + public void join() throws URISyntaxException { + String url = createJoinUrl(); + String body = ("{`roomId`: `" + ROOM_ID + "`}").replace('`', '"'); + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); + + new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); + } + + @Test + public void joinError404() throws URISyntaxException { + joinExceptionExpected(404); + } + + @Test + public void joinError403() throws URISyntaxException { + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createJoinUrl()), + new ResponseBuilder(403)); + runner.runPostTest(createRoomObject()::join); + } + + @Test + public void joinError429() throws URISyntaxException { + joinExceptionExpected(429); + } + + private void joinExceptionExpected(int responseStatus) throws URISyntaxException { + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createJoinUrl()), + new ResponseBuilder(responseStatus)); + runner.runPostTestExceptionExpected(createRoomObject()::join); + } + + @Test + public void leave() throws URISyntaxException { + String url = createLeaveUrl(); + String body = ("{`roomId`: `" + ROOM_ID + "`}").replace('`', '"'); + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); + + new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::leave); + } + + @Test + public void leaveError404() throws URISyntaxException { + leaveErrorWithoutException(404); + } + + @Test + public void leaveError403() throws URISyntaxException { + leaveErrorWithoutException(403); + } + + @Test + public void leaveError429() throws URISyntaxException { + leaveExceptionExpected(429); + } + + private void leaveErrorWithoutException(int responseStatus) throws URISyntaxException { + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createLeaveUrl()), + new ResponseBuilder(responseStatus)); + runner.runPostTest(createRoomObject()::leave); + } + + private void leaveExceptionExpected(int responseStatus) throws URISyntaxException { + TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createLeaveUrl()), + new ResponseBuilder(responseStatus)); + runner.runPostTestExceptionExpected(createRoomObject()::leave); } private MatrixHttpRoom createRoomObject() throws URISyntaxException { @@ -109,4 +177,12 @@ private String createGetNameUrl() { private String createGetTopicUrl() { return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.topic" + getAcessTokenParameter(); } + + private String createJoinUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/join" + getAcessTokenParameter(); + } + + private String createLeaveUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/leave" + getAcessTokenParameter(); + } } diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java index 4226c10..14b4611 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java @@ -34,13 +34,13 @@ public TestRunnerGet(RequestBuilder requestBuilder, ResponseBuilder responseBuil super(requestBuilder, responseBuilder); } - public void runGetTest(Supplier method, R expectedResult) { + public void runTest(Supplier method, R expectedResult) { stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); assertThat(method.get(), IsEqual.equalTo(expectedResult)); } - public void runGetTestExceptionExpected(Supplier method) { + public void runTestExceptionExpected(Supplier method) { stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); try { diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java index cd6905e..0da6e45 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java @@ -42,11 +42,27 @@ public void runPostTest(Consumer

method, P parameter, String verifyBody) { verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } + public void runPostTest(Runnable method, String verifyBody) { + String url = requestBuilder.getUrl(); + stubFor(post(urlEqualTo(url)).willReturn(createResponse())); + method.run(); + verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + } + + public void runPostTest(Runnable method) { + runPostTest(method, ""); + } + public void runPostTestExceptionExpected(Consumer

method, P parameter) { stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); runErrorTest(method, parameter); } + public void runPostTestExceptionExpected(Runnable method) { + stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + runErrorTest(method); + } + public void runPutTest(Consumer

method, P parameter, String verifyBody) { String url = requestBuilder.getUrl(); stubFor(put(urlEqualTo(url)).willReturn(createResponse())); @@ -54,11 +70,23 @@ public void runPutTest(Consumer

method, P parameter, String verifyBody) { verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); } + public void runPutTest(Runnable method, String verifyBody) { + String url = requestBuilder.getUrl(); + stubFor(put(urlEqualTo(url)).willReturn(createResponse())); + method.run(); + verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + } + public void runPutTestExceptionExpected(Consumer

method, P parameter) { stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); runErrorTest(method, parameter); } + public void runPutTestExceptionExpected(Runnable method) { + stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + runErrorTest(method); + } + private void runErrorTest(Consumer

method, P parameter) { try { method.accept(parameter); @@ -69,6 +97,16 @@ private void runErrorTest(Consumer

method, P parameter) { fail("In this case, an exception has to be thrown."); } + private void runErrorTest(Runnable method) { + try { + method.run(); + } catch (MatrixClientRequestException e) { + checkErrorInfo(e); + return; + } + fail("In this case, an exception has to be thrown."); + } + private void checkErrorInfo(MatrixClientRequestException e) { Optional errorOptional = e.getError(); assertTrue(errorOptional.isPresent()); From 2b422aa9ff6daaa2b3309f6a4e6fef0594518a09 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 15:00:03 +0200 Subject: [PATCH 10/22] Add sendText test cases --- .../matrix/client/MatrixHttpRoomTest.java | 49 +++++++++++++++++ .../kamax/matrix/client/RequestBuilder.java | 17 +++++- .../kamax/matrix/client/ResponseBuilder.java | 17 ++---- .../matrix/client/TestRunnerPostPut.java | 55 +++++++++++-------- 4 files changed, 102 insertions(+), 36 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 8bd65e0..461426c 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -165,6 +165,51 @@ private void leaveExceptionExpected(int responseStatus) throws URISyntaxExceptio runner.runPostTestExceptionExpected(createRoomObject()::leave); } + @Test + public void sendText() throws URISyntaxException { + String url = createSendTextUrl(); + ResponseBuilder responseBuilder = new ResponseBuilder(200); + RequestBuilder requestBuilder = new RequestBuilder(url).setMatchingType(RequestBuilder.MatchingType.REGEX); + + String testText = "test text"; + new TestRunnerPostPut(requestBuilder, responseBuilder).runPutTest(createRoomObject()::sendText, + testText, sendTextVerifyBody(testText)); + } + + @Test + public void sendTextError404() throws URISyntaxException { + sendTextExceptionExpected(404); + } + + @Test + public void sendTextError403() throws URISyntaxException { + sendTextErrorWithoutException(403); + } + + @Test + public void sendTextError429() throws URISyntaxException { + sendTextExceptionExpected(429); + } + + private void sendTextErrorWithoutException(int responseStatus) throws URISyntaxException { + RequestBuilder requestBuilder = new RequestBuilder(createSendTextUrl()) + .setMatchingType(RequestBuilder.MatchingType.REGEX); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new ResponseBuilder(responseStatus)); + String testText = "test text"; + runner.runPutTest(createRoomObject()::sendText, testText, sendTextVerifyBody(testText)); + } + + private void sendTextExceptionExpected(int responseStatus) throws URISyntaxException { + RequestBuilder requestBuilder = new RequestBuilder(createSendTextUrl()) + .setMatchingType(RequestBuilder.MatchingType.REGEX); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new ResponseBuilder(responseStatus)); + runner.runPutTestExceptionExpected(createRoomObject()::sendText, "test text"); + } + + private String sendTextVerifyBody(String testText) { + return ("`msgtype`:`m.text`,`body`:`" + testText + "`").replace('`', '"'); + } + private MatrixHttpRoom createRoomObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); return new MatrixHttpRoom(context, ROOM_ID); @@ -185,4 +230,8 @@ private String createJoinUrl() { private String createLeaveUrl() { return "/_matrix/client/r0/rooms/" + ROOM_ID + "/leave" + getAcessTokenParameter(); } + + private String createSendTextUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/send/m.room.message/([0-9.]+)\\" + getAcessTokenParameter(); + } } diff --git a/src/test/java/io/kamax/matrix/client/RequestBuilder.java b/src/test/java/io/kamax/matrix/client/RequestBuilder.java index 0a293ab..12bcf10 100644 --- a/src/test/java/io/kamax/matrix/client/RequestBuilder.java +++ b/src/test/java/io/kamax/matrix/client/RequestBuilder.java @@ -20,15 +20,28 @@ package io.kamax.matrix.client; -// TODO really needed? - public class RequestBuilder { + public enum MatchingType { + EQUALITY, + REGEX + } + + private MatchingType matchingType = MatchingType.EQUALITY; private final String url; public RequestBuilder(String url) { this.url = url; } + public RequestBuilder setMatchingType(MatchingType matchingType) { + this.matchingType = matchingType; + return this; + } + + public MatchingType getMatchingType() { + return matchingType; + } + public String getUrl() { return url; } diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java index 207df77..6412ed0 100644 --- a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java +++ b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java @@ -32,9 +32,6 @@ public class ResponseBuilder { private Optional body = Optional.empty(); private Optional bodyFile = Optional.empty(); - private Optional customErrcode = Optional.empty(); - private Optional customError = Optional.empty(); - public ResponseBuilder(int status) { this.status = status; } @@ -92,13 +89,11 @@ public Optional getBodyFile() { } public String getErrcode() { - if (customErrcode.isPresent()) { - return customErrcode.get(); - } - switch (getStatus()) { case 403: return "M_FORBIDDEN"; + case 404: + return "M_NOT_FOUND"; case 429: return "M_LIMIT_EXCEEDED"; default: @@ -107,13 +102,11 @@ public String getErrcode() { } public String getError() { - if (customError.isPresent()) { - return customError.get(); - } - switch (getStatus()) { case 403: - return "You aren't a member of the room and weren't previously a member of the room."; + return "Access denied."; + case 404: + return "Element not found."; case 429: return "Too many requests have been sent in a short period of time. Wait a while then try again."; default: diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java index 0da6e45..2b80c88 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java @@ -20,9 +20,8 @@ package io.kamax.matrix.client; -import io.kamax.matrix.MatrixErrorInfo; +import com.github.tomakehurst.wiremock.matching.UrlPattern; -import java.util.Optional; import java.util.function.Consumer; import static com.github.tomakehurst.wiremock.client.WireMock.*; @@ -36,17 +35,15 @@ public TestRunnerPostPut(RequestBuilder requestBuilder, ResponseBuilder response } public void runPostTest(Consumer

method, P parameter, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(post(urlEqualTo(url)).willReturn(createResponse())); + stubFor(post(getUrlPattern()).willReturn(createResponse())); method.accept(parameter); - verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + verify(postRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); } public void runPostTest(Runnable method, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(post(urlEqualTo(url)).willReturn(createResponse())); + stubFor(post(getUrlPattern()).willReturn(createResponse())); method.run(); - verify(postRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + verify(postRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); } public void runPostTest(Runnable method) { @@ -54,36 +51,35 @@ public void runPostTest(Runnable method) { } public void runPostTestExceptionExpected(Consumer

method, P parameter) { - stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + stubFor(post(getUrlPattern()).willReturn(createResponse())); runErrorTest(method, parameter); } public void runPostTestExceptionExpected(Runnable method) { - stubFor(post(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + stubFor(post(getUrlPattern()).willReturn(createResponse())); runErrorTest(method); } public void runPutTest(Consumer

method, P parameter, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(put(urlEqualTo(url)).willReturn(createResponse())); + stubFor(put(getUrlPattern()).willReturn(createResponse())); method.accept(parameter); - verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + verify(putRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); } public void runPutTest(Runnable method, String verifyBody) { - String url = requestBuilder.getUrl(); - stubFor(put(urlEqualTo(url)).willReturn(createResponse())); + + stubFor(put(getUrlPattern()).willReturn(createResponse())); method.run(); - verify(putRequestedFor(urlEqualTo(url)).withRequestBody(containing(verifyBody))); + verify(putRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); } public void runPutTestExceptionExpected(Consumer

method, P parameter) { - stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + stubFor(put(getUrlPattern()).willReturn(createResponse())); runErrorTest(method, parameter); } public void runPutTestExceptionExpected(Runnable method) { - stubFor(put(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); + stubFor(put(getUrlPattern()).willReturn(createResponse())); runErrorTest(method); } @@ -108,9 +104,24 @@ private void runErrorTest(Runnable method) { } private void checkErrorInfo(MatrixClientRequestException e) { - Optional errorOptional = e.getError(); - assertTrue(errorOptional.isPresent()); - assertEquals(errorOptional.get().getErrcode(), responseBuilder.getErrcode()); - assertEquals(errorOptional.get().getError(), responseBuilder.getError()); + // TODO at the moment not every call throws a MatrixClientRequestException, so we cannot always evaluate the + // error. This code can be activated after the upcoming refactoring. + /* + * Optional errorOptional = e.getError(); + * assertTrue(errorOptional.isPresent()); + * assertEquals(errorOptional.get().getErrcode(), responseBuilder.getErrcode()); + * assertEquals(errorOptional.get().getError(), responseBuilder.getError()); + */ + } + + private UrlPattern getUrlPattern() { + String url = requestBuilder.getUrl(); + + if (requestBuilder.getMatchingType() == RequestBuilder.MatchingType.REGEX) { + return urlMatching(url); + } + + return urlEqualTo(url); } + } From 5a86b8606bfa625bf51c0bf5b3d6fcdcd9cb235c Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 15:21:45 +0200 Subject: [PATCH 11/22] Add tests for getting joined users --- .../matrix/client/MatrixHttpRoomTest.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 461426c..28b49ed 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -20,9 +20,14 @@ package io.kamax.matrix.client; +import io.kamax.matrix.MatrixID; +import io.kamax.matrix._MatrixID; + import org.junit.Test; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; public class MatrixHttpRoomTest extends MatrixHttpTest { @@ -210,6 +215,39 @@ private String sendTextVerifyBody(String testText) { return ("`msgtype`:`m.text`,`body`:`" + testText + "`").replace('`', '"'); } + @Test + public void getJoinedUsers() throws URISyntaxException { + // TODO common values as constants? + // TODO inline replacement of string values? + String testuser1 = "@test:testserver.org"; + String testuser2 = "@test2:testserver.org"; + + String url = createGetJoinedUsersUrl(); + String responseBody = ("{`joined`: {`" + testuser1 + "`: `1`, `" + testuser2 + "`: `2`}}").replace('`', '"'); + ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(responseBody); + + List<_MatrixID> expectedResult = new ArrayList<>(); + expectedResult.add(new MatrixID(testuser1)); + expectedResult.add(new MatrixID(testuser2)); + + new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + .runTest(createRoomObject()::getJoinedUsers, expectedResult); + } + + @Test + public void getJoinedUsersError404() throws URISyntaxException { + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetJoinedUsersUrl()), + new ResponseBuilder(404)); + runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); + } + + @Test + public void getJoinedUsers429() throws URISyntaxException { + TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetJoinedUsersUrl()), + new ResponseBuilder(429)); + runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); + } + private MatrixHttpRoom createRoomObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); return new MatrixHttpRoom(context, ROOM_ID); @@ -234,4 +272,8 @@ private String createLeaveUrl() { private String createSendTextUrl() { return "/_matrix/client/r0/rooms/" + ROOM_ID + "/send/m.room.message/([0-9.]+)\\" + getAcessTokenParameter(); } + + private String createGetJoinedUsersUrl() { + return "/_matrix/client/r0/rooms/" + ROOM_ID + "/joined_members" + getAcessTokenParameter(); + } } From ff38b37f4b4e3de7680358a911e1ae6f9b4d4ea7 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 15:53:45 +0200 Subject: [PATCH 12/22] Refactor handling of strings --- .../matrix/client/MatrixHttpContentTest.java | 10 ++-- .../matrix/client/MatrixHttpRoomTest.java | 49 ++++++++++--------- .../kamax/matrix/client/ResponseBuilder.java | 3 +- .../MatrixApplicationServiceClientTest.java | 2 +- .../client/regular/MatrixHttpClientTest.java | 4 +- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index d751fdb..4c7791d 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -154,20 +154,20 @@ public void getFilename() throws URISyntaxException, IOException { ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// .setContentType("text/plain")// - .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); + .putHeader("Content-Disposition", String.format("filename=" + bodyFile + ";")); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); - responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`;").replace('`', '"')); + responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\";", bodyFile)); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); - responseBuilder.putHeader("Content-Disposition", ("filename=`" + bodyFile + "`").replace('`', '"')); + responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\"", bodyFile)); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); - responseBuilder.putHeader("Content-Disposition", "filename=" + bodyFile); + responseBuilder.putHeader("Content-Disposition", String.format("filename=%s", bodyFile)); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); } @@ -197,7 +197,7 @@ private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain")// - .putHeader("Content-Disposition", "filename=" + bodyFile + ";"); + .putHeader("Content-Disposition", String.format("filename=%s;", bodyFile)); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, expectedResult); diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 28b49ed..2c1e2f1 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -31,20 +31,18 @@ import java.util.Optional; public class MatrixHttpRoomTest extends MatrixHttpTest { - // TODO join, leave, sendText, sendNotice, invite, getJoinedUsers - - private static final String ROOM_NAME = "test room"; private static final String ROOM_ID = "roomId892347847"; - private static final String TOPIC_NAME = "the room's topic"; @Test public void getName() throws URISyntaxException { - getNameSuccessful(Optional.of(ROOM_NAME), 200); + String nameOfRoom = "test room"; + getNameSuccessful(Optional.of(nameOfRoom), 200, nameOfRoom); } @Test public void getName404() throws URISyntaxException { - getNameSuccessful(Optional.empty(), 404); + String nameOfRoom = "test room"; + getNameSuccessful(Optional.empty(), 404, nameOfRoom); } @Test @@ -61,8 +59,9 @@ public void getNameError429() throws URISyntaxException { runner.runTestExceptionExpected(createRoomObject()::getName); } - private void getNameSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { - String body = ("{`name`: `" + ROOM_NAME + "`}").replace('`', '"'); + private void getNameSuccessful(Optional expectedResult, int responseStatus, String nameOfRoom) + throws URISyntaxException { + String body = String.format("{\"name\": \"%s\"}", nameOfRoom); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); new TestRunnerGet>(new RequestBuilder(createGetNameUrl()), responseBuilder) @@ -71,12 +70,14 @@ private void getNameSuccessful(Optional expectedResult, int responseStat @Test public void getTopic() throws URISyntaxException { - getTopicSuccessful(Optional.of(TOPIC_NAME), 200); + String topic = "test topic"; + getTopicSuccessful(Optional.of(topic), 200, topic); } @Test public void getTopic404() throws URISyntaxException { - getTopicSuccessful(Optional.empty(), 404); + String topic = "test topic"; + getTopicSuccessful(Optional.empty(), 404, topic); } @Test @@ -93,9 +94,10 @@ public void getTopic429() throws URISyntaxException { runner.runTestExceptionExpected(createRoomObject()::getTopic); } - private void getTopicSuccessful(Optional expectedResult, int responseStatus) throws URISyntaxException { + private void getTopicSuccessful(Optional expectedResult, int responseStatus, String topic) + throws URISyntaxException { String url = createGetTopicUrl(); - String body = ("{`topic`: `" + TOPIC_NAME + "`}").replace('`', '"'); + String body = String.format("{\"topic\": \"%s\"}", topic); ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); new TestRunnerGet>(new RequestBuilder(url), responseBuilder) @@ -105,7 +107,7 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta @Test public void join() throws URISyntaxException { String url = createJoinUrl(); - String body = ("{`roomId`: `" + ROOM_ID + "`}").replace('`', '"'); + String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); @@ -137,7 +139,7 @@ private void joinExceptionExpected(int responseStatus) throws URISyntaxException @Test public void leave() throws URISyntaxException { String url = createLeaveUrl(); - String body = ("{`roomId`: `" + ROOM_ID + "`}").replace('`', '"'); + String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::leave); @@ -212,18 +214,16 @@ private void sendTextExceptionExpected(int responseStatus) throws URISyntaxExcep } private String sendTextVerifyBody(String testText) { - return ("`msgtype`:`m.text`,`body`:`" + testText + "`").replace('`', '"'); + return String.format("\"msgtype\":\"m.text\",\"body\":\"%s\"", testText); } @Test public void getJoinedUsers() throws URISyntaxException { - // TODO common values as constants? - // TODO inline replacement of string values? String testuser1 = "@test:testserver.org"; String testuser2 = "@test2:testserver.org"; String url = createGetJoinedUsersUrl(); - String responseBody = ("{`joined`: {`" + testuser1 + "`: `1`, `" + testuser2 + "`: `2`}}").replace('`', '"'); + String responseBody = String.format("{\"joined\": {\"%s\": \"1\", \"%s\": \"2\"}}", testuser1, testuser2); ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(responseBody); List<_MatrixID> expectedResult = new ArrayList<>(); @@ -254,26 +254,27 @@ private MatrixHttpRoom createRoomObject() throws URISyntaxException { } private String createGetNameUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.name" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", ROOM_ID) + getAcessTokenParameter(); } private String createGetTopicUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/state/m.room.topic" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/state/m.room.topic", ROOM_ID) + getAcessTokenParameter(); } private String createJoinUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/join" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/join", ROOM_ID) + getAcessTokenParameter(); } private String createLeaveUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/leave" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/leave", ROOM_ID) + getAcessTokenParameter(); } private String createSendTextUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/send/m.room.message/([0-9.]+)\\" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/send/m.room.message/([0-9.]+)\\", ROOM_ID) + + getAcessTokenParameter(); } private String createGetJoinedUsersUrl() { - return "/_matrix/client/r0/rooms/" + ROOM_ID + "/joined_members" + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/joined_members", ROOM_ID) + getAcessTokenParameter(); } } diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java index 6412ed0..b135687 100644 --- a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java +++ b/src/test/java/io/kamax/matrix/client/ResponseBuilder.java @@ -65,8 +65,7 @@ public ResponseBuilder setBody(String body) { public Optional getBody() { if (status != 200) { - return Optional - .of(("{'errcode': `" + getErrcode() + "`, " + "error: `" + getError() + "`}").replace('`', '"')); + return Optional.of(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", getErrcode(), getError())); } return body; diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index 5538e06..df1a942 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -32,7 +32,7 @@ public class MatrixApplicationServiceClientTest extends MatrixHttpTest { @Test public void createUser() throws URISyntaxException { String url = createUserUrl(); - String verifyBody = "`username`:`testuser`".replace('`', '"'); + String verifyBody = "\"username\":\"testuser\""; new TestRunnerPostPut(new RequestBuilder(url), new ResponseBuilder(200)) .runPostTest(createClientObject()::createUser, "testuser", verifyBody); diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index 0bb0170..2dac619 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -33,7 +33,7 @@ public void setDisplayname() throws URISyntaxException { String url = createSetDisplaynameUrl(); ResponseBuilder responseBuilder = new ResponseBuilder(200); String displayname = "new name"; - String verifyBody = ("`displayname`:`" + displayname + "`").replace('`', '"'); + String verifyBody = String.format("\"displayname\":\"%s\"", displayname); new TestRunnerPostPut(new RequestBuilder(url), responseBuilder) .runPutTest(createClientObject()::setDisplayName, displayname, verifyBody); @@ -47,7 +47,7 @@ public void setDisplaynameError429() throws URISyntaxException { } private String createSetDisplaynameUrl() throws URISyntaxException { - return "/_matrix/client/r0/profile/" + createClientContext().getUser().getId() + "/displayname" + return String.format("/_matrix/client/r0/profile/%s/displayname", createClientContext().getUser().getId()) + getAcessTokenParameter(); } From 9f9ec107d4cc8c39172d78451ba2c02cbb1ec355 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 18:01:55 +0200 Subject: [PATCH 13/22] Rename builder classes --- .../matrix/client/MatrixHttpContentTest.java | 42 +++++----- .../matrix/client/MatrixHttpRoomTest.java | 76 +++++++++---------- ...stBuilder.java => TestRequestBuilder.java} | 6 +- ...eBuilder.java => TestResponseBuilder.java} | 12 +-- .../io/kamax/matrix/client/TestRunner.java | 6 +- .../io/kamax/matrix/client/TestRunnerGet.java | 2 +- .../matrix/client/TestRunnerPostPut.java | 4 +- .../MatrixApplicationServiceClientTest.java | 6 +- .../client/regular/MatrixHttpClientTest.java | 8 +- 9 files changed, 81 insertions(+), 81 deletions(-) rename src/test/java/io/kamax/matrix/client/{RequestBuilder.java => TestRequestBuilder.java} (88%) rename src/test/java/io/kamax/matrix/client/{ResponseBuilder.java => TestResponseBuilder.java} (89%) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 4c7791d..4ff1495 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -49,8 +49,8 @@ public void isValid() throws URISyntaxException { public void isValidMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, false); } @@ -68,10 +68,10 @@ private void isValidSuccessful(boolean expectedResult, int responseStatus) throw String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, expectedResult); } @@ -84,8 +84,8 @@ public void getType() throws URISyntaxException, IOException { public void getTypeMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, null); } @@ -103,10 +103,10 @@ private void getTypeSuccessful(int responseStatus, String contentType) throws UR String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile) + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile) .setContentType("text/plain");// - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, contentType); } @@ -121,8 +121,8 @@ public void getData() throws URISyntaxException, IOException { public void getDataMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, null); } @@ -140,10 +140,10 @@ private void getDataSuccessful(int responseStatus, byte[] expectedResult, String throws URISyntaxException { String url = createDownloadUrl(); - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain"); - new TestRunnerGet(new RequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, + new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, expectedResult); } @@ -152,23 +152,23 @@ public void getFilename() throws URISyntaxException, IOException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile)// + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile)// .setContentType("text/plain")// .putHeader("Content-Disposition", String.format("filename=" + bodyFile + ";")); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\";", bodyFile)); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\"", bodyFile)); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); responseBuilder.putHeader("Content-Disposition", String.format("filename=%s", bodyFile)); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); } @@ -176,8 +176,8 @@ public void getFilename() throws URISyntaxException, IOException { public void getFilenameMissingContentType() throws URISyntaxException { String url = createDownloadUrl(); String bodyFile = "textfile.txt"; - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, Optional.empty()); } @@ -195,11 +195,11 @@ private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional throws URISyntaxException { String url = createDownloadUrl(); - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBodyFile(bodyFile)// + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// .setContentType("text/plain")// .putHeader("Content-Disposition", String.format("filename=%s;", bodyFile)); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createContentObject()::getFilename, expectedResult); } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 2c1e2f1..93814a3 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -47,24 +47,24 @@ public void getName404() throws URISyntaxException { @Test public void getNameError403() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), - new ResponseBuilder(403)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetNameUrl()), + new TestResponseBuilder(403)); runner.runTestExceptionExpected(createRoomObject()::getName); } @Test public void getNameError429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetNameUrl()), - new ResponseBuilder(429)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetNameUrl()), + new TestResponseBuilder(429)); runner.runTestExceptionExpected(createRoomObject()::getName); } private void getNameSuccessful(Optional expectedResult, int responseStatus, String nameOfRoom) throws URISyntaxException { String body = String.format("{\"name\": \"%s\"}", nameOfRoom); - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBody(body); - new TestRunnerGet>(new RequestBuilder(createGetNameUrl()), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(createGetNameUrl()), responseBuilder) .runTest(createRoomObject()::getName, expectedResult); } @@ -82,15 +82,15 @@ public void getTopic404() throws URISyntaxException { @Test public void getTopicError403() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), - new ResponseBuilder(403)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetTopicUrl()), + new TestResponseBuilder(403)); runner.runTestExceptionExpected(createRoomObject()::getTopic); } @Test public void getTopic429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetTopicUrl()), - new ResponseBuilder(429)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetTopicUrl()), + new TestResponseBuilder(429)); runner.runTestExceptionExpected(createRoomObject()::getTopic); } @@ -98,9 +98,9 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta throws URISyntaxException { String url = createGetTopicUrl(); String body = String.format("{\"topic\": \"%s\"}", topic); - ResponseBuilder responseBuilder = new ResponseBuilder(responseStatus).setBody(body); + TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBody(body); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createRoomObject()::getTopic, expectedResult); } @@ -108,9 +108,9 @@ private void getTopicSuccessful(Optional expectedResult, int responseSta public void join() throws URISyntaxException { String url = createJoinUrl(); String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); - new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); + new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); } @Test @@ -120,8 +120,8 @@ public void joinError404() throws URISyntaxException { @Test public void joinError403() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createJoinUrl()), - new ResponseBuilder(403)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createJoinUrl()), + new TestResponseBuilder(403)); runner.runPostTest(createRoomObject()::join); } @@ -131,8 +131,8 @@ public void joinError429() throws URISyntaxException { } private void joinExceptionExpected(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createJoinUrl()), - new ResponseBuilder(responseStatus)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createJoinUrl()), + new TestResponseBuilder(responseStatus)); runner.runPostTestExceptionExpected(createRoomObject()::join); } @@ -140,9 +140,9 @@ private void joinExceptionExpected(int responseStatus) throws URISyntaxException public void leave() throws URISyntaxException { String url = createLeaveUrl(); String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(body); + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); - new TestRunnerPostPut(new RequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::leave); + new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::leave); } @Test @@ -161,22 +161,22 @@ public void leaveError429() throws URISyntaxException { } private void leaveErrorWithoutException(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createLeaveUrl()), - new ResponseBuilder(responseStatus)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createLeaveUrl()), + new TestResponseBuilder(responseStatus)); runner.runPostTest(createRoomObject()::leave); } private void leaveExceptionExpected(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createLeaveUrl()), - new ResponseBuilder(responseStatus)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createLeaveUrl()), + new TestResponseBuilder(responseStatus)); runner.runPostTestExceptionExpected(createRoomObject()::leave); } @Test public void sendText() throws URISyntaxException { String url = createSendTextUrl(); - ResponseBuilder responseBuilder = new ResponseBuilder(200); - RequestBuilder requestBuilder = new RequestBuilder(url).setMatchingType(RequestBuilder.MatchingType.REGEX); + TestResponseBuilder responseBuilder = new TestResponseBuilder(200); + TestRequestBuilder requestBuilder = new TestRequestBuilder(url).setMatchingType(TestRequestBuilder.MatchingType.REGEX); String testText = "test text"; new TestRunnerPostPut(requestBuilder, responseBuilder).runPutTest(createRoomObject()::sendText, @@ -199,17 +199,17 @@ public void sendTextError429() throws URISyntaxException { } private void sendTextErrorWithoutException(int responseStatus) throws URISyntaxException { - RequestBuilder requestBuilder = new RequestBuilder(createSendTextUrl()) - .setMatchingType(RequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new ResponseBuilder(responseStatus)); + TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) + .setMatchingType(TestRequestBuilder.MatchingType.REGEX); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new TestResponseBuilder(responseStatus)); String testText = "test text"; runner.runPutTest(createRoomObject()::sendText, testText, sendTextVerifyBody(testText)); } private void sendTextExceptionExpected(int responseStatus) throws URISyntaxException { - RequestBuilder requestBuilder = new RequestBuilder(createSendTextUrl()) - .setMatchingType(RequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new ResponseBuilder(responseStatus)); + TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) + .setMatchingType(TestRequestBuilder.MatchingType.REGEX); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new TestResponseBuilder(responseStatus)); runner.runPutTestExceptionExpected(createRoomObject()::sendText, "test text"); } @@ -224,27 +224,27 @@ public void getJoinedUsers() throws URISyntaxException { String url = createGetJoinedUsersUrl(); String responseBody = String.format("{\"joined\": {\"%s\": \"1\", \"%s\": \"2\"}}", testuser1, testuser2); - ResponseBuilder responseBuilder = new ResponseBuilder(200).setBody(responseBody); + TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(responseBody); List<_MatrixID> expectedResult = new ArrayList<>(); expectedResult.add(new MatrixID(testuser1)); expectedResult.add(new MatrixID(testuser2)); - new TestRunnerGet>(new RequestBuilder(url), responseBuilder) + new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) .runTest(createRoomObject()::getJoinedUsers, expectedResult); } @Test public void getJoinedUsersError404() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetJoinedUsersUrl()), - new ResponseBuilder(404)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetJoinedUsersUrl()), + new TestResponseBuilder(404)); runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); } @Test public void getJoinedUsers429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new RequestBuilder(createGetJoinedUsersUrl()), - new ResponseBuilder(429)); + TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetJoinedUsersUrl()), + new TestResponseBuilder(429)); runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); } diff --git a/src/test/java/io/kamax/matrix/client/RequestBuilder.java b/src/test/java/io/kamax/matrix/client/TestRequestBuilder.java similarity index 88% rename from src/test/java/io/kamax/matrix/client/RequestBuilder.java rename to src/test/java/io/kamax/matrix/client/TestRequestBuilder.java index 12bcf10..00dde7e 100644 --- a/src/test/java/io/kamax/matrix/client/RequestBuilder.java +++ b/src/test/java/io/kamax/matrix/client/TestRequestBuilder.java @@ -20,7 +20,7 @@ package io.kamax.matrix.client; -public class RequestBuilder { +public class TestRequestBuilder { public enum MatchingType { EQUALITY, REGEX @@ -29,11 +29,11 @@ public enum MatchingType { private MatchingType matchingType = MatchingType.EQUALITY; private final String url; - public RequestBuilder(String url) { + public TestRequestBuilder(String url) { this.url = url; } - public RequestBuilder setMatchingType(MatchingType matchingType) { + public TestRequestBuilder setMatchingType(MatchingType matchingType) { this.matchingType = matchingType; return this; } diff --git a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java b/src/test/java/io/kamax/matrix/client/TestResponseBuilder.java similarity index 89% rename from src/test/java/io/kamax/matrix/client/ResponseBuilder.java rename to src/test/java/io/kamax/matrix/client/TestResponseBuilder.java index b135687..1943d08 100644 --- a/src/test/java/io/kamax/matrix/client/ResponseBuilder.java +++ b/src/test/java/io/kamax/matrix/client/TestResponseBuilder.java @@ -24,7 +24,7 @@ import java.util.Map; import java.util.Optional; -public class ResponseBuilder { +public class TestResponseBuilder { private final int status; private Optional contentType = Optional.empty(); @@ -32,7 +32,7 @@ public class ResponseBuilder { private Optional body = Optional.empty(); private Optional bodyFile = Optional.empty(); - public ResponseBuilder(int status) { + public TestResponseBuilder(int status) { this.status = status; } @@ -40,7 +40,7 @@ public int getStatus() { return status; } - public ResponseBuilder setContentType(String contentType) { + public TestResponseBuilder setContentType(String contentType) { this.contentType = Optional.ofNullable(contentType); return this; } @@ -49,7 +49,7 @@ public Optional getContentType() { return contentType; } - public ResponseBuilder putHeader(String header, String value) { + public TestResponseBuilder putHeader(String header, String value) { headers.put(header, value); return this; } @@ -58,7 +58,7 @@ public Map getHeaders() { return headers; } - public ResponseBuilder setBody(String body) { + public TestResponseBuilder setBody(String body) { this.body = Optional.ofNullable(body); return this; } @@ -78,7 +78,7 @@ public Optional getBody() { * Path to the bodyFile * @return The object itself (builder pattern) */ - public ResponseBuilder setBodyFile(String bodyFile) { + public TestResponseBuilder setBodyFile(String bodyFile) { this.bodyFile = Optional.ofNullable(bodyFile); return this; } diff --git a/src/test/java/io/kamax/matrix/client/TestRunner.java b/src/test/java/io/kamax/matrix/client/TestRunner.java index 2238374..ce1c0f1 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunner.java +++ b/src/test/java/io/kamax/matrix/client/TestRunner.java @@ -28,10 +28,10 @@ import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; public class TestRunner { - protected RequestBuilder requestBuilder; - protected ResponseBuilder responseBuilder; + protected TestRequestBuilder requestBuilder; + protected TestResponseBuilder responseBuilder; - public TestRunner(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + public TestRunner(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { this.requestBuilder = requestBuilder; this.responseBuilder = responseBuilder; } diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java index 14b4611..bc18e46 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java @@ -30,7 +30,7 @@ public class TestRunnerGet extends TestRunner { - public TestRunnerGet(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + public TestRunnerGet(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { super(requestBuilder, responseBuilder); } diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java index 2b80c88..67f9f99 100644 --- a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java +++ b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java @@ -30,7 +30,7 @@ public class TestRunnerPostPut

extends TestRunner { - public TestRunnerPostPut(RequestBuilder requestBuilder, ResponseBuilder responseBuilder) { + public TestRunnerPostPut(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { super(requestBuilder, responseBuilder); } @@ -117,7 +117,7 @@ private void checkErrorInfo(MatrixClientRequestException e) { private UrlPattern getUrlPattern() { String url = requestBuilder.getUrl(); - if (requestBuilder.getMatchingType() == RequestBuilder.MatchingType.REGEX) { + if (requestBuilder.getMatchingType() == TestRequestBuilder.MatchingType.REGEX) { return urlMatching(url); } diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index df1a942..febcf39 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -34,14 +34,14 @@ public void createUser() throws URISyntaxException { String url = createUserUrl(); String verifyBody = "\"username\":\"testuser\""; - new TestRunnerPostPut(new RequestBuilder(url), new ResponseBuilder(200)) + new TestRunnerPostPut(new TestRequestBuilder(url), new TestResponseBuilder(200)) .runPostTest(createClientObject()::createUser, "testuser", verifyBody); } @Test public void createUserError429() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createUserUrl()), - new ResponseBuilder(429)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createUserUrl()), + new TestResponseBuilder(429)); runner.runPostTestExceptionExpected(createClientObject()::createUser, "testuser"); } diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index 2dac619..120984a 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -31,18 +31,18 @@ public class MatrixHttpClientTest extends MatrixHttpTest { @Test public void setDisplayname() throws URISyntaxException { String url = createSetDisplaynameUrl(); - ResponseBuilder responseBuilder = new ResponseBuilder(200); + TestResponseBuilder responseBuilder = new TestResponseBuilder(200); String displayname = "new name"; String verifyBody = String.format("\"displayname\":\"%s\"", displayname); - new TestRunnerPostPut(new RequestBuilder(url), responseBuilder) + new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder) .runPutTest(createClientObject()::setDisplayName, displayname, verifyBody); } @Test public void setDisplaynameError429() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new RequestBuilder(createSetDisplaynameUrl()), - new ResponseBuilder(429)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createSetDisplaynameUrl()), + new TestResponseBuilder(429)); runner.runPutTestExceptionExpected(createClientObject()::setDisplayName, "new name"); } From 82c133ac8136cf3f859c352dd63fc8c80d7efa8c Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Tue, 3 Oct 2017 18:05:45 +0200 Subject: [PATCH 14/22] Fix formatting issue --- .../io/kamax/matrix/client/MatrixHttpRoomTest.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 93814a3..ffc7455 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -142,7 +142,8 @@ public void leave() throws URISyntaxException { String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); - new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::leave); + new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder) + .runPostTest(createRoomObject()::leave); } @Test @@ -176,7 +177,8 @@ private void leaveExceptionExpected(int responseStatus) throws URISyntaxExceptio public void sendText() throws URISyntaxException { String url = createSendTextUrl(); TestResponseBuilder responseBuilder = new TestResponseBuilder(200); - TestRequestBuilder requestBuilder = new TestRequestBuilder(url).setMatchingType(TestRequestBuilder.MatchingType.REGEX); + TestRequestBuilder requestBuilder = new TestRequestBuilder(url) + .setMatchingType(TestRequestBuilder.MatchingType.REGEX); String testText = "test text"; new TestRunnerPostPut(requestBuilder, responseBuilder).runPutTest(createRoomObject()::sendText, @@ -201,7 +203,8 @@ public void sendTextError429() throws URISyntaxException { private void sendTextErrorWithoutException(int responseStatus) throws URISyntaxException { TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) .setMatchingType(TestRequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new TestResponseBuilder(responseStatus)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, + new TestResponseBuilder(responseStatus)); String testText = "test text"; runner.runPutTest(createRoomObject()::sendText, testText, sendTextVerifyBody(testText)); } @@ -209,7 +212,8 @@ private void sendTextErrorWithoutException(int responseStatus) throws URISyntaxE private void sendTextExceptionExpected(int responseStatus) throws URISyntaxException { TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) .setMatchingType(TestRequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, new TestResponseBuilder(responseStatus)); + TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, + new TestResponseBuilder(responseStatus)); runner.runPutTestExceptionExpected(createRoomObject()::sendText, "test text"); } From 9839132900b208e5e56f8043daf61c84cfea2439 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Thu, 5 Oct 2017 19:53:03 +0200 Subject: [PATCH 15/22] Refactor topic tests --- .../matrix/client/MatrixHttpRoomTest.java | 89 ++++++++++++------- .../kamax/matrix/client/MatrixHttpTest.java | 32 +++++-- .../MatrixApplicationServiceClientTest.java | 4 +- 3 files changed, 82 insertions(+), 43 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index ffc7455..eca4361 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -23,6 +23,7 @@ import io.kamax.matrix.MatrixID; import io.kamax.matrix._MatrixID; +import org.hamcrest.core.IsEqual; import org.junit.Test; import java.net.URISyntaxException; @@ -30,8 +31,24 @@ import java.util.List; import java.util.Optional; +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + public class MatrixHttpRoomTest extends MatrixHttpTest { - private static final String ROOM_ID = "roomId892347847"; + private String errcode403 = "M_FORBIDDEN"; + private String error403 = "Access denied."; + private String errcode404 = "M_NOT_FOUND"; + private String error404 = "Element not found."; + private String errcode429 = "M_LIMIT_EXCEEDED"; + private String error429 = "Too many requests have been sent in a short period of time. Wait a while then try again."; + + private String roomId = "roomId892347847"; + + private String topicUrl = String.format("/_matrix/client/r0/rooms/%s/state/m.room.topic", roomId) + tokenParameter; + private String testTopic = "test topic"; + private String topicResponse = String.format("{\"topic\": \"%s\"}", testTopic); @Test public void getName() throws URISyntaxException { @@ -70,44 +87,52 @@ private void getNameSuccessful(Optional expectedResult, int responseStat @Test public void getTopic() throws URISyntaxException { - String topic = "test topic"; - getTopicSuccessful(Optional.of(topic), 200, topic); + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(200).withBody(topicResponse))); + + assertThat(createRoomObject().getTopic(), IsEqual.equalTo(Optional.of(testTopic))); + } @Test - public void getTopic404() throws URISyntaxException { - String topic = "test topic"; - getTopicSuccessful(Optional.empty(), 404, topic); + public void getTopicError404() throws URISyntaxException { + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(404).withBody(topicResponse))); + + assertThat(createRoomObject().getTopic(), IsEqual.equalTo(Optional.empty())); + } @Test public void getTopicError403() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetTopicUrl()), - new TestResponseBuilder(403)); - runner.runTestExceptionExpected(createRoomObject()::getTopic); - } + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(403) + .withBody(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", errcode403, error403)))); - @Test - public void getTopic429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetTopicUrl()), - new TestResponseBuilder(429)); - runner.runTestExceptionExpected(createRoomObject()::getTopic); + try { + createRoomObject().getTopic(); + } catch (MatrixClientRequestException e) { + checkErrorInfo(e, errcode403, error403); + return; + } + fail("In this case, an exception has to be thrown."); } - private void getTopicSuccessful(Optional expectedResult, int responseStatus, String topic) - throws URISyntaxException { - String url = createGetTopicUrl(); - String body = String.format("{\"topic\": \"%s\"}", topic); - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBody(body); + @Test + public void getTopicError429() throws URISyntaxException { + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(429) + .withBody(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", errcode429, error429)))); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createRoomObject()::getTopic, expectedResult); + try { + createRoomObject().getTopic(); + } catch (MatrixClientRequestException e) { + checkErrorInfo(e, errcode429, error429); + return; + } + fail("In this case, an exception has to be thrown."); } @Test public void join() throws URISyntaxException { String url = createJoinUrl(); - String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); + String body = String.format("{\"roomId\": \"%s\"}", roomId); TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); @@ -139,7 +164,7 @@ private void joinExceptionExpected(int responseStatus) throws URISyntaxException @Test public void leave() throws URISyntaxException { String url = createLeaveUrl(); - String body = String.format("{\"roomId\": \"%s\"}", ROOM_ID); + String body = String.format("{\"roomId\": \"%s\"}", roomId); TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder) @@ -254,31 +279,27 @@ public void getJoinedUsers429() throws URISyntaxException { private MatrixHttpRoom createRoomObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); - return new MatrixHttpRoom(context, ROOM_ID); + return new MatrixHttpRoom(context, roomId); } private String createGetNameUrl() { - return String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", ROOM_ID) + getAcessTokenParameter(); - } - - private String createGetTopicUrl() { - return String.format("/_matrix/client/r0/rooms/%s/state/m.room.topic", ROOM_ID) + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", roomId) + getAcessTokenParameter(); } private String createJoinUrl() { - return String.format("/_matrix/client/r0/rooms/%s/join", ROOM_ID) + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/join", roomId) + getAcessTokenParameter(); } private String createLeaveUrl() { - return String.format("/_matrix/client/r0/rooms/%s/leave", ROOM_ID) + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/leave", roomId) + getAcessTokenParameter(); } private String createSendTextUrl() { - return String.format("/_matrix/client/r0/rooms/%s/send/m.room.message/([0-9.]+)\\", ROOM_ID) + return String.format("/_matrix/client/r0/rooms/%s/send/m.room.message/([0-9.]+)\\", roomId) + getAcessTokenParameter(); } private String createGetJoinedUsersUrl() { - return String.format("/_matrix/client/r0/rooms/%s/joined_members", ROOM_ID) + getAcessTokenParameter(); + return String.format("/_matrix/client/r0/rooms/%s/joined_members", roomId) + getAcessTokenParameter(); } } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java index 8fd7ebc..b6b5963 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -22,31 +22,49 @@ import com.github.tomakehurst.wiremock.junit.WireMockRule; +import io.kamax.matrix.MatrixErrorInfo; import io.kamax.matrix.MatrixID; import io.kamax.matrix.hs.MatrixHomeserver; import org.junit.Rule; import java.net.URISyntaxException; +import java.util.Optional; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; +import static junit.framework.TestCase.assertEquals; + +import static org.junit.Assert.assertTrue; public class MatrixHttpTest { - protected static final String TEST_TOKEN = "testToken"; - protected static final int PORT = 8098; - protected static final String RESOURCE_PATH = "src/test/resources/wiremock"; + protected String testToken = "testToken"; + protected String tokenParameter = "?access_token=" + testToken; + protected int port = 8098; + protected String resourcePath = "src/test/resources/wiremock"; @Rule - public WireMockRule wireMockRule = new WireMockRule(options().port(PORT).usingFilesUnderDirectory(RESOURCE_PATH)); + public WireMockRule wireMockRule = new WireMockRule(options().port(port).usingFilesUnderDirectory(resourcePath)); protected MatrixClientContext createClientContext() throws URISyntaxException { String domain = "localhost"; - String baseUrl = "http://localhost:" + PORT; + String baseUrl = "http://localhost:" + port; MatrixHomeserver hs = new MatrixHomeserver(domain, baseUrl); - return new MatrixClientContext(hs, new MatrixID("testuser", domain), TEST_TOKEN); + return new MatrixClientContext(hs, new MatrixID("testuser", domain), testToken); } protected String getAcessTokenParameter() { - return "?access_token=" + TEST_TOKEN; + return "?access_token=" + testToken; + } + + protected void checkErrorInfo(MatrixClientRequestException e, String expectedErrcode, String expectedError) { + // TODO at the moment not every call throws a MatrixClientRequestException, so we cannot always evaluate the + // error. This code can be activated after the upcoming refactoring. + + Optional errorOptional = e.getError(); + assertTrue(errorOptional.isPresent()); + assertEquals(errorOptional.get().getErrcode(), expectedErrcode); + assertEquals(errorOptional.get().getError(), expectedError); + } + } diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index febcf39..98b97d3 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -51,9 +51,9 @@ private String createUserUrl() throws URISyntaxException { private MatrixApplicationServiceClient createClientObject() throws URISyntaxException { String domain = "localhost"; - String baseUrl = "http://localhost:" + PORT; + String baseUrl = "http://localhost:" + port; MatrixHomeserver hs = new MatrixHomeserver(domain, baseUrl); - return new MatrixApplicationServiceClient(hs, TEST_TOKEN, "testuser"); + return new MatrixApplicationServiceClient(hs, testToken, "testuser"); } } From 9beb59eabf93f816410256d04fb89ef3e4726b11 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Thu, 5 Oct 2017 21:39:37 +0200 Subject: [PATCH 16/22] Refactor test of getName --- .../matrix/client/MatrixHttpRoomTest.java | 70 ++++++++----------- .../kamax/matrix/client/MatrixHttpTest.java | 32 ++++++--- 2 files changed, 55 insertions(+), 47 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index eca4361..610950c 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -37,79 +37,76 @@ import static org.junit.Assert.fail; public class MatrixHttpRoomTest extends MatrixHttpTest { - private String errcode403 = "M_FORBIDDEN"; - private String error403 = "Access denied."; - private String errcode404 = "M_NOT_FOUND"; - private String error404 = "Element not found."; - private String errcode429 = "M_LIMIT_EXCEEDED"; - private String error429 = "Too many requests have been sent in a short period of time. Wait a while then try again."; - private String roomId = "roomId892347847"; + private String nameUrl = String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", roomId) + tokenParameter; + private String nameOfRoom = "test room"; + private String nameResponse = String.format("{\"name\": \"%s\"}", nameOfRoom); + private String topicUrl = String.format("/_matrix/client/r0/rooms/%s/state/m.room.topic", roomId) + tokenParameter; private String testTopic = "test topic"; private String topicResponse = String.format("{\"topic\": \"%s\"}", testTopic); @Test public void getName() throws URISyntaxException { - String nameOfRoom = "test room"; - getNameSuccessful(Optional.of(nameOfRoom), 200, nameOfRoom); + stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(200).withBody(nameResponse))); + assertThat(createRoomObject().getName(), IsEqual.equalTo(Optional.of(nameOfRoom))); } @Test public void getName404() throws URISyntaxException { - String nameOfRoom = "test room"; - getNameSuccessful(Optional.empty(), 404, nameOfRoom); + stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(404).withBody(nameResponse))); + assertThat(createRoomObject().getName(), IsEqual.equalTo(Optional.empty())); } @Test public void getNameError403() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetNameUrl()), - new TestResponseBuilder(403)); - runner.runTestExceptionExpected(createRoomObject()::getName); + stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + + try { + createRoomObject().getName(); + } catch (MatrixClientRequestException e) { + // TODO getName does not throw Exceptions with error infos, yet + // checkErrorInfo403(e); + return; + } + fail("In this case, an exception has to be thrown."); } @Test public void getNameError429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetNameUrl()), - new TestResponseBuilder(429)); - runner.runTestExceptionExpected(createRoomObject()::getName); - } - - private void getNameSuccessful(Optional expectedResult, int responseStatus, String nameOfRoom) - throws URISyntaxException { - String body = String.format("{\"name\": \"%s\"}", nameOfRoom); - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBody(body); + stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(429).withBody(error403Response))); - new TestRunnerGet>(new TestRequestBuilder(createGetNameUrl()), responseBuilder) - .runTest(createRoomObject()::getName, expectedResult); + try { + createRoomObject().getName(); + } catch (MatrixClientRequestException e) { + // TODO getName does not throw Exceptions with error infos, yet + // checkErrorInfo429(e); + return; + } + fail("In this case, an exception has to be thrown."); } @Test public void getTopic() throws URISyntaxException { stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(200).withBody(topicResponse))); - assertThat(createRoomObject().getTopic(), IsEqual.equalTo(Optional.of(testTopic))); - } @Test public void getTopicError404() throws URISyntaxException { stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(404).withBody(topicResponse))); - assertThat(createRoomObject().getTopic(), IsEqual.equalTo(Optional.empty())); - } @Test public void getTopicError403() throws URISyntaxException { - stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(403) - .withBody(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", errcode403, error403)))); + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); try { createRoomObject().getTopic(); } catch (MatrixClientRequestException e) { - checkErrorInfo(e, errcode403, error403); + checkErrorInfo403(e); return; } fail("In this case, an exception has to be thrown."); @@ -117,13 +114,12 @@ public void getTopicError403() throws URISyntaxException { @Test public void getTopicError429() throws URISyntaxException { - stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(429) - .withBody(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", errcode429, error429)))); + stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); try { createRoomObject().getTopic(); } catch (MatrixClientRequestException e) { - checkErrorInfo(e, errcode429, error429); + checkErrorInfo429(e); return; } fail("In this case, an exception has to be thrown."); @@ -282,10 +278,6 @@ private MatrixHttpRoom createRoomObject() throws URISyntaxException { return new MatrixHttpRoom(context, roomId); } - private String createGetNameUrl() { - return String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", roomId) + getAcessTokenParameter(); - } - private String createJoinUrl() { return String.format("/_matrix/client/r0/rooms/%s/join", roomId) + getAcessTokenParameter(); } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java index b6b5963..24e1b56 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -42,6 +42,20 @@ public class MatrixHttpTest { protected int port = 8098; protected String resourcePath = "src/test/resources/wiremock"; + private String errorResponseTemplate = "{\"errcode\": \"%s\", \"error\": \"%s\"}"; + + private String errcode403 = "M_FORBIDDEN"; + private String error403 = "Access denied."; + protected String error403Response = String.format(errorResponseTemplate, errcode403, error403); + + private String errcode404 = "M_NOT_FOUND"; + private String error404 = "Element not found."; + protected String error404Response = String.format(errorResponseTemplate, errcode404, error404); + + private String errcode429 = "M_LIMIT_EXCEEDED"; + private String error429 = "Too many requests have been sent in a short period of time. Wait a while then try again."; + protected String error429Response = String.format(errorResponseTemplate, errcode429, error429); + @Rule public WireMockRule wireMockRule = new WireMockRule(options().port(port).usingFilesUnderDirectory(resourcePath)); @@ -56,15 +70,17 @@ protected String getAcessTokenParameter() { return "?access_token=" + testToken; } - protected void checkErrorInfo(MatrixClientRequestException e, String expectedErrcode, String expectedError) { - // TODO at the moment not every call throws a MatrixClientRequestException, so we cannot always evaluate the - // error. This code can be activated after the upcoming refactoring. - - Optional errorOptional = e.getError(); - assertTrue(errorOptional.isPresent()); - assertEquals(errorOptional.get().getErrcode(), expectedErrcode); - assertEquals(errorOptional.get().getError(), expectedError); + protected void checkErrorInfo403(MatrixClientRequestException e) { + checkErrorInfo(errcode403, error403, e.getError()); + } + protected void checkErrorInfo429(MatrixClientRequestException e) { + checkErrorInfo(errcode429, error429, e.getError()); } + private void checkErrorInfo(String errcode, String error, Optional errorOptional) { + assertTrue(errorOptional.isPresent()); + assertEquals(errorOptional.get().getErrcode(), errcode); + assertEquals(errorOptional.get().getError(), error); + } } From b125c81a28f6fdf512ee98ecc838cd14257687b8 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 6 Oct 2017 21:43:06 +0200 Subject: [PATCH 17/22] Correct regular expression --- src/main/java/io/kamax/matrix/client/MatrixHttpContent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java b/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java index 4f526c5..7316e8b 100644 --- a/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java +++ b/src/main/java/io/kamax/matrix/client/MatrixHttpContent.java @@ -45,7 +45,7 @@ public class MatrixHttpContent extends AMatrixHttpClient implements _MatrixConte private Logger log = LoggerFactory.getLogger(MatrixHttpContent.class); - private final Pattern filenamePattern = Pattern.compile("filename=\"?(?.+[^\";])"); + private final Pattern filenamePattern = Pattern.compile("filename=\"?(?[^\";]+)"); private URI address; private String type; From dd6358277e241a7eb846433c6077c6914e891679 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 6 Oct 2017 22:43:22 +0200 Subject: [PATCH 18/22] Correct comment --- .../java/io/kamax/matrix/client/MatrixHttpContentTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 4ff1495..880c8d6 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -31,8 +31,8 @@ import java.util.Optional; /* - * TODO As the spec is outdated, I'm not sure, if the error 403 can really happen in this case. Has to be re-checked, - * when the spec is up to date, again. + * TODO As the spec is outdated, I'm not sure if the error 403 can really happen in these test cases. This class has + * to be checked for correctness, when the matrix's spec is updated. */ public class MatrixHttpContentTest extends MatrixHttpTest { private URI address = new URI("mxc://localhost/testAddress.txt"); From 0dc74939eadc58024f082e6acd9a8d0804e04fec Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 6 Oct 2017 23:01:28 +0200 Subject: [PATCH 19/22] Move to JUnit 5 --- build.gradle | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7ef3c79..564077a 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,14 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.1' + } +} plugins { id "com.diffplug.gradle.spotless" version "3.5.2" @@ -27,6 +35,7 @@ version = '0.0.2' apply plugin: 'java' apply plugin: 'maven' +apply plugin: 'org.junit.platform.gradle.plugin' configurations { deployerJars @@ -43,7 +52,8 @@ dependencies { compile 'org.apache.httpcomponents:fluent-hc:4.5.3' compile 'com.google.code.gson:gson:2.8.0' - testCompile 'junit:junit:4.12' + testCompile "org.junit.jupiter:junit-jupiter-api:5.0.1" + testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.1" testCompile "com.github.tomakehurst:wiremock:2.8.0" testRuntimeOnly 'org.slf4j:slf4j-simple:1.7.25' @@ -87,3 +97,7 @@ spotless { importOrderFile 'spotless.importorder' } } + +junitPlatform { + enableStandardTestTask true +} From 8881e0ade22ce4ac9dd9254964099508ffce17bc Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 6 Oct 2017 23:13:51 +0200 Subject: [PATCH 20/22] Revert to JUnit 5.0.0 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 564077a..8f351c7 100644 --- a/build.gradle +++ b/build.gradle @@ -52,8 +52,8 @@ dependencies { compile 'org.apache.httpcomponents:fluent-hc:4.5.3' compile 'com.google.code.gson:gson:2.8.0' - testCompile "org.junit.jupiter:junit-jupiter-api:5.0.1" - testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.1" + testCompile "org.junit.jupiter:junit-jupiter-api:5.0.0" + testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.0" testCompile "com.github.tomakehurst:wiremock:2.8.0" testRuntimeOnly 'org.slf4j:slf4j-simple:1.7.25' From 611fac313925c94dd0624b9de046ea40a7b1b484 Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Fri, 6 Oct 2017 23:53:29 +0200 Subject: [PATCH 21/22] Port MatrixHttpRoomTest to JUnit 5 --- .../matrix/client/MatrixHttpRoomTest.java | 237 ++++++++---------- .../kamax/matrix/client/MatrixHttpTest.java | 4 + 2 files changed, 107 insertions(+), 134 deletions(-) diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java index 610950c..f2410e5 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpRoomTest.java @@ -34,10 +34,11 @@ import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.junit.Assert.assertThat; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertThrows; public class MatrixHttpRoomTest extends MatrixHttpTest { private String roomId = "roomId892347847"; + private String eventId = "YUwRidLecu"; private String nameUrl = String.format("/_matrix/client/r0/rooms/%s/state/m.room.name", roomId) + tokenParameter; private String nameOfRoom = "test room"; @@ -47,6 +48,24 @@ public class MatrixHttpRoomTest extends MatrixHttpTest { private String testTopic = "test topic"; private String topicResponse = String.format("{\"topic\": \"%s\"}", testTopic); + private String joinUrl = String.format("/_matrix/client/r0/rooms/%s/join", roomId) + tokenParameter; + private String joinResponse = String.format("{\"roomId\": \"%s\"}", roomId); + + private String leaveUrl = String.format("/_matrix/client/r0/rooms/%s/leave", roomId) + tokenParameter; + private String leaveResponse = String.format("{\"roomId\": \"%s\"}", roomId); + + private String sendTextUrl = String.format("/_matrix/client/r0/rooms/%s/send/m.room.message/([0-9.]+)\\", roomId) + + tokenParameter; + private String testText = "test text"; + private String sendTextResponse = String.format("{\"event_id\": \"%s\"}", eventId) + tokenParameter; + + private String getJoinedUsersUrl = String.format("/_matrix/client/r0/rooms/%s/joined_members", roomId) + + tokenParameter; + private String joinedUser1 = "@test:testserver.org"; + private String joinedUser2 = "@test2:testserver.org"; + private String getJoinedUsersResponse = String.format("{\"joined\": {\"%s\": \"1\", \"%s\": \"2\"}}", joinedUser1, + joinedUser2); + @Test public void getName() throws URISyntaxException { stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(200).withBody(nameResponse))); @@ -63,28 +82,18 @@ public void getName404() throws URISyntaxException { public void getNameError403() throws URISyntaxException { stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); - try { - createRoomObject().getName(); - } catch (MatrixClientRequestException e) { - // TODO getName does not throw Exceptions with error infos, yet - // checkErrorInfo403(e); - return; - } - fail("In this case, an exception has to be thrown."); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::getName); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo403(e); } @Test public void getNameError429() throws URISyntaxException { stubFor(get(urlEqualTo(nameUrl)).willReturn(aResponse().withStatus(429).withBody(error403Response))); - try { - createRoomObject().getName(); - } catch (MatrixClientRequestException e) { - // TODO getName does not throw Exceptions with error infos, yet - // checkErrorInfo429(e); - return; - } - fail("In this case, an exception has to be thrown."); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::getName); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo429(e); } @Test @@ -103,195 +112,155 @@ public void getTopicError404() throws URISyntaxException { public void getTopicError403() throws URISyntaxException { stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); - try { - createRoomObject().getTopic(); - } catch (MatrixClientRequestException e) { - checkErrorInfo403(e); - return; - } - fail("In this case, an exception has to be thrown."); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::getTopic); + checkErrorInfo403(e); } @Test public void getTopicError429() throws URISyntaxException { stubFor(get(urlEqualTo(topicUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); - try { - createRoomObject().getTopic(); - } catch (MatrixClientRequestException e) { - checkErrorInfo429(e); - return; - } - fail("In this case, an exception has to be thrown."); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::getTopic); + checkErrorInfo429(e); } @Test public void join() throws URISyntaxException { - String url = createJoinUrl(); - String body = String.format("{\"roomId\": \"%s\"}", roomId); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); - - new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder).runPostTest(createRoomObject()::join); + stubFor(post(urlEqualTo(joinUrl)).willReturn(aResponse().withStatus(200).withBody(joinResponse))); + createRoomObject().join(); } @Test public void joinError404() throws URISyntaxException { - joinExceptionExpected(404); + stubFor(post(urlEqualTo(joinUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::join); + checkErrorInfo404(e); } @Test public void joinError403() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createJoinUrl()), - new TestResponseBuilder(403)); - runner.runPostTest(createRoomObject()::join); + stubFor(post(urlEqualTo(joinUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + + // TODO After the refactoring, this test will throw a MatrixClientRequestException + createRoomObject().join(); + // MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::join); + // checkErrorInfo403(e); } @Test public void joinError429() throws URISyntaxException { - joinExceptionExpected(429); - } + stubFor(post(urlEqualTo(joinUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); - private void joinExceptionExpected(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createJoinUrl()), - new TestResponseBuilder(responseStatus)); - runner.runPostTestExceptionExpected(createRoomObject()::join); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::join); + checkErrorInfo429(e); } @Test public void leave() throws URISyntaxException { - String url = createLeaveUrl(); - String body = String.format("{\"roomId\": \"%s\"}", roomId); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(body); - - new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder) - .runPostTest(createRoomObject()::leave); + stubFor(post(urlEqualTo(leaveUrl)).willReturn(aResponse().withStatus(200).withBody(leaveResponse))); + createRoomObject().leave(); } @Test - public void leaveError404() throws URISyntaxException { - leaveErrorWithoutException(404); + public void leaveError403() throws URISyntaxException { + stubFor(post(urlEqualTo(leaveUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + + // TODO After the refactoring, this test will throw a MatrixClientRequestException + createRoomObject().leave(); + // MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::leave); + // checkErrorInfo403(e); } @Test - public void leaveError403() throws URISyntaxException { - leaveErrorWithoutException(403); + public void leaveError404() throws URISyntaxException { + stubFor(post(urlEqualTo(leaveUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + + // TODO After the refactoring, this test will throw a MatrixClientRequestException + createRoomObject().leave(); + // MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::leave); + // checkErrorInfo404(e); } @Test public void leaveError429() throws URISyntaxException { - leaveExceptionExpected(429); - } - - private void leaveErrorWithoutException(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createLeaveUrl()), - new TestResponseBuilder(responseStatus)); - runner.runPostTest(createRoomObject()::leave); - } + stubFor(post(urlEqualTo(leaveUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); - private void leaveExceptionExpected(int responseStatus) throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createLeaveUrl()), - new TestResponseBuilder(responseStatus)); - runner.runPostTestExceptionExpected(createRoomObject()::leave); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, createRoomObject()::leave); + checkErrorInfo429(e); } @Test public void sendText() throws URISyntaxException { - String url = createSendTextUrl(); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200); - TestRequestBuilder requestBuilder = new TestRequestBuilder(url) - .setMatchingType(TestRequestBuilder.MatchingType.REGEX); - - String testText = "test text"; - new TestRunnerPostPut(requestBuilder, responseBuilder).runPutTest(createRoomObject()::sendText, - testText, sendTextVerifyBody(testText)); - } - - @Test - public void sendTextError404() throws URISyntaxException { - sendTextExceptionExpected(404); + stubFor(put(urlMatching(sendTextUrl)).willReturn(aResponse().withStatus(200).withBody(sendTextResponse))); + createRoomObject().sendText(testText); } @Test public void sendTextError403() throws URISyntaxException { - sendTextErrorWithoutException(403); + stubFor(put(urlMatching(sendTextUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + + // TODO After the refactoring, this test will throw a MatrixClientRequestException + createRoomObject().sendText(testText); + // MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + // () -> createRoomObject().sendText(testText)); + // checkErrorInfo404(e); } @Test - public void sendTextError429() throws URISyntaxException { - sendTextExceptionExpected(429); - } + public void sendTextError404() throws URISyntaxException { + stubFor(put(urlMatching(sendTextUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); - private void sendTextErrorWithoutException(int responseStatus) throws URISyntaxException { - TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) - .setMatchingType(TestRequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, - new TestResponseBuilder(responseStatus)); - String testText = "test text"; - runner.runPutTest(createRoomObject()::sendText, testText, sendTextVerifyBody(testText)); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + () -> createRoomObject().sendText(testText)); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo404(e); } - private void sendTextExceptionExpected(int responseStatus) throws URISyntaxException { - TestRequestBuilder requestBuilder = new TestRequestBuilder(createSendTextUrl()) - .setMatchingType(TestRequestBuilder.MatchingType.REGEX); - TestRunnerPostPut runner = new TestRunnerPostPut<>(requestBuilder, - new TestResponseBuilder(responseStatus)); - runner.runPutTestExceptionExpected(createRoomObject()::sendText, "test text"); - } + @Test + public void sendTextError429() throws URISyntaxException { + stubFor(put(urlMatching(sendTextUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); - private String sendTextVerifyBody(String testText) { - return String.format("\"msgtype\":\"m.text\",\"body\":\"%s\"", testText); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + () -> createRoomObject().sendText(testText)); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo429(e); } @Test public void getJoinedUsers() throws URISyntaxException { - String testuser1 = "@test:testserver.org"; - String testuser2 = "@test2:testserver.org"; - - String url = createGetJoinedUsersUrl(); - String responseBody = String.format("{\"joined\": {\"%s\": \"1\", \"%s\": \"2\"}}", testuser1, testuser2); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBody(responseBody); + stubFor(get(urlEqualTo(getJoinedUsersUrl)) + .willReturn(aResponse().withStatus(200).withBody(getJoinedUsersResponse))); List<_MatrixID> expectedResult = new ArrayList<>(); - expectedResult.add(new MatrixID(testuser1)); - expectedResult.add(new MatrixID(testuser2)); + expectedResult.add(new MatrixID(joinedUser1)); + expectedResult.add(new MatrixID(joinedUser2)); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createRoomObject()::getJoinedUsers, expectedResult); + assertThat(createRoomObject().getJoinedUsers(), IsEqual.equalTo(expectedResult)); } @Test public void getJoinedUsersError404() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetJoinedUsersUrl()), - new TestResponseBuilder(404)); - runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); + stubFor(get(urlEqualTo(getJoinedUsersUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + createRoomObject()::getJoinedUsers); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo404(e); } @Test public void getJoinedUsers429() throws URISyntaxException { - TestRunnerGet> runner = new TestRunnerGet<>(new TestRequestBuilder(createGetJoinedUsersUrl()), - new TestResponseBuilder(429)); - runner.runTestExceptionExpected(createRoomObject()::getJoinedUsers); + stubFor(get(urlEqualTo(getJoinedUsersUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); + + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + createRoomObject()::getJoinedUsers); + // TODO After the refactoring, the exception will contain a proper MatrixErrorInfo object + // checkErrorInfo404(e); } private MatrixHttpRoom createRoomObject() throws URISyntaxException { MatrixClientContext context = createClientContext(); return new MatrixHttpRoom(context, roomId); } - - private String createJoinUrl() { - return String.format("/_matrix/client/r0/rooms/%s/join", roomId) + getAcessTokenParameter(); - } - - private String createLeaveUrl() { - return String.format("/_matrix/client/r0/rooms/%s/leave", roomId) + getAcessTokenParameter(); - } - - private String createSendTextUrl() { - return String.format("/_matrix/client/r0/rooms/%s/send/m.room.message/([0-9.]+)\\", roomId) - + getAcessTokenParameter(); - } - - private String createGetJoinedUsersUrl() { - return String.format("/_matrix/client/r0/rooms/%s/joined_members", roomId) + getAcessTokenParameter(); - } } diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java index 24e1b56..4336583 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpTest.java @@ -74,6 +74,10 @@ protected void checkErrorInfo403(MatrixClientRequestException e) { checkErrorInfo(errcode403, error403, e.getError()); } + protected void checkErrorInfo404(MatrixClientRequestException e) { + checkErrorInfo(errcode404, error404, e.getError()); + } + protected void checkErrorInfo429(MatrixClientRequestException e) { checkErrorInfo(errcode429, error429, e.getError()); } From ee285bc9907ab331d2ab684da3e9e454198729fb Mon Sep 17 00:00:00 2001 From: Arne Augenstein Date: Sat, 7 Oct 2017 13:01:13 +0200 Subject: [PATCH 22/22] Port the rest of the tests to JUnit 5 --- .../matrix/client/MatrixHttpContentTest.java | 167 +++++++----------- .../matrix/client/TestRequestBuilder.java | 49 ----- .../matrix/client/TestResponseBuilder.java | 115 ------------ .../io/kamax/matrix/client/TestRunner.java | 61 ------- .../io/kamax/matrix/client/TestRunnerGet.java | 58 ------ .../matrix/client/TestRunnerPostPut.java | 127 ------------- .../MatrixApplicationServiceClientTest.java | 23 +-- .../client/regular/MatrixHttpClientTest.java | 34 ++-- 8 files changed, 98 insertions(+), 536 deletions(-) delete mode 100644 src/test/java/io/kamax/matrix/client/TestRequestBuilder.java delete mode 100644 src/test/java/io/kamax/matrix/client/TestResponseBuilder.java delete mode 100644 src/test/java/io/kamax/matrix/client/TestRunner.java delete mode 100644 src/test/java/io/kamax/matrix/client/TestRunnerGet.java delete mode 100644 src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java diff --git a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java index 880c8d6..81ccd97 100644 --- a/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java +++ b/src/test/java/io/kamax/matrix/client/MatrixHttpContentTest.java @@ -20,6 +20,7 @@ package io.kamax.matrix.client; +import org.hamcrest.core.IsEqual; import org.junit.Test; import java.io.File; @@ -30,177 +31,149 @@ import java.nio.file.Paths; import java.util.Optional; +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; + /* * TODO As the spec is outdated, I'm not sure if the error 403 can really happen in these test cases. This class has - * to be checked for correctness, when the matrix's spec is updated. + * to be checked for correctness, when matrix's spec is updated. */ public class MatrixHttpContentTest extends MatrixHttpTest { - private URI address = new URI("mxc://localhost/testAddress.txt"); + private String bodyFilename = "textfile.txt"; + private URI address = new URI("mxc://localhost/testpath/" + bodyFilename); + private String downloadUrl = "/_matrix/media/v1/download/" + address.getHost() + address.getPath() + tokenParameter; public MatrixHttpContentTest() throws URISyntaxException { } @Test public void isValid() throws URISyntaxException { - isValidSuccessful(true, 200); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain"))); + assertTrue(createContentObject().isValid()); } @Test public void isValidMissingContentType() throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, - false); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(200).withBodyFile(bodyFilename))); + assertFalse(createContentObject().isValid()); } @Test public void isValidError404() throws URISyntaxException { - isValidSuccessful(false, 404); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + assertFalse(createContentObject().isValid()); } @Test public void isValidError403() throws URISyntaxException { - isValidSuccessful(false, 403); - } - - private void isValidSuccessful(boolean expectedResult, int responseStatus) throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// - .setContentType("text/plain"); - - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::isValid, - expectedResult); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + assertFalse(createContentObject().isValid()); } @Test public void getType() throws URISyntaxException, IOException { - getTypeSuccessful(200, "text/plain"); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain"))); + assertEquals("text/plain", createContentObject().getType()); } @Test public void getTypeMissingContentType() throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, - null); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(200).withBodyFile(bodyFilename))); + assertNull(createContentObject().getType()); } @Test public void getTypeError404() throws URISyntaxException, IOException { - getTypeSuccessful(404, null); + stubFor(get(urlEqualTo(downloadUrl)) + .willReturn(aResponse().withStatus(404).withStatus(404).withBody(error404Response))); + assertNull(createContentObject().getType()); } @Test public void getTypeError403() throws URISyntaxException, IOException { - getTypeSuccessful(403, null); - } - - private void getTypeSuccessful(int responseStatus, String contentType) throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile) - .setContentType("text/plain");// - - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getType, - contentType); + stubFor(get(urlEqualTo(downloadUrl)) + .willReturn(aResponse().withStatus(403).withStatus(403).withBody(error403Response))); + assertNull(createContentObject().getType()); } @Test public void getData() throws URISyntaxException, IOException { + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain"))); + byte[] expectedResult = Files.readAllBytes(Paths.get(ClassLoader - .getSystemResource("wiremock" + File.separator + "__files" + File.separator + "textfile.txt").toURI())); - getDataSuccessful(200, expectedResult, "textfile.txt"); + .getSystemResource("wiremock" + File.separator + "__files" + File.separator + bodyFilename).toURI())); + assertThat(createContentObject().getData(), IsEqual.equalTo(expectedResult)); } @Test public void getDataMissingContentType() throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, - null); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(200).withBodyFile(bodyFilename))); + assertNull(createContentObject().getData()); } @Test public void getDataError404() throws URISyntaxException, IOException { - getDataSuccessful(404, null, "textfile.txt"); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + assertNull(createContentObject().getData()); } @Test public void getDataError403() throws URISyntaxException, IOException { - getDataSuccessful(403, null, "textfile.txt"); - } - - private void getDataSuccessful(int responseStatus, byte[] expectedResult, String bodyFile) - throws URISyntaxException { - String url = createDownloadUrl(); - - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// - .setContentType("text/plain"); - - new TestRunnerGet(new TestRequestBuilder(url), responseBuilder).runTest(createContentObject()::getData, - expectedResult); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + assertNull(createContentObject().getData()); } @Test public void getFilename() throws URISyntaxException, IOException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain") + .withHeader("Content-Disposition", String.format("filename=%s;", bodyFilename)))); + assertEquals(Optional.of(bodyFilename), createContentObject().getFilename()); + + reset(); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile)// - .setContentType("text/plain")// - .putHeader("Content-Disposition", String.format("filename=" + bodyFile + ";")); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain") + .withHeader("Content-Disposition", String.format("filename=\"%s\";", bodyFilename)))); + assertEquals(Optional.of(bodyFilename), createContentObject().getFilename()); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); + reset(); - responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\";", bodyFile)); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain") + .withHeader("Content-Disposition", String.format("filename=\"%s\"", bodyFilename)))); + assertEquals(Optional.of(bodyFilename), createContentObject().getFilename()); - responseBuilder.putHeader("Content-Disposition", String.format("filename=\"%s\"", bodyFile)); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); + reset(); - responseBuilder.putHeader("Content-Disposition", String.format("filename=%s", bodyFile)); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, Optional.of(bodyFile)); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain") + .withHeader("Content-Disposition", String.format("filename=%s", bodyFilename)))); + assertEquals(Optional.of(bodyFilename), createContentObject().getFilename()); } @Test public void getFilenameMissingContentType() throws URISyntaxException { - String url = createDownloadUrl(); - String bodyFile = "textfile.txt"; - TestResponseBuilder responseBuilder = new TestResponseBuilder(200).setBodyFile(bodyFile); - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, Optional.empty()); + stubFor(get(urlEqualTo(downloadUrl)).willReturn( + aResponse().withStatus(200).withBodyFile(bodyFilename).withHeader("Content-Type", "text/plain"))); + assertEquals(Optional.empty(), createContentObject().getFilename()); } @Test public void getFilenameError404() throws URISyntaxException, IOException { - getFilenameSuccessful(404, "textfile.txt", Optional.empty()); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(404).withBody(error404Response))); + assertEquals(Optional.empty(), createContentObject().getFilename()); } @Test public void getFilenameError403() throws URISyntaxException, IOException { - getFilenameSuccessful(404, "textfile.txt", Optional.empty()); - } - - private void getFilenameSuccessful(int responseStatus, String bodyFile, Optional expectedResult) - throws URISyntaxException { - String url = createDownloadUrl(); - - TestResponseBuilder responseBuilder = new TestResponseBuilder(responseStatus).setBodyFile(bodyFile)// - .setContentType("text/plain")// - .putHeader("Content-Disposition", String.format("filename=%s;", bodyFile)); - - new TestRunnerGet>(new TestRequestBuilder(url), responseBuilder) - .runTest(createContentObject()::getFilename, expectedResult); + stubFor(get(urlEqualTo(downloadUrl)).willReturn(aResponse().withStatus(403).withBody(error403Response))); + assertEquals(Optional.empty(), createContentObject().getFilename()); } private MatrixHttpContent createContentObject() throws URISyntaxException { @@ -208,8 +181,4 @@ private MatrixHttpContent createContentObject() throws URISyntaxException { return new MatrixHttpContent(context, address); } - private String createDownloadUrl() { - return "/_matrix/media/v1/download/" + address.getHost() + address.getPath() + getAcessTokenParameter(); - } - } diff --git a/src/test/java/io/kamax/matrix/client/TestRequestBuilder.java b/src/test/java/io/kamax/matrix/client/TestRequestBuilder.java deleted file mode 100644 index 00dde7e..0000000 --- a/src/test/java/io/kamax/matrix/client/TestRequestBuilder.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -public class TestRequestBuilder { - public enum MatchingType { - EQUALITY, - REGEX - } - - private MatchingType matchingType = MatchingType.EQUALITY; - private final String url; - - public TestRequestBuilder(String url) { - this.url = url; - } - - public TestRequestBuilder setMatchingType(MatchingType matchingType) { - this.matchingType = matchingType; - return this; - } - - public MatchingType getMatchingType() { - return matchingType; - } - - public String getUrl() { - return url; - } - -} diff --git a/src/test/java/io/kamax/matrix/client/TestResponseBuilder.java b/src/test/java/io/kamax/matrix/client/TestResponseBuilder.java deleted file mode 100644 index 1943d08..0000000 --- a/src/test/java/io/kamax/matrix/client/TestResponseBuilder.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -public class TestResponseBuilder { - private final int status; - - private Optional contentType = Optional.empty(); - private Map headers = new HashMap<>(); - private Optional body = Optional.empty(); - private Optional bodyFile = Optional.empty(); - - public TestResponseBuilder(int status) { - this.status = status; - } - - public int getStatus() { - return status; - } - - public TestResponseBuilder setContentType(String contentType) { - this.contentType = Optional.ofNullable(contentType); - return this; - } - - public Optional getContentType() { - return contentType; - } - - public TestResponseBuilder putHeader(String header, String value) { - headers.put(header, value); - return this; - } - - public Map getHeaders() { - return headers; - } - - public TestResponseBuilder setBody(String body) { - this.body = Optional.ofNullable(body); - return this; - } - - public Optional getBody() { - if (status != 200) { - return Optional.of(String.format("{\"errcode\": \"%s\", \"error\": \"%s\"}", getErrcode(), getError())); - } - - return body; - } - - /** - * Careful: Body takes precedence over bodyFile, if both values are set. - * - * @param bodyFile - * Path to the bodyFile - * @return The object itself (builder pattern) - */ - public TestResponseBuilder setBodyFile(String bodyFile) { - this.bodyFile = Optional.ofNullable(bodyFile); - return this; - } - - public Optional getBodyFile() { - return bodyFile; - } - - public String getErrcode() { - switch (getStatus()) { - case 403: - return "M_FORBIDDEN"; - case 404: - return "M_NOT_FOUND"; - case 429: - return "M_LIMIT_EXCEEDED"; - default: - return ""; - } - } - - public String getError() { - switch (getStatus()) { - case 403: - return "Access denied."; - case 404: - return "Element not found."; - case 429: - return "Too many requests have been sent in a short period of time. Wait a while then try again."; - default: - return ""; - } - } -} diff --git a/src/test/java/io/kamax/matrix/client/TestRunner.java b/src/test/java/io/kamax/matrix/client/TestRunner.java deleted file mode 100644 index ce1c0f1..0000000 --- a/src/test/java/io/kamax/matrix/client/TestRunner.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; - -import java.util.Map; -import java.util.Optional; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; - -public class TestRunner { - protected TestRequestBuilder requestBuilder; - protected TestResponseBuilder responseBuilder; - - public TestRunner(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { - this.requestBuilder = requestBuilder; - this.responseBuilder = responseBuilder; - } - - protected ResponseDefinitionBuilder createResponse() { - ResponseDefinitionBuilder response = aResponse().withStatus(responseBuilder.getStatus()); - Optional body = responseBuilder.getBody(); - Optional bodyFile = responseBuilder.getBodyFile(); - - if (body.isPresent()) { - response.withBody(body.get()); - } else if (bodyFile.isPresent()) { - response.withBodyFile(bodyFile.get()); - } - - Optional contentType = responseBuilder.getContentType(); - if (contentType.isPresent()) { - response.withHeader("Content-Type", contentType.get()); - } - - Map headers = responseBuilder.getHeaders(); - for (String header : headers.keySet()) { - response.withHeader(header, headers.get(header)); - } - return response; - } -} diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java b/src/test/java/io/kamax/matrix/client/TestRunnerGet.java deleted file mode 100644 index bc18e46..0000000 --- a/src/test/java/io/kamax/matrix/client/TestRunnerGet.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import org.hamcrest.core.IsEqual; - -import java.util.function.Supplier; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; - -import static org.junit.Assert.*; - -public class TestRunnerGet extends TestRunner { - - public TestRunnerGet(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { - super(requestBuilder, responseBuilder); - } - - public void runTest(Supplier method, R expectedResult) { - stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); - - assertThat(method.get(), IsEqual.equalTo(expectedResult)); - } - - public void runTestExceptionExpected(Supplier method) { - stubFor(get(urlEqualTo(requestBuilder.getUrl())).willReturn(createResponse())); - - try { - method.get(); - } catch (MatrixClientRequestException e) { - /* - * TODO refactor error handling, so that the error is returned. Afterwards, the error - * values can be checked here by using e.getError(). - */ - // checkErrorInfo( e); - return; - } - fail("In this case, an exception has to be thrown."); - } -} diff --git a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java b/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java deleted file mode 100644 index 67f9f99..0000000 --- a/src/test/java/io/kamax/matrix/client/TestRunnerPostPut.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Arne Augenstein - * - * https://max.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.client; - -import com.github.tomakehurst.wiremock.matching.UrlPattern; - -import java.util.function.Consumer; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; - -import static org.junit.Assert.*; - -public class TestRunnerPostPut

extends TestRunner { - - public TestRunnerPostPut(TestRequestBuilder requestBuilder, TestResponseBuilder responseBuilder) { - super(requestBuilder, responseBuilder); - } - - public void runPostTest(Consumer

method, P parameter, String verifyBody) { - stubFor(post(getUrlPattern()).willReturn(createResponse())); - method.accept(parameter); - verify(postRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); - } - - public void runPostTest(Runnable method, String verifyBody) { - stubFor(post(getUrlPattern()).willReturn(createResponse())); - method.run(); - verify(postRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); - } - - public void runPostTest(Runnable method) { - runPostTest(method, ""); - } - - public void runPostTestExceptionExpected(Consumer

method, P parameter) { - stubFor(post(getUrlPattern()).willReturn(createResponse())); - runErrorTest(method, parameter); - } - - public void runPostTestExceptionExpected(Runnable method) { - stubFor(post(getUrlPattern()).willReturn(createResponse())); - runErrorTest(method); - } - - public void runPutTest(Consumer

method, P parameter, String verifyBody) { - stubFor(put(getUrlPattern()).willReturn(createResponse())); - method.accept(parameter); - verify(putRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); - } - - public void runPutTest(Runnable method, String verifyBody) { - - stubFor(put(getUrlPattern()).willReturn(createResponse())); - method.run(); - verify(putRequestedFor(getUrlPattern()).withRequestBody(containing(verifyBody))); - } - - public void runPutTestExceptionExpected(Consumer

method, P parameter) { - stubFor(put(getUrlPattern()).willReturn(createResponse())); - runErrorTest(method, parameter); - } - - public void runPutTestExceptionExpected(Runnable method) { - stubFor(put(getUrlPattern()).willReturn(createResponse())); - runErrorTest(method); - } - - private void runErrorTest(Consumer

method, P parameter) { - try { - method.accept(parameter); - } catch (MatrixClientRequestException e) { - checkErrorInfo(e); - return; - } - fail("In this case, an exception has to be thrown."); - } - - private void runErrorTest(Runnable method) { - try { - method.run(); - } catch (MatrixClientRequestException e) { - checkErrorInfo(e); - return; - } - fail("In this case, an exception has to be thrown."); - } - - private void checkErrorInfo(MatrixClientRequestException e) { - // TODO at the moment not every call throws a MatrixClientRequestException, so we cannot always evaluate the - // error. This code can be activated after the upcoming refactoring. - /* - * Optional errorOptional = e.getError(); - * assertTrue(errorOptional.isPresent()); - * assertEquals(errorOptional.get().getErrcode(), responseBuilder.getErrcode()); - * assertEquals(errorOptional.get().getError(), responseBuilder.getError()); - */ - } - - private UrlPattern getUrlPattern() { - String url = requestBuilder.getUrl(); - - if (requestBuilder.getMatchingType() == TestRequestBuilder.MatchingType.REGEX) { - return urlMatching(url); - } - - return urlEqualTo(url); - } - -} diff --git a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java index 98b97d3..f0d1e82 100644 --- a/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java +++ b/src/test/java/io/kamax/matrix/client/as/MatrixApplicationServiceClientTest.java @@ -27,26 +27,27 @@ import java.net.URISyntaxException; +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.jupiter.api.Assertions.assertThrows; + public class MatrixApplicationServiceClientTest extends MatrixHttpTest { + private String createUserUrl = "/_matrix/client/r0/register" + tokenParameter; + private String testUser = "testUser"; @Test public void createUser() throws URISyntaxException { - String url = createUserUrl(); - String verifyBody = "\"username\":\"testuser\""; - - new TestRunnerPostPut(new TestRequestBuilder(url), new TestResponseBuilder(200)) - .runPostTest(createClientObject()::createUser, "testuser", verifyBody); + stubFor(post(urlEqualTo(createUserUrl)).willReturn(aResponse().withStatus(200))); + createClientObject().createUser(testUser); } @Test public void createUserError429() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createUserUrl()), - new TestResponseBuilder(429)); - runner.runPostTestExceptionExpected(createClientObject()::createUser, "testuser"); - } + stubFor(post(urlEqualTo(createUserUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); - private String createUserUrl() throws URISyntaxException { - return "/_matrix/client/r0/register" + getAcessTokenParameter(); + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + () -> createClientObject().createUser(testUser)); + checkErrorInfo429(e); } private MatrixApplicationServiceClient createClientObject() throws URISyntaxException { diff --git a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java index 120984a..712cbc0 100644 --- a/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java +++ b/src/test/java/io/kamax/matrix/client/regular/MatrixHttpClientTest.java @@ -26,29 +26,31 @@ import java.net.URISyntaxException; +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import static org.junit.jupiter.api.Assertions.assertThrows; + public class MatrixHttpClientTest extends MatrixHttpTest { + private String setDisplaynameUrl = String.format("/_matrix/client/r0/profile/%s/displayname", + createClientContext().getUser().getId()) + tokenParameter; + private String displayName = "display name"; - @Test - public void setDisplayname() throws URISyntaxException { - String url = createSetDisplaynameUrl(); - TestResponseBuilder responseBuilder = new TestResponseBuilder(200); - String displayname = "new name"; - String verifyBody = String.format("\"displayname\":\"%s\"", displayname); - - new TestRunnerPostPut(new TestRequestBuilder(url), responseBuilder) - .runPutTest(createClientObject()::setDisplayName, displayname, verifyBody); + public MatrixHttpClientTest() throws URISyntaxException { } @Test - public void setDisplaynameError429() throws URISyntaxException { - TestRunnerPostPut runner = new TestRunnerPostPut<>(new TestRequestBuilder(createSetDisplaynameUrl()), - new TestResponseBuilder(429)); - runner.runPutTestExceptionExpected(createClientObject()::setDisplayName, "new name"); + public void setDisplayName() throws URISyntaxException { + stubFor(put(urlEqualTo(setDisplaynameUrl)).willReturn(aResponse().withStatus(200))); + createClientObject().setDisplayName(displayName); } - private String createSetDisplaynameUrl() throws URISyntaxException { - return String.format("/_matrix/client/r0/profile/%s/displayname", createClientContext().getUser().getId()) - + getAcessTokenParameter(); + @Test + public void setDisplayNameError429() throws URISyntaxException { + stubFor(put(urlEqualTo(setDisplaynameUrl)).willReturn(aResponse().withStatus(429).withBody(error429Response))); + + MatrixClientRequestException e = assertThrows(MatrixClientRequestException.class, + () -> createClientObject().setDisplayName(displayName)); + checkErrorInfo429(e); } private MatrixHttpClient createClientObject() throws URISyntaxException {