ConversationConversionTest.kt 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * Nextcloud Talk - Android Client
  3. *
  4. * SPDX-FileCopyrightText: 2024 Marcel Hibbe <dev@mhibbe.de>
  5. * SPDX-License-Identifier: GPL-3.0-or-later
  6. */
  7. package com.nextcloud.talk.json
  8. import com.bluelinelabs.logansquare.LoganSquare
  9. import com.nextcloud.talk.data.database.mappers.asEntity
  10. import com.nextcloud.talk.data.database.mappers.asModel
  11. import com.nextcloud.talk.data.database.model.ConversationEntity
  12. import com.nextcloud.talk.models.json.conversations.ConversationEnums
  13. import com.nextcloud.talk.models.json.conversations.RoomOverall
  14. import com.nextcloud.talk.models.json.participants.Participant
  15. import org.junit.Assert.*
  16. import org.junit.Test
  17. import org.junit.runner.RunWith
  18. import org.junit.runners.Parameterized
  19. import java.io.File
  20. @RunWith(Parameterized::class)
  21. class ConversationConversionTest(
  22. private val jsonFileName: String
  23. ) {
  24. companion object {
  25. @JvmStatic
  26. @Parameterized.Parameters(name = "{index}: testDeserialization({0})")
  27. fun data(): List<String> {
  28. return listOf(
  29. "RoomOverallExample_APIv1.json",
  30. "RoomOverallExample_APIv2.json",
  31. "RoomOverallExample_APIv4.json"
  32. )
  33. }
  34. }
  35. @Test
  36. fun testDeserialization() {
  37. val jsonFile = File("src/test/resources/$jsonFileName")
  38. val jsonString = jsonFile.readText()
  39. val roomOverall: RoomOverall = LoganSquare.parse(jsonString, RoomOverall::class.java)
  40. assertNotNull(roomOverall)
  41. val conversationJson = roomOverall.ocs!!.data!!
  42. assertNotNull(conversationJson)
  43. val conversationEntity = conversationJson.asEntity(1)
  44. assertNotNull(conversationEntity)
  45. val apiVersion: Int = jsonFileName.substringAfterLast("APIv").first().digitToInt()
  46. checkConversationEntity(conversationEntity, apiVersion)
  47. val conversationModel = conversationEntity.asModel()
  48. val conversationEntityConvertedBack = conversationModel.asEntity()
  49. checkConversationEntity(conversationEntityConvertedBack, apiVersion)
  50. }
  51. private fun checkConversationEntity(conversationEntity: ConversationEntity, apiVersion: Int) {
  52. assertEquals("1@juwd77g6", conversationEntity.internalId)
  53. assertEquals(1, conversationEntity.accountId)
  54. // check if default values are set for the fields when API_V1 is used
  55. if (apiVersion == 1) {
  56. // default values for API_V2 fields
  57. assertEquals(false, conversationEntity.canDeleteConversation)
  58. assertEquals(true, conversationEntity.canLeaveConversation)
  59. // default values for API_V3 fields
  60. assertEquals("", conversationEntity.description)
  61. assertEquals("", conversationEntity.actorType)
  62. assertEquals("", conversationEntity.actorId)
  63. assertEquals(0, conversationEntity.callFlag)
  64. assertEquals(0, conversationEntity.lastCommonReadMessage)
  65. // default values for API_V4 fields
  66. assertEquals("", conversationEntity.avatarVersion)
  67. assertEquals(0, conversationEntity.callStartTime)
  68. assertEquals(0, conversationEntity.callRecording)
  69. assertEquals(false, conversationEntity.unreadMentionDirect)
  70. assertEquals("", conversationEntity.status)
  71. assertEquals("", conversationEntity.statusIcon)
  72. assertEquals("", conversationEntity.statusMessage)
  73. assertEquals(null, conversationEntity.statusClearAt)
  74. assertEquals("", conversationEntity.avatarVersion)
  75. assertEquals(0, conversationEntity.callStartTime)
  76. assertEquals(0, conversationEntity.callRecording)
  77. }
  78. if (apiVersion >= 1) {
  79. assertEquals("juwd77g6", conversationEntity.token)
  80. assertEquals(ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL, conversationEntity.type)
  81. assertEquals("marcel", conversationEntity.name)
  82. assertEquals("Marcel", conversationEntity.displayName)
  83. assertEquals(Participant.ParticipantType.OWNER, conversationEntity.participantType)
  84. assertEquals(
  85. ConversationEnums.ConversationReadOnlyState.CONVERSATION_READ_WRITE,
  86. conversationEntity.conversationReadOnlyState
  87. )
  88. assertEquals(1727185155, conversationEntity.lastPing)
  89. assertEquals("0", conversationEntity.sessionId)
  90. assertEquals(false, conversationEntity.hasPassword)
  91. assertEquals(false, conversationEntity.hasCall)
  92. assertEquals(true, conversationEntity.canStartCall)
  93. assertEquals(1727098966, conversationEntity.lastActivity)
  94. assertEquals(false, conversationEntity.favorite)
  95. assertEquals(ConversationEnums.NotificationLevel.ALWAYS, conversationEntity.notificationLevel)
  96. assertEquals(ConversationEnums.LobbyState.LOBBY_STATE_ALL_PARTICIPANTS, conversationEntity.lobbyState)
  97. assertEquals(0, conversationEntity.lobbyTimer)
  98. assertEquals(0, conversationEntity.unreadMessages)
  99. assertEquals(false, conversationEntity.unreadMention)
  100. assertEquals(92320, conversationEntity.lastReadMessage)
  101. assertNotNull(conversationEntity.lastMessage)
  102. assertTrue(conversationEntity.lastMessage is String)
  103. assertTrue(conversationEntity.lastMessage!!.contains("token"))
  104. assertEquals(ConversationEnums.ObjectType.DEFAULT, conversationEntity.objectType)
  105. }
  106. if (apiVersion >= 2) {
  107. assertEquals(false, conversationEntity.canDeleteConversation)
  108. assertEquals(true, conversationEntity.canLeaveConversation)
  109. }
  110. if (apiVersion >= 3) {
  111. assertEquals("test", conversationEntity.description)
  112. // assertEquals("", conversationEntity.attendeeId) // Not implemented
  113. // assertEquals("", conversationEntity.attendeePin) // Not implemented
  114. assertEquals("users", conversationEntity.actorType)
  115. assertEquals("marcel2", conversationEntity.actorId)
  116. // assertEquals("", conversationEntity.listable) // Not implemented
  117. assertEquals(0, conversationEntity.callFlag)
  118. // assertEquals("", conversationEntity.sipEnabled) // Not implemented
  119. // assertEquals("", conversationEntity.canEnableSIP) // Not implemented
  120. assertEquals(92320, conversationEntity.lastCommonReadMessage)
  121. }
  122. if (apiVersion >= 4) {
  123. assertEquals("143a9df3", conversationEntity.avatarVersion)
  124. assertEquals(0, conversationEntity.callStartTime)
  125. assertEquals(0, conversationEntity.callRecording)
  126. assertEquals(false, conversationEntity.unreadMentionDirect)
  127. // assertEquals(, conversationEntity.breakoutRoomMode) // Not implemented
  128. // assertEquals(, conversationEntity.breakoutRoomStatus) // Not implemented
  129. assertEquals("away", conversationEntity.status)
  130. assertEquals("👻", conversationEntity.statusIcon)
  131. assertEquals("buuuuh", conversationEntity.statusMessage)
  132. assertEquals(null, conversationEntity.statusClearAt)
  133. assertEquals("143a9df3", conversationEntity.avatarVersion)
  134. // assertEquals("", conversationEntity.isCustomAvatar) // Not implemented
  135. assertEquals(0, conversationEntity.callStartTime)
  136. assertEquals(0, conversationEntity.callRecording)
  137. // assertEquals("", conversationEntity.recordingConsent) // Not implemented
  138. // assertEquals("", conversationEntity.mentionPermissions) // Not implemented
  139. // assertEquals("", conversationEntity.isArchived) // Not implemented
  140. }
  141. }
  142. }