status-desktop/storybook/qmlTests/tests/tst_RecipientView.qml
Cuteivist 28690379e1
feat: Simple send modal recipient view (#17096)
* feat: Simple send modal recipient view

* feat: Handle duplicate entries in recent recipient view
2025-01-27 17:35:59 +01:00

156 lines
5.9 KiB
QML

import QtQuick 2.15
import QtTest 1.15
import QtQml 2.15
import AppLayouts.Wallet.views 1.0
import StatusQ 0.1
import StatusQ.Core.Utils 0.1
import utils 1.0
Item {
id: root
Component {
id: testComponent
RecipientView {
id: recipientView
width: 500
model: ListModel {
readonly property var data: [
{
name: "helloworld",
emoji: "😋",
colorId: Constants.walletAccountColors.primary,
color: "#2A4AF5",
address: "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240",
},
{
name: "Hot wallet (generated)",
emoji: "🚗",
colorId: Constants.walletAccountColors.army,
color: "#216266",
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8881",
},
{
name: "Family (seed)",
emoji: "🎨",
colorId: Constants.walletAccountColors.magenta,
color: "#EC266C",
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8882",
},
]
Component.onCompleted: append(data)
}
}
}
ListModel {
id: emptyModel
}
TestCase {
name: "RecipientView"
SignalSpy {
id: resolveEnsSignalSpy
signalName: "resolveENS"
}
when: windowShown
function test_empty() {
const view = createTemporaryObject(testComponent, root, {model: emptyModel })
verify(view)
compare(view.model.ModelCount.count, 0)
compare(view.searchPattern, "")
compare(view.selectedRecipientAddress, "")
compare(view.item.objectName, "RecipientView_SendRecipientInput")
}
function test_search() {
const view = createTemporaryObject(testComponent, root)
verify(view)
const privateObject = findChild(view, "RecipientView_private")
verify(privateObject)
verify(privateObject.validationTimer)
privateObject.validationTimer.interval = 0 // For testing purposes skipping the validation delay
compare(view.searchPattern, "")
compare(view.selectedRecipientAddress, "")
compare(view.item.objectName, "RecipientView_SendRecipientInput")
view.item.text = "hello"
wait(100)
compare(view.searchPattern, "hello")
compare(view.selectedRecipientAddress, "")
compare(view.item.objectName, "RecipientView_SendRecipientInput")
// Imitate filtering: no results found
view.model = emptyModel
view.item.text = "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0Fd864dd"
wait(100)
compare(view.searchPattern, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0Fd864dd")
compare(view.selectedRecipientAddress, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0Fd864dd")
compare(view.item.objectName, "RecipientView_RecipientViewDelegate", "Delegate is changed after selection is done")
}
function test_ens() {
const view = createTemporaryObject(testComponent, root)
verify(view)
const privateObject = findChild(view, "RecipientView_private")
verify(privateObject)
privateObject.validationTimer.interval = 0 // For testing purposes skipping the validation delay
compare(view.searchPattern, "")
compare(view.selectedRecipientAddress, "")
compare(view.item.objectName, "RecipientView_SendRecipientInput")
resolveEnsSignalSpy.target = view
view.item.text = "helloworld.eth"
wait(100)
compare(view.searchPattern, "", "Search pattern is not changed until ENS is resolved or error")
compare(view.selectedRecipientAddress, "")
compare(resolveEnsSignalSpy.count, 1)
compare(resolveEnsSignalSpy.signalArguments[0][0], "helloworld.eth")
const uuid = resolveEnsSignalSpy.signalArguments[0][1]
verify(uuid !== "")
view.ensNameResolved("", "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240", uuid)
compare(view.searchPattern, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240", "Resolved address is searched if model is not empty")
compare(view.selectedRecipientAddress, "")
view.ensNameResolved("", "", uuid)
compare(view.searchPattern, "helloworld.eth", "ENS is searched if address is not received")
compare(view.selectedRecipientAddress, "")
// Imitate filtering: no results found
view.model = emptyModel
view.ensNameResolved("", "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240", uuid)
compare(view.searchPattern, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240")
compare(view.selectedRecipientAddress, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240")
compare(view.item.objectName, "RecipientView_RecipientViewDelegate", "Delegate is changed after selection is done")
}
function test_prefillSelectedRecipientAddress() {
const view = createTemporaryObject(testComponent, root)
verify(view)
compare(view.selectedRecipientAddress, "")
compare(view.item.objectName, "RecipientView_SendRecipientInput")
view.selectedRecipientAddress = "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240"
compare(view.selectedRecipientAddress, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240")
compare(view.item.objectName, "RecipientView_RecipientViewDelegate")
compare(view.item.address, "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240")
}
}
}