From 61eebb79fb6f107bc45cb4f48834b16617a48a23 Mon Sep 17 00:00:00 2001 From: shubhsherl Date: Thu, 20 Dec 2018 01:26:37 +0530 Subject: [PATCH 1/2] add subscriptions.unread --- .../core/internal/model/ChatRoomPayload.kt | 5 +++- .../rocket/core/internal/rest/ChatRoom.kt | 21 +++++++++++++++ .../rocket/core/internal/rest/ChatRoomTest.kt | 26 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt b/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt index 619db3f5..4b5e7cef 100644 --- a/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt +++ b/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt @@ -6,6 +6,9 @@ import se.ansman.kotshi.JsonSerializable @JsonSerializable data class ChatRoomPayload(@Json(name = "rid") val roomId: String) +@JsonSerializable +data class ChatRoomUnreadPayload(@Json(name = "roomId") val roomId: String) + @JsonSerializable data class ChatRoomNamePayload(val roomId: String, val name: String?) @@ -28,4 +31,4 @@ data class ChatRoomTypePayload(val roomId: String, val type: String) data class ChatRoomJoinCodePayload(val roomId: String, val joinCode: String) @JsonSerializable -data class ChatRoomFavoritePayload(val roomId: String, val favorite: Boolean) \ No newline at end of file +data class ChatRoomFavoritePayload(val roomId: String, val favorite: Boolean) diff --git a/core/src/main/kotlin/chat/rocket/core/internal/rest/ChatRoom.kt b/core/src/main/kotlin/chat/rocket/core/internal/rest/ChatRoom.kt index 47d30725..c7ba2a78 100644 --- a/core/src/main/kotlin/chat/rocket/core/internal/rest/ChatRoom.kt +++ b/core/src/main/kotlin/chat/rocket/core/internal/rest/ChatRoom.kt @@ -10,6 +10,7 @@ import chat.rocket.core.internal.model.ChatRoomJoinCodePayload import chat.rocket.core.internal.model.ChatRoomNamePayload import chat.rocket.core.internal.model.ChatRoomPayload import chat.rocket.core.internal.model.ChatRoomReadOnlyPayload +import chat.rocket.core.internal.model.ChatRoomUnreadPayload import chat.rocket.core.internal.model.ChatRoomTopicPayload import chat.rocket.core.internal.model.ChatRoomTypePayload import chat.rocket.core.internal.model.ChatRoomFavoritePayload @@ -232,6 +233,26 @@ suspend fun RocketChatClient.markAsRead(roomId: String) { } } +/** + * Marks a room as unread. + * + * @param roomId The ID of the room. + */ +suspend fun RocketChatClient.markAsUnread(roomId: String) { + withContext(CommonPool) { + val payload = ChatRoomUnreadPayload(roomId) + val adapter = moshi.adapter(ChatRoomUnreadPayload::class.java) + val payloadBody = adapter.toJson(payload) + + val body = RequestBody.create(MEDIA_TYPE_JSON, payloadBody) + + val url = requestUrl(restUrl, "subscriptions.unread").build() + val request = requestBuilderForAuthenticatedMethods(url).post(body).build() + + handleRestCall(request, Any::class.java) + } +} + // TODO: Add doc. suspend fun RocketChatClient.joinChat(roomId: String): Boolean = withContext(CommonPool) { val payload = RoomIdPayload(roomId) diff --git a/core/src/test/kotlin/chat/rocket/core/internal/rest/ChatRoomTest.kt b/core/src/test/kotlin/chat/rocket/core/internal/rest/ChatRoomTest.kt index 23919f5e..7d1b479b 100644 --- a/core/src/test/kotlin/chat/rocket/core/internal/rest/ChatRoomTest.kt +++ b/core/src/test/kotlin/chat/rocket/core/internal/rest/ChatRoomTest.kt @@ -72,6 +72,32 @@ class ChatRoomTest { } } + @Test + fun `markAsUnread() should succeed without throwing`() { + mockServer.expect() + .post() + .withPath("/api/v1/subscriptions.unread") + .andReturn(200, SUCCESS) + .once() + + runBlocking { + sut.markAsUnread(roomId = "GENERAL") + } + } + + @Test(expected = RocketChatException::class) + fun `markAsUnread() should fail with RocketChatAuthException if not logged in`() { + mockServer.expect() + .post() + .withPath("/api/v1/subscriptions.unread") + .andReturn(401, MUST_BE_LOGGED_ERROR) + .once() + + runBlocking { + sut.markAsUnread(roomId = "GENERAL") + } + } + @Test fun `getMembers() should succeed without throwing`() { mockServer.expect() From 95f38ca0a0f6531063c5e841541d80e8efdb254f Mon Sep 17 00:00:00 2001 From: shubhsherl Date: Fri, 21 Dec 2018 22:09:01 +0530 Subject: [PATCH 2/2] remove redundant line of code --- .../kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt b/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt index 4b5e7cef..d173cdd3 100644 --- a/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt +++ b/core/src/main/kotlin/chat/rocket/core/internal/model/ChatRoomPayload.kt @@ -7,7 +7,7 @@ import se.ansman.kotshi.JsonSerializable data class ChatRoomPayload(@Json(name = "rid") val roomId: String) @JsonSerializable -data class ChatRoomUnreadPayload(@Json(name = "roomId") val roomId: String) +data class ChatRoomUnreadPayload(val roomId: String) @JsonSerializable data class ChatRoomNamePayload(val roomId: String, val name: String?) @@ -31,4 +31,4 @@ data class ChatRoomTypePayload(val roomId: String, val type: String) data class ChatRoomJoinCodePayload(val roomId: String, val joinCode: String) @JsonSerializable -data class ChatRoomFavoritePayload(val roomId: String, val favorite: Boolean) +data class ChatRoomFavoritePayload(val roomId: String, val favorite: Boolean) \ No newline at end of file