2024-10-23 13:50:05 +00:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
import app/modules/shared_models/[member_model, member_item]
|
|
|
|
import app_service/common/types
|
|
|
|
|
|
|
|
proc createTestMemberItem(pubKey: string): MemberItem =
|
|
|
|
return initMemberItem(
|
|
|
|
pubKey = pubKey,
|
|
|
|
displayName = "",
|
|
|
|
ensName = "",
|
|
|
|
isEnsVerified = false,
|
|
|
|
localNickname = "",
|
|
|
|
alias = "",
|
|
|
|
icon = "",
|
|
|
|
colorId = 0,
|
2024-10-29 18:08:12 +00:00
|
|
|
trustStatus = TrustStatus.Unknown,
|
2024-10-23 13:50:05 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
let memberA = createTestMemberItem("0xa")
|
|
|
|
let memberB = createTestMemberItem("0xb")
|
|
|
|
let memberC = createTestMemberItem("0xc")
|
|
|
|
let memberD = createTestMemberItem("0xd")
|
|
|
|
let memberE = createTestMemberItem("0xe")
|
|
|
|
|
|
|
|
suite "empty member model":
|
|
|
|
let model = newModel()
|
|
|
|
|
|
|
|
test "initial size":
|
|
|
|
require(model.rowCount() == 0)
|
|
|
|
|
|
|
|
suite "updating member items":
|
|
|
|
setup:
|
|
|
|
let model = newModel()
|
|
|
|
model.addItems(@[memberA, memberB, memberC])
|
|
|
|
check(model.rowCount() == 3)
|
|
|
|
|
|
|
|
test "update only display name":
|
|
|
|
let updatedRoles = model.updateItem(
|
|
|
|
pubkey = "0xa",
|
|
|
|
displayName = "newName",
|
|
|
|
ensName = "",
|
|
|
|
isEnsVerified = false,
|
|
|
|
localNickname = "",
|
|
|
|
alias = "",
|
|
|
|
icon = "",
|
|
|
|
isContact = false,
|
|
|
|
memberRole = MemberRole.None,
|
|
|
|
joined = false,
|
2024-10-29 18:08:12 +00:00
|
|
|
trustStatus = TrustStatus.Unknown,
|
2024-10-23 13:50:05 +00:00
|
|
|
callDataChanged = false,
|
|
|
|
)
|
|
|
|
# Two updated roles, because preferredDisplayName gets updated too
|
|
|
|
check(updatedRoles.len() == 2)
|
|
|
|
let item = model.getMemberItem("0xa")
|
|
|
|
check(item.displayName == "newName")
|
|
|
|
|
|
|
|
test "update two properties not related to name":
|
|
|
|
let updatedRoles = model.updateItem(
|
|
|
|
pubkey = "0xb",
|
|
|
|
displayName = "",
|
|
|
|
ensName = "",
|
|
|
|
isEnsVerified = false,
|
|
|
|
localNickname = "",
|
|
|
|
alias = "",
|
|
|
|
icon = "icon",
|
|
|
|
isContact = true,
|
|
|
|
memberRole = MemberRole.None,
|
|
|
|
joined = false,
|
2024-10-29 18:08:12 +00:00
|
|
|
trustStatus = TrustStatus.Unknown,
|
2024-10-23 13:50:05 +00:00
|
|
|
callDataChanged = false,
|
|
|
|
)
|
|
|
|
check(updatedRoles.len() == 2)
|
|
|
|
let item = model.getMemberItem("0xb")
|
|
|
|
check(item.icon == "icon")
|
|
|
|
check(item.isContact == true)
|
|
|
|
|
|
|
|
test "update two items at the same time":
|
|
|
|
let memberACopy = memberA
|
|
|
|
memberACopy.displayName = "bob"
|
|
|
|
|
|
|
|
let memberBCopy = memberB
|
|
|
|
memberBCopy.displayName = "alice"
|
|
|
|
|
|
|
|
model.updateItems(@[memberACopy, memberBCopy])
|
|
|
|
let itemA = model.getMemberItem("0xa")
|
|
|
|
check(itemA.displayName == "bob")
|
|
|
|
model.updateItems(@[memberACopy, memberBCopy])
|
|
|
|
let itemB = model.getMemberItem("0xb")
|
|
|
|
check(itemB.displayName == "alice")
|
|
|
|
|
|
|
|
test "remove an item using updateToTheseItems":
|
|
|
|
model.updateToTheseItems(@[memberA, memberB])
|
|
|
|
check(model.rowCount == 2)
|
|
|
|
|
|
|
|
test "add an item using updateToTheseItems":
|
|
|
|
model.updateToTheseItems(@[memberA, memberB, memberD])
|
|
|
|
check(model.rowCount == 3)
|
|
|
|
|
|
|
|
test "add an item and update another using updateToTheseItems":
|
|
|
|
let memberACopy = memberA
|
|
|
|
memberACopy.displayName = "roger"
|
|
|
|
model.updateToTheseItems(@[memberACopy, memberB, memberD, memberE])
|
|
|
|
check(model.rowCount == 4)
|
|
|
|
let itemA = model.getMemberItem("0xa")
|
|
|
|
check(itemA.displayName == "roger")
|
|
|
|
|
|
|
|
test "add an item, remove one and update another using updateToTheseItems":
|
|
|
|
let memberACopy = memberA
|
|
|
|
memberACopy.displayName = "brandon"
|
|
|
|
let memberCCopy = memberC
|
|
|
|
memberCCopy.displayName = "kurt"
|
|
|
|
let memberDCopy = memberD
|
|
|
|
memberDCopy.displayName = "amanda"
|
|
|
|
let memberECopy = memberE
|
|
|
|
memberECopy.displayName = "gina"
|
|
|
|
|
|
|
|
model.updateToTheseItems(@[memberACopy, memberCCopy, memberDCopy, memberECopy])
|
|
|
|
check(model.rowCount == 4)
|
|
|
|
let itemA = model.getMemberItem("0xa")
|
|
|
|
check(itemA.displayName == "brandon")
|
|
|
|
let itemC = model.getMemberItem("0xc")
|
|
|
|
check(itemC.displayName == "kurt")
|
|
|
|
let itemD = model.getMemberItem("0xd")
|
|
|
|
check(itemD.displayName == "amanda")
|
|
|
|
let itemE = model.getMemberItem("0xe")
|
|
|
|
check(itemE.displayName == "gina")
|