diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt new file mode 100644 index 00000000..280a7daf --- /dev/null +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicApiAddChatMessageTest.kt @@ -0,0 +1,33 @@ +package org.moire.ultrasonic.api.subsonic + +import org.junit.Test + +/** + * Integration test for [SubsonicAPIDefinition.addChatMessage] call. + */ +class SubsonicApiAddChatMessageTest : SubsonicAPIClientTest() { + @Test + fun `Should handle error response`() { + checkErrorCallParsed(mockWebServerRule) { + client.api.addChatMessage("some").execute() + } + } + + @Test + fun `Should handle ok response`() { + mockWebServerRule.enqueueResponse("ping_ok.json") + + val response = client.api.addChatMessage("some").execute() + + assertResponseSuccessful(response) + } + + @Test + fun `Should pass message in request param`() { + val message = "Youuhuuu" + + mockWebServerRule.assertRequestParam(expectedParam = "message=$message") { + client.api.addChatMessage(message = message).execute() + } + } +} diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt index c315e313..ae06b3ab 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/SubsonicAPIDefinition.kt @@ -217,4 +217,7 @@ interface SubsonicAPIDefinition { @GET("getChatMessages.view") fun getChatMessages(@Query("since") since: Long? = null): Call + + @GET("addChatMessage.view") + fun addChatMessage(@Query("message") message: String): Call } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java index c83c048c..17fc91c8 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/RESTMusicService.java @@ -1258,31 +1258,19 @@ public class RESTMusicService implements MusicService return APIChatMessageConverter.toDomainEntitiesList(response.body().getChatMessages()); } - @Override - public void addChatMessage(String message, Context context, ProgressListener progressListener) throws Exception - { - checkServerVersion(context, "1.2", "Chat not supported."); + @Override + public void addChatMessage(String message, + Context context, + ProgressListener progressListener) throws Exception { + if (message == null) { + throw new IllegalArgumentException("Message is null"); + } - HttpParams params = new BasicHttpParams(); - HttpConnectionParams.setSoTimeout(params, SOCKET_READ_TIMEOUT_GET_RANDOM_SONGS); - - List parameterNames = new ArrayList(); - List parameterValues = new ArrayList(); - - parameterNames.add("message"); - parameterValues.add(message); - - Reader reader = getReader(context, progressListener, "addChatMessage", params, parameterNames, parameterValues); - - try - { - new ErrorParser(context).parse(reader); - } - finally - { - Util.close(reader); - } - } + updateProgressListener(progressListener, R.string.parser_reading); + Response response = subsonicAPIClient.getApi() + .addChatMessage(message).execute(); + checkResponseSuccessful(response); + } @Override public List getBookmarks(Context context, ProgressListener progressListener) throws Exception