status-desktop/storybook/qmlTests/tests/tst_WalletAccountsSelectorAdaptor.qml

209 lines
7.7 KiB
QML

import QtQuick 2.15
import QtTest 1.15
import SortFilterProxyModel 0.2
import StatusQ 0.1
import StatusQ.Core.Utils 0.1
import AppLayouts.Wallet.stores 1.0
import AppLayouts.Wallet.adaptors 1.0
import Models 1.0
import shared.stores 1.0
import utils 1.0
Item {
id: root
width: 600
height: 400
ListModel {
id: walletAccountsModel
readonly property var data: [
{
name: "helloworld",
address: "0x7F47C2e18a4BBf5487E6fb082eC2D9Ab0E6d7240",
emoji: "😋",
colorId: Constants.walletAccountColors.primary,
walletType: "",
canSend: true,
position: 0,
currencyBalance: ({amount: 1.25,
symbol: "USD",
displayDecimals: 2,
stripTrailingZeroes: false}),
migratedToKeycard: true
},
{
name: "Hot wallet (generated)",
emoji: "🚗",
colorId: Constants.walletAccountColors.army,
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8881",
walletType: Constants.generatedWalletType,
canSend: true,
position: 3,
currencyBalance: ({amount: 10,
symbol: "USD",
displayDecimals: 2,
stripTrailingZeroes: false}),
migratedToKeycard: false
},
{
name: "Family (seed)",
emoji: "🎨",
colorId: Constants.walletAccountColors.magenta,
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8882",
walletType: Constants.seedWalletType,
canSend: true,
position: 1,
currencyBalance: ({amount: 110.05,
symbol: "USD",
displayDecimals: 2,
stripTrailingZeroes: false}),
migratedToKeycard: false
},
{
name: "Tag Heuer (watch)",
emoji: "⌚",
colorId: Constants.walletAccountColors.copper,
color: "#CB6256",
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8883",
walletType: Constants.watchWalletType,
canSend: false,
position: 2,
currencyBalance: ({amount: 3,
symbol: "USD",
displayDecimals: 2,
stripTrailingZeroes: false}),
migratedToKeycard: false
},
{
name: "Fab (key)",
emoji: "🔑",
colorId: Constants.walletAccountColors.camel,
color: "#C78F67",
address: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8884",
walletType: Constants.keyWalletType,
canSend: true,
position: 4,
currencyBalance: ({amount: 999,
symbol: "USD",
displayDecimals: 2,
stripTrailingZeroes: false}),
migratedToKeycard: false
}
]
Component.onCompleted: append(data)
}
QtObject {
id: d
readonly property var flatNetworks: NetworksModel.flatNetworks
readonly property var assetsStore: WalletAssetsStore {
id: thisWalletAssetStore
walletTokensStore: TokensStore {
plainTokensBySymbolModel: TokensBySymbolModel {}
}
readonly property var baseGroupedAccountAssetModel: GroupedAccountsAssetsModel {}
assetsWithFilteredBalances: thisWalletAssetStore.groupedAccountsAssetsModel
}
readonly property var currencyStore: CurrenciesStore{}
readonly property var nonWatchWalletAcounts: SortFilterProxyModel {
sourceModel: walletAccountsModel
filters: ValueFilter { roleName: "canSend"; value: true }
}
readonly property var filteredFlatNetworksModel: SortFilterProxyModel {
sourceModel: d.flatNetworks
filters: ValueFilter { roleName: "isTest"; value: true }
}
readonly property ObjectProxyModel filteredBalancesModel: ObjectProxyModel {
sourceModel: d.assetsStore.groupedAccountAssetsModel
delegate: SortFilterProxyModel {
readonly property var balances: this
sourceModel: LeftJoinModel {
leftModel: model.balances
rightModel: d.filteredFlatNetworksModel
joinRole: "chainId"
}
filters: ValueFilter {
roleName: "chainId"
value: d.selectedNetworkChainId
}
}
expectedRoles: "balances"
exposedRoles: "balances"
}
property string selectedTokenKey: "ETH"
property int selectedNetworkChainId: 11155111
}
Component {
id: componentUnderTest
WalletAccountsSelectorAdaptor {
accounts: walletAccountsModel
assetsModel: d.assetsStore.groupedAccountAssetsModel
tokensBySymbolModel: d.assetsStore.walletTokensStore.plainTokensBySymbolModel
filteredFlatNetworksModel: d.filteredFlatNetworksModel
selectedTokenKey: d.selectedTokenKey
selectedNetworkChainId: d.selectedNetworkChainId
fnFormatCurrencyAmountFromBigInt: function(balance, symbol, decimals, options = null) {
return d.currencyStore.formatCurrencyAmountFromBigInt(balance, symbol, decimals, options)
}
}
}
property WalletAccountsSelectorAdaptor controlUnderTest: null
TestCase {
name: "WalletAccountsSelectorAdaptor"
when: windowShown
function init() {
controlUnderTest = createTemporaryObject(componentUnderTest, root)
}
function test_no_watchOnly_account() {
verify(!!controlUnderTest)
compare(controlUnderTest.processedWalletAccounts.count, d.nonWatchWalletAcounts.count)
}
function test_accountBalance_data() {
return [
{selectedTokenKey: "ETH", chainId: 11155111},
{selectedTokenKey: "STT", chainId: 11155111},
{selectedTokenKey: "ETH", chainId: 11155420},
{selectedTokenKey: "STT", chainId: 11155420}
]
}
function test_accountBalance(data) {
verify(!!controlUnderTest)
d.selectedTokenKey = data.selectedTokenKey
d.selectedNetworkChainId = data.chainId
let processedAccounts = controlUnderTest.processedWalletAccounts
for (let i = 0; i < processedAccounts.count; i++) {
let accountAddress = processedAccounts.get(i).address
let selectedTokenBalancesModel = ModelUtils.getByKey(d.filteredBalancesModel, "tokensKey", d.selectedTokenKey).balances
let tokenBalanceForSelectedAccount = ModelUtils.getByKey(selectedTokenBalancesModel, "account", accountAddress) ?? 0
let tokenBalanceForAccount = !!tokenBalanceForSelectedAccount ? tokenBalanceForSelectedAccount.balance: "0"
compare(tokenBalanceForAccount, processedAccounts.get(i).accountBalance.balance)
}
}
}
}