Skip to content

Commit d0b6e88

Browse files
rapterjet2004mahibi
authored andcommitted
Added testing - edge cases
Signed-off-by: rapterjet2004 <juliuslinus1@gmail.com>
1 parent 180fe2e commit d0b6e88

3 files changed

Lines changed: 148 additions & 0 deletions

File tree

app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ChatBlocksDaoTest.kt

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,93 @@ class ChatBlocksDaoTest {
527527
assertEquals(2, blocks.size)
528528
}
529529

530+
@Test
531+
fun testUpsertAndMergeConnectedChatBlocksAdjacentBlocks() =
532+
runTest {
533+
val user = createUserEntity("account1", "Account 1")
534+
usersDao.saveUser(user)
535+
val account1 = usersDao.getUserWithUserId("account1").blockingGet()
536+
537+
conversationsDao.upsertConversations(
538+
account1.id,
539+
listOf(createConversationEntity(account1.id, "abc", "Conv"))
540+
)
541+
val conversation = conversationsDao.getConversationsForUser(account1.id).first()[0]
542+
543+
// Block 10-20
544+
chatBlocksDao.upsertChatBlock(
545+
ChatBlockEntity(
546+
internalConversationId = conversation.internalId,
547+
accountId = conversation.accountId,
548+
token = conversation.token,
549+
threadId = null,
550+
oldestMessageId = 10,
551+
newestMessageId = 20,
552+
hasHistory = true
553+
)
554+
)
555+
556+
// Block 21-30. No overlap, so they stay separate
557+
chatBlocksDao.upsertAndMergeConnectedChatBlocks(
558+
ChatBlockEntity(
559+
internalConversationId = conversation.internalId,
560+
accountId = conversation.accountId,
561+
token = conversation.token,
562+
threadId = null,
563+
oldestMessageId = 21,
564+
newestMessageId = 30,
565+
hasHistory = true
566+
)
567+
)
568+
569+
val blocks = chatBlocksDao.getChatBlocksForConversation(conversation.internalId)
570+
assertEquals(2, blocks.size)
571+
}
572+
573+
@Test
574+
fun testUpsertAndMergeConnectedChatBlocksOverlapAtBoundary() =
575+
runTest {
576+
val user = createUserEntity("account1", "Account 1")
577+
usersDao.saveUser(user)
578+
val account1 = usersDao.getUserWithUserId("account1").blockingGet()
579+
580+
conversationsDao.upsertConversations(
581+
account1.id,
582+
listOf(createConversationEntity(account1.id, "abc", "Conv"))
583+
)
584+
val conversation = conversationsDao.getConversationsForUser(account1.id).first()[0]
585+
586+
chatBlocksDao.upsertChatBlock(
587+
ChatBlockEntity(
588+
internalConversationId = conversation.internalId,
589+
accountId = conversation.accountId,
590+
token = conversation.token,
591+
threadId = null,
592+
oldestMessageId = 10,
593+
newestMessageId = 20,
594+
hasHistory = true
595+
)
596+
)
597+
598+
// Inserting 20-30. Boundary 20 is shared.
599+
chatBlocksDao.upsertAndMergeConnectedChatBlocks(
600+
ChatBlockEntity(
601+
internalConversationId = conversation.internalId,
602+
accountId = conversation.accountId,
603+
token = conversation.token,
604+
threadId = null,
605+
oldestMessageId = 20,
606+
newestMessageId = 30,
607+
hasHistory = true
608+
)
609+
)
610+
611+
val blocks = chatBlocksDao.getChatBlocksForConversation(conversation.internalId)
612+
assertEquals(1, blocks.size)
613+
assertEquals(10L, blocks[0].oldestMessageId)
614+
assertEquals(30L, blocks[0].newestMessageId)
615+
}
616+
530617
private fun createUserEntity(userId: String, userName: String) =
531618
UserEntity(
532619
userId = userId,

app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ConversationsDaoTest.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import android.content.Context
1010
import androidx.room.Room
1111
import androidx.test.core.app.ApplicationProvider
1212
import androidx.test.ext.junit.runners.AndroidJUnit4
13+
import com.nextcloud.talk.chat.data.model.ChatMessage
14+
import com.nextcloud.talk.data.database.model.ChatMessageEntity
1315
import com.nextcloud.talk.data.database.model.ConversationEntity
1416
import com.nextcloud.talk.data.source.local.TalkDatabase
1517
import com.nextcloud.talk.data.user.UsersDao
@@ -125,6 +127,46 @@ class ConversationsDaoTest {
125127
assertTrue(list.isEmpty())
126128
}
127129

130+
@Test
131+
fun upsertConversations_emptyList() =
132+
runTest {
133+
conversationsDao.upsertConversations(accountId, emptyList())
134+
val list = conversationsDao.getConversationsForUser(accountId).first()
135+
assertTrue(list.isEmpty())
136+
}
137+
138+
@Test
139+
fun cascadeDeletion_deletesMessages() =
140+
runTest {
141+
val chatMessagesDao = db.chatMessagesDao()
142+
val conversation = createConversationEntity(accountId, "token1", "Conv 1")
143+
conversationsDao.insertConversation(conversation)
144+
145+
val message =
146+
ChatMessageEntity(
147+
internalId = "${conversation.internalId}@1",
148+
internalConversationId = conversation.internalId,
149+
id = 1,
150+
message = "test message",
151+
accountId = accountId,
152+
token = "token1",
153+
actorId = "user1",
154+
actorType = "users",
155+
actorDisplayName = "User 1",
156+
messageType = "comment",
157+
systemMessageType = ChatMessage.SystemMessageType.DUMMY,
158+
timestamp = 1000
159+
)
160+
chatMessagesDao.upsertChatMessage(message)
161+
162+
// Delete conversation
163+
conversationsDao.deleteConversations(listOf(conversation.internalId))
164+
165+
// Verify message is also gone
166+
val messages = chatMessagesDao.getMessagesForConversation(conversation.internalId, null).first()
167+
assertTrue(messages.isEmpty())
168+
}
169+
128170
private fun createConversationEntity(accountId: Long, token: String, roomName: String) =
129171
ConversationEntity(
130172
internalId = "$accountId@$token",

app/src/androidTest/java/com/nextcloud/talk/data/user/UsersDaoTest.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,25 @@ class UsersDaoTest {
173173
assertEquals(newState, retrieved.pushConfigurationState)
174174
}
175175

176+
@Test
177+
fun setActiveNonExistentUser() {
178+
val count = usersDao.setUserAsActiveWithId(9999)
179+
assertEquals(0, count)
180+
}
181+
182+
@Test
183+
fun deleteActiveUser() {
184+
val user = createUserEntity("user1", "Account 1", "https://server1.com").apply { current = true }
185+
val id = usersDao.saveUser(user)
186+
val savedUser = usersDao.getUserWithId(id).blockingGet()
187+
188+
usersDao.deleteUser(savedUser)
189+
190+
val active = usersDao.getActiveUser().blockingGet()
191+
assertNull(active)
192+
assertNull(usersDao.getActiveUserSynchronously())
193+
}
194+
176195
private fun createUserEntity(userId: String, userName: String, server: String) =
177196
UserEntity(
178197
userId = userId,

0 commit comments

Comments
 (0)