diff --git a/storybook/qmlTests/tests/tst_RecipientSelectorPanel.qml b/storybook/qmlTests/tests/tst_RecipientSelectorPanel.qml new file mode 100644 index 0000000000..c4d59e323a --- /dev/null +++ b/storybook/qmlTests/tests/tst_RecipientSelectorPanel.qml @@ -0,0 +1,206 @@ +import QtQuick 2.15 +import QtTest 1.15 + +import shared.popups.send.panels 1.0 + +import utils 1.0 + +import Models 1.0 + +Item { + id: root + width: 600 + height: 400 + + ListModel { + id: savedAddModel + + Component.onCompleted: { + const data = [] + for (let i = 0; i < 10; i++) + data.push({ + name: "some saved addr name " + i, + ens: [], + address: "0x2B748A02e06B159C7C3E98F5064577B96E55A7b4", + chainShortNames: "eth:arb1" + }) + append(data) + } + } + + ListModel { + id: walletAccountsModel + readonly property var data: [ + { + name: "helloworld", + emoji: "😋", + colorId: Constants.walletAccountColors.primary, + color: "#2A4AF5", + address: "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240", + walletType: "", + preferredSharingChainIds: "5:420:421613", + currencyBalance: ({amount: 1.25, + symbol: "USD", + displayDecimals: 2, + stripTrailingZeroes: false}), + migratedToKeycard: true + }, + { + name: "Hot wallet (generated)", + emoji: "🚗", + colorId: Constants.walletAccountColors.army, + color: "#216266", + address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8881", + walletType: Constants.generatedWalletType, + preferredSharingChainIds: "5:420:421613", + currencyBalance: ({amount: 10, + symbol: "USD", + displayDecimals: 2, + stripTrailingZeroes: false}), + migratedToKeycard: false + }, + { + name: "Family (seed)", + emoji: "🎨", + colorId: Constants.walletAccountColors.magenta, + color: "#EC266C", + address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8882", + walletType: Constants.seedWalletType, + preferredSharingChainIds: "5:420:421613", + currencyBalance: ({amount: 110.05, + symbol: "USD", + displayDecimals: 2, + stripTrailingZeroes: false}), + migratedToKeycard: false + }, + { + name: "Fab (key)", + emoji: "🔑", + colorId: Constants.walletAccountColors.camel, + color: "#C78F67", + address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8884", + walletType: Constants.keyWalletType, + preferredSharingChainIds: "5:420:421613", + currencyBalance: ({amount: 999, + symbol: "USD", + displayDecimals: 2, + stripTrailingZeroes: false}), + migratedToKeycard: false + } + + ] + + Component.onCompleted: append(data) + } + + ListModel { + id: recentsModel + + readonly property var data: [ + { + activityEntry: + { + sender: "0x10bbfe4072ebb77e53aa9117c7300531d151feaf", + recipient: "0x10bbfe4072ebb77e53aa9117c7300531d151ffff", + timestamp: "1715274859", + txType: 0, + amountCurrency: { + objectName: "", + amount: 1, + symbol:"", + displayDecimals: 0, + stripTrailingZeroes: true + } + } + }, + { + activityEntry: + { + sender: "0x1bbbfe4072ebb77e53aa9117c7300531d151feaf", + recipient: "0xebfbfe4072ebb77e53aa9117c7300531d1511111", + timestamp: "1709832115", + txType: 1, + amountCurrency: { + objectName: "", + amount: 1, + symbol:"", + displayDecimals: 0, + stripTrailingZeroes: true + } + } + } + ] + + Component.onCompleted: append(data) + } + + Component { + id: componentUnderTest + + RecipientSelectorPanel { + anchors.fill: parent + + savedAddressesModel: savedAddModel + myAccountsModel: walletAccountsModel + recentRecipientsModel: recentsModel + } + } + + SignalSpy { + id: recipientSelectedSpy + target: controlUnderTest + signalName: "onRecipientSelected" + } + + SignalSpy { + id: recentTabSelectedSpy + target: controlUnderTest + signalName: "onRecentRecipientsTabSelected" + } + + property RecipientSelectorPanel controlUnderTest: null + + TestCase { + name: "RecipientSelectorPanel" + when: windowShown + + function init() { + controlUnderTest = createTemporaryObject(componentUnderTest, root) + recipientSelectedSpy.clear() + recentTabSelectedSpy.clear() + } + + function test_basicGeometry() { + verify(!!controlUnderTest) + verify(controlUnderTest.width > 0) + verify(controlUnderTest.height > 0) + } + + // TODO: Improve with mouseClick + function test_selectRecentsTab() { + const tabsComponent = findChild(controlUnderTest, "recipientTypeTabBar") + tabsComponent.currentIndex = 2 + compare(recentTabSelectedSpy.count, 1) + tabsComponent.currentIndex = 1 + tabsComponent.currentIndex = 2 + compare(recentTabSelectedSpy.count, 2) + } + + function test_checkSharedAddressesCount() { + const savedAddressesListComponent = findChild(controlUnderTest, "savedAddressesList") + compare(savedAddressesListComponent.count, 10) + } + + function test_checkWalletAccountsCount() { + const myAccountsListComponent = findChild(controlUnderTest, "myAccountsList") + compare(myAccountsListComponent.count, 4) + } + + function test_checkRecentReceiversCount() { + const recentReceiversListComponent = findChild(controlUnderTest, "recentReceiversList") + compare(recentReceiversListComponent.count, 2) + } + + // TODO: Click on items and review onRecipientSelected signal + } +} diff --git a/ui/imports/shared/popups/send/panels/RecipientSelectorPanel.qml b/ui/imports/shared/popups/send/panels/RecipientSelectorPanel.qml index c3602b05f3..a06e501276 100644 --- a/ui/imports/shared/popups/send/panels/RecipientSelectorPanel.qml +++ b/ui/imports/shared/popups/send/panels/RecipientSelectorPanel.qml @@ -45,6 +45,7 @@ Item { StatusTabBar { id: recipientTypeTabBar + objectName: "recipientTypeTabBar" anchors.top: parent.top anchors.left: parent.left