2024-07-04 11:55:16 +00:00
|
|
|
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)
|
2024-07-10 18:35:24 +00:00
|
|
|
accountBalanceFormatted: "120.55489 DAI"
|
2024-07-04 11:55:16 +00:00
|
|
|
|
|
|
|
networkShortName: Constants.networkShortChainNames.mainnet
|
|
|
|
networkName: "Mainnet"
|
|
|
|
networkIconPath: Style.svg("network/Network=Ethereum")
|
|
|
|
networkBlockExplorerUrl: "https://etherscan.io/"
|
|
|
|
|
2024-07-10 18:35:24 +00:00
|
|
|
fiatFees: "1.54 USD"
|
|
|
|
cryptoFees: "0.001 ETH"
|
2024-07-04 11:55:16 +00:00
|
|
|
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))
|
|
|
|
|
2024-07-11 21:00:15 +00:00
|
|
|
const fromImageHidden = findChild(controlUnderTest.contentItem, "fromImageIdenticon")
|
2024-07-04 11:55:16 +00:00
|
|
|
compare(fromImageHidden.visible, false)
|
|
|
|
|
|
|
|
const fromImage = findChild(controlUnderTest.contentItem, "fromImageIdenticon")
|
|
|
|
verify(!!fromImage)
|
|
|
|
compare(fromImage.asset.emoji, controlUnderTest.accountEmoji)
|
|
|
|
compare(fromImage.asset.color, controlUnderTest.accountColor)
|
2024-07-11 21:00:15 +00:00
|
|
|
const toImage = findChild(controlUnderTest.contentItem, "toImageIdenticon")
|
2024-07-04 11:55:16 +00:00
|
|
|
verify(!!toImage)
|
2024-07-11 21:00:15 +00:00
|
|
|
compare(toImage.asset.name, Constants.tokenIcon(controlUnderTest.fromTokenSymbol))
|
2024-07-04 11:55:16 +00:00
|
|
|
|
|
|
|
// 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)
|
|
|
|
}
|
|
|
|
|
2024-07-10 18:35:24 +00:00
|
|
|
function test_tokenInfo_data() {
|
|
|
|
return [
|
|
|
|
{tag: "ETH", fromTokenSymbol: "ETH"},
|
|
|
|
{tag: "DAI", fromTokenSymbol: "DAI"},
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_tokenInfo(data) {
|
2024-07-04 11:55:16 +00:00
|
|
|
verify(!!controlUnderTest)
|
2024-07-10 18:35:24 +00:00
|
|
|
controlUnderTest.fromTokenSymbol = data.fromTokenSymbol
|
2024-07-04 11:55:16 +00:00
|
|
|
|
|
|
|
// token box
|
|
|
|
const tokenBox = findChild(controlUnderTest.contentItem, "tokenBox")
|
|
|
|
verify(!!tokenBox)
|
|
|
|
|
|
|
|
compare(tokenBox.caption, qsTr("Token"))
|
|
|
|
compare(tokenBox.primaryText, controlUnderTest.fromTokenSymbol)
|
2024-07-10 18:35:24 +00:00
|
|
|
compare(tokenBox.secondaryText,
|
|
|
|
controlUnderTest.fromTokenSymbol === "ETH" ? ""
|
|
|
|
: SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.fromTokenContractAddress))
|
2024-07-04 11:55:16 +00:00
|
|
|
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)
|
2024-07-10 18:35:24 +00:00
|
|
|
compare(fiatFeesText.text, controlUnderTest.fiatFees)
|
2024-07-04 11:55:16 +00:00
|
|
|
|
|
|
|
const cryptoFeesText = findChild(feesBox, "cryptoFeesText")
|
|
|
|
verify(!!cryptoFeesText)
|
2024-07-10 18:35:24 +00:00
|
|
|
compare(cryptoFeesText.text, controlUnderTest.cryptoFees)
|
2024-07-04 11:55:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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)
|
2024-07-10 18:35:24 +00:00
|
|
|
compare(fiatFeesText.text, controlUnderTest.fiatFees)
|
2024-07-04 11:55:16 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|