mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-29 15:57:03 +00:00
ca8a0028a8
* feat(WalletConnect): Implement sign request modal 1. Implementing sign request modal based on SignTransactionModalBase 2. Adding storybook page 3. Integrate it in the app 4. Removing DAppRequestModal 5. Update RoundImageWithBadge to preserve aspect ratio between badge and main image * fix(WalletConnect): Remove unneeded properties from WalletConnectService API Removing `selectedAccountAddress` and `loginType`. These properties are now passed through DAppsWorkflow API * fix(WalletConnect): Removing unnecessary changes
280 lines
10 KiB
QML
280 lines
10 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Controls 2.15
|
|
import QtTest 1.15
|
|
import QtQml 2.15
|
|
|
|
import Models 1.0
|
|
|
|
import StatusQ.Core.Utils 0.1 as SQUtils
|
|
|
|
import AppLayouts.Wallet 1.0
|
|
import AppLayouts.Wallet.popups.swap 1.0
|
|
|
|
import utils 1.0
|
|
|
|
Item {
|
|
id: root
|
|
width: 600
|
|
height: 400
|
|
|
|
Component {
|
|
id: componentUnderTest
|
|
SwapApproveCapModal {
|
|
anchors.centerIn: parent
|
|
|
|
fromTokenSymbol: "DAI"
|
|
fromTokenAmount: "100.07"
|
|
fromTokenContractAddress: "0x6B175474E89094C44Da98b954EedeAC495271d0F"
|
|
|
|
accountName: "Hot wallet (generated)"
|
|
accountAddress: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8881"
|
|
accountEmoji: "🚗"
|
|
accountColor: Utils.getColorForId(Constants.walletAccountColors.primary)
|
|
accountBalanceAmount: "120.55489"
|
|
|
|
networkShortName: Constants.networkShortChainNames.mainnet
|
|
networkName: "Mainnet"
|
|
networkIconPath: Style.svg("network/Network=Ethereum")
|
|
networkBlockExplorerUrl: "https://etherscan.io/"
|
|
|
|
currentCurrency: "EUR"
|
|
fiatFees: "1.54"
|
|
cryptoFees: "0.001"
|
|
estimatedTime: Constants.TransactionEstimatedTime.Unknown
|
|
|
|
loginType: Constants.LoginType.Password
|
|
}
|
|
}
|
|
|
|
SignalSpy {
|
|
id: signalSpyAccepted
|
|
target: controlUnderTest
|
|
signalName: "accepted"
|
|
}
|
|
|
|
SignalSpy {
|
|
id: signalSpyRejected
|
|
target: controlUnderTest
|
|
signalName: "rejected"
|
|
}
|
|
|
|
property SwapApproveCapModal controlUnderTest: null
|
|
|
|
TestCase {
|
|
name: "SwapApproveCapModal"
|
|
when: windowShown
|
|
|
|
function init() {
|
|
controlUnderTest = createTemporaryObject(componentUnderTest, root)
|
|
signalSpyAccepted.clear()
|
|
signalSpyRejected.clear()
|
|
}
|
|
|
|
function test_basicGeometry() {
|
|
verify(!!controlUnderTest)
|
|
verify(controlUnderTest.width > 0)
|
|
verify(controlUnderTest.height > 0)
|
|
}
|
|
|
|
function test_fromToProps() {
|
|
verify(!!controlUnderTest)
|
|
controlUnderTest.fromTokenSymbol = "SNT"
|
|
controlUnderTest.fromTokenAmount = "1000.123456789"
|
|
controlUnderTest.fromTokenContractAddress = "Oxdeadbeef"
|
|
|
|
// title & subtitle
|
|
compare(controlUnderTest.title, qsTr("Approve spending cap"))
|
|
compare(controlUnderTest.subtitle, controlUnderTest.serviceProviderURL)
|
|
|
|
// info box
|
|
const headerText = findChild(controlUnderTest.contentItem, "headerText")
|
|
verify(!!headerText)
|
|
compare(headerText.text, qsTr("Set %1 %2 spending cap in %3 for %4 on %5")
|
|
.arg(controlUnderTest.formatBigNumber(controlUnderTest.fromTokenAmount)).arg(controlUnderTest.fromTokenSymbol)
|
|
.arg(controlUnderTest.accountName).arg(controlUnderTest.serviceProviderURL).arg(controlUnderTest.networkName))
|
|
|
|
const fromImageHidden = findChild(controlUnderTest.contentItem, "fromImageIdenticon")
|
|
compare(fromImageHidden.visible, false)
|
|
|
|
const fromImage = findChild(controlUnderTest.contentItem, "fromImageIdenticon")
|
|
verify(!!fromImage)
|
|
compare(fromImage.asset.emoji, controlUnderTest.accountEmoji)
|
|
compare(fromImage.asset.color, controlUnderTest.accountColor)
|
|
const toImage = findChild(controlUnderTest.contentItem, "toImageIdenticon")
|
|
verify(!!toImage)
|
|
compare(toImage.asset.name, Constants.tokenIcon(controlUnderTest.fromTokenSymbol))
|
|
|
|
// spending cap box
|
|
const spendingCapBox = findChild(controlUnderTest.contentItem, "spendingCapBox")
|
|
verify(!!spendingCapBox)
|
|
compare(spendingCapBox.caption, qsTr("Set spending cap"))
|
|
compare(spendingCapBox.primaryText, controlUnderTest.formatBigNumber(controlUnderTest.fromTokenAmount))
|
|
}
|
|
|
|
function test_accountInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// account box
|
|
const accountBox = findChild(controlUnderTest.contentItem, "accountBox")
|
|
verify(!!accountBox)
|
|
|
|
compare(accountBox.caption, qsTr("Account"))
|
|
compare(accountBox.primaryText, controlUnderTest.accountName)
|
|
compare(accountBox.secondaryText, SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.accountAddress))
|
|
compare(accountBox.asset.emoji, controlUnderTest.accountEmoji)
|
|
compare(accountBox.asset.color, controlUnderTest.accountColor)
|
|
}
|
|
|
|
function test_tokenInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// token box
|
|
const tokenBox = findChild(controlUnderTest.contentItem, "tokenBox")
|
|
verify(!!tokenBox)
|
|
|
|
compare(tokenBox.caption, qsTr("Token"))
|
|
compare(tokenBox.primaryText, controlUnderTest.fromTokenSymbol)
|
|
compare(tokenBox.secondaryText, SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.fromTokenContractAddress))
|
|
compare(tokenBox.icon, Constants.tokenIcon(controlUnderTest.fromTokenSymbol))
|
|
compare(tokenBox.badge, controlUnderTest.networkIconPath)
|
|
}
|
|
|
|
function test_smartContractInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// smart contract box
|
|
const smartContractBox = findChild(controlUnderTest.contentItem, "smartContractBox")
|
|
verify(!!smartContractBox)
|
|
|
|
compare(smartContractBox.caption, qsTr("Via smart contract"))
|
|
compare(smartContractBox.primaryText, controlUnderTest.serviceProviderName)
|
|
compare(smartContractBox.secondaryText, SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.serviceProviderContractAddress))
|
|
compare(smartContractBox.icon, Style.png("swap/paraswap"))
|
|
}
|
|
|
|
function test_networkInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// network box
|
|
const networkBox = findChild(controlUnderTest.contentItem, "networkBox")
|
|
verify(!!networkBox)
|
|
|
|
compare(networkBox.caption, qsTr("Network"))
|
|
compare(networkBox.primaryText, controlUnderTest.networkName)
|
|
compare(networkBox.icon, controlUnderTest.networkIconPath)
|
|
}
|
|
|
|
function test_feesInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// fees box
|
|
const feesBox = findChild(controlUnderTest.contentItem, "feesBox")
|
|
verify(!!feesBox)
|
|
|
|
compare(feesBox.caption, qsTr("Fees"))
|
|
compare(feesBox.primaryText, qsTr("Max. fees on %1").arg(controlUnderTest.networkName))
|
|
|
|
const fiatFeesText = findChild(feesBox, "fiatFeesText")
|
|
verify(!!fiatFeesText)
|
|
compare(fiatFeesText.text, "%1 %2".arg(controlUnderTest.fiatFees).arg(controlUnderTest.currentCurrency))
|
|
|
|
const cryptoFeesText = findChild(feesBox, "cryptoFeesText")
|
|
verify(!!cryptoFeesText)
|
|
compare(cryptoFeesText.text, "%1 ETH".arg(controlUnderTest.cryptoFees))
|
|
}
|
|
|
|
function test_loginType_data() {
|
|
return [
|
|
{ tag: "password", loginType: Constants.LoginType.Password, iconName: "password" },
|
|
{ tag: "touchId", loginType: Constants.LoginType.Biometrics, iconName: "touch-id" },
|
|
{ tag: "keycard", loginType: Constants.LoginType.Keycard, iconName: "keycard" }
|
|
]
|
|
}
|
|
|
|
function test_loginType(data) {
|
|
const loginType = data.loginType
|
|
const iconName = data.iconName
|
|
|
|
verify(!!controlUnderTest)
|
|
|
|
controlUnderTest.loginType = loginType
|
|
|
|
const signButton = findChild(controlUnderTest.footer, "signButton")
|
|
verify(!!signButton)
|
|
compare(signButton.icon.name, iconName)
|
|
}
|
|
|
|
function test_loading() {
|
|
verify(!!controlUnderTest)
|
|
|
|
compare(controlUnderTest.feesLoading, false)
|
|
|
|
const signButton = findChild(controlUnderTest.footer, "signButton")
|
|
verify(!!signButton)
|
|
compare(signButton.interactive, true)
|
|
|
|
const footerFiatFeesText = findChild(controlUnderTest.footer, "footerFiatFeesText")
|
|
verify(!!footerFiatFeesText)
|
|
compare(footerFiatFeesText.loading, false)
|
|
|
|
const footerEstimatedTime = findChild(controlUnderTest.footer, "footerEstimatedTime")
|
|
verify(!!footerEstimatedTime)
|
|
compare(footerEstimatedTime.loading, false)
|
|
|
|
const fiatFeesText = findChild(controlUnderTest.contentItem, "fiatFeesText")
|
|
verify(!!fiatFeesText)
|
|
compare(fiatFeesText.loading, false)
|
|
|
|
const cryptoFeesText = findChild(controlUnderTest.contentItem, "cryptoFeesText")
|
|
verify(!!cryptoFeesText)
|
|
compare(cryptoFeesText.loading, false)
|
|
|
|
controlUnderTest.feesLoading = true
|
|
|
|
compare(signButton.interactive, false)
|
|
compare(footerFiatFeesText.loading, true)
|
|
compare(footerEstimatedTime.loading, true)
|
|
compare(fiatFeesText.loading, true)
|
|
compare(cryptoFeesText.loading, true)
|
|
}
|
|
|
|
function test_footerInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
const fiatFeesText = findChild(controlUnderTest.footer, "footerFiatFeesText")
|
|
verify(!!fiatFeesText)
|
|
compare(fiatFeesText.text, "%1 %2".arg(controlUnderTest.fiatFees).arg(controlUnderTest.currentCurrency))
|
|
|
|
const footerEstimatedTime = findChild(controlUnderTest.footer, "footerEstimatedTime")
|
|
verify(!!footerEstimatedTime)
|
|
compare(footerEstimatedTime.text, WalletUtils.getLabelForEstimatedTxTime(controlUnderTest.estimatedTime))
|
|
}
|
|
|
|
function test_signButton() {
|
|
verify(!!controlUnderTest)
|
|
|
|
const signButton = findChild(controlUnderTest.footer, "signButton")
|
|
verify(!!signButton)
|
|
compare(signButton.interactive, true)
|
|
|
|
signButton.clicked()
|
|
compare(signalSpyAccepted.count, 1)
|
|
compare(controlUnderTest.opened, false)
|
|
compare(controlUnderTest.result, Dialog.Accepted)
|
|
}
|
|
|
|
function test_rejectButton() {
|
|
verify(!!controlUnderTest)
|
|
|
|
const rejectButton = findChild(controlUnderTest.footer, "rejectButton")
|
|
verify(!!rejectButton)
|
|
compare(rejectButton.interactive, true)
|
|
|
|
rejectButton.clicked()
|
|
compare(signalSpyRejected.count, 1)
|
|
compare(controlUnderTest.opened, false)
|
|
compare(controlUnderTest.result, Dialog.Rejected)
|
|
}
|
|
}
|
|
}
|