nim-status/test/chats.nim

164 lines
4.2 KiB
Nim

import # nim libs
json, options, os, unittest
import # vendor libs
chronos, json_serialization, sqlcipher, stew/byteutils
import # status libs
../status/[chats, contacts, conversions, database, messages],
./test_helpers
procSuite "chats":
asyncTest "chats":
let password = "qwerty"
let path = currentSourcePath.parentDir() & "/build/my.db"
removeFile(path)
let db = initializeDB(path, password)
var chat = Chat(
id: "ContactId",
name: "chat-name",
color: "blue",
chatType: 1,
active: true,
timestamp: 25,
deletedAtClockValue: 15,
publicKey: "public-key".toBytes(),
unviewedMessageCount: 3,
lastClockValue: 18,
lastMessage: some("lastMessage".toBytes()),
members: "members".toBytes(),
membershipUpdates: "membershipUpdates".toBytes(),
profile: "profile",
invitationAdmin: "invitationAdmin",
muted: false,
)
# saveChat
db.saveChat(chat)
# getChats
chat.id = "ContactId1"
db.saveChat(chat)
var dbChats = db.getChats()
check:
len(dbChats) == 2
# getChatById
var dbChat = db.getChatById("ContactId").get()
check:
dbChat.active == true and
dbChat.publicKey == "public-key".toBytes() and
dbChat.unviewedMessageCount == 3
# [mute/unmute]Chat
db.muteChat("ContactId")
dbChat = db.getChatById("ContactId").get()
check:
dbChat.muted == true
db.unmuteChat("ContactId")
dbChat = db.getChatById("ContactId").get()
check:
dbChat.muted == false
# blockContact
let contact = Contact(
id: "ContactId",
address: some("0xdeadbeefdeadbeefdeadbeefdeadbeef11111111".parseAddress),
name: some("TheUsername1"),
ensVerified: true,
ensVerifiedAt: 11111,
lastENSClockValue: 111,
ensVerificationRetries: 1,
alias: some("Teenage Mutant NinjaTurtle"),
identicon: "ABCDEF",
photo: some("ABC"),
lastUpdated: 11111,
systemTags: @["tag11","tag12","tag13"],
deviceInfo: @[ContactDeviceInfo(installationId: "ABC1", timestamp: 11, fcmToken: "ABC1")],
tributeToTalk: some("ABC1"),
localNickname: some("ABC1")
)
db.saveContact(contact)
var msg = Message(
id: "msg1",
whisperTimestamp: 0,
source: "ContactId",
destination: "default_destination".toBytes(),
text: "text",
contentType: 0,
username: "user1",
timestamp: 25,
chatId: "chat-id",
localChatId: "ContactId",
hide: false,
responseTo: "user1",
messageType: 0,
clockValue: 0,
seen: false,
outgoingStatus: "Delivered",
parsedText: "parsed".toBytes(),
rawPayload: "raw".toBytes(),
stickerPack: 0,
stickerHash: "hash",
commandId: "command1",
commandValue: "commandValue",
commandAddress: "commandAddress",
commandFrom: "commandFrom",
commandContract: "commandContract",
commandTransactionHash: "commandTransactionHash",
commandSignature: "commandSignature".toBytes(),
commandState: 3,
audioPayload: "audioPayload".toBytes(),
audioType: 0,
audioDurationMs: 10,
audioBase64: "sdf",
replaceMessage: "message_replacement",
rtl: false,
lineCount: 5,
links: "links",
mentions: "mentions",
imagePayload: "blob".toBytes(),
imageType: "type",
imageBase64: "sdfsdfsdf"
)
db.saveMessage(msg)
msg.id = "msg2"
msg.source = "ContactId1"
msg.localChatId = "ContactId1"
db.saveMessage(msg)
let chatsAfterBlocking = db.blockContact(contact)
check:
# Assert that blockContact deleted entry from user_messages
db.getMessageById("msg1").isNone()
# Assert that blockContact deleted entry from chats
db.getChatById("ContactId").isNone()
# Assert there is 1 unviewed message from ContactId1
len(chatsAfterBlocking) == 1
let chatEntry = chatsAfterBlocking[0]
echo "chatEntry"
echo chatEntry
check:
chatEntry.unviewedMessageCount == 1
# deleteChat
db.deleteChat(chat)
dbChats = db.getChats()
check:
# Chat with id=ContactId was deleted by blockContact
len(dbChats) == 0
db.close()
removeFile(path)