mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-17 18:11:54 +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
254 lines
9.3 KiB
QML
254 lines
9.3 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.popups.swap 1.0
|
|
|
|
import utils 1.0
|
|
|
|
Item {
|
|
id: root
|
|
width: 600
|
|
height: 400
|
|
|
|
Component {
|
|
id: componentUnderTest
|
|
SwapSignModal {
|
|
anchors.centerIn: parent
|
|
|
|
fromTokenSymbol: "DAI"
|
|
fromTokenAmount: "100.07"
|
|
fromTokenContractAddress: "0x6B175474E89094C44Da98b954EedeAC495271d0F"
|
|
|
|
toTokenSymbol: "USDT"
|
|
toTokenAmount: "142.07"
|
|
toTokenContractAddress: "0xdAC17F958D2ee523a2206206994597C13D831ec7"
|
|
|
|
accountName: "Hot wallet (generated)"
|
|
accountAddress: "0x7F47C2e98a4BBf5487E6fb082eC2D9Ab0E6d8881"
|
|
accountEmoji: "🚗"
|
|
accountColor: Utils.getColorForId(Constants.walletAccountColors.primary)
|
|
|
|
networkShortName: Constants.networkShortChainNames.mainnet
|
|
networkName: "Mainnet"
|
|
networkIconPath: Style.svg("network/Network=Ethereum")
|
|
networkBlockExplorerUrl: "https://etherscan.io/"
|
|
|
|
currentCurrency: "EUR"
|
|
fiatFees: "1.54"
|
|
cryptoFees: "0.001"
|
|
slippage: 0.2
|
|
|
|
loginType: Constants.LoginType.Password
|
|
}
|
|
}
|
|
|
|
SignalSpy {
|
|
id: signalSpyAccepted
|
|
target: controlUnderTest
|
|
signalName: "accepted"
|
|
}
|
|
|
|
SignalSpy {
|
|
id: signalSpyRejected
|
|
target: controlUnderTest
|
|
signalName: "rejected"
|
|
}
|
|
|
|
property SwapSignModal controlUnderTest: null
|
|
|
|
TestCase {
|
|
name: "SwapSignModal"
|
|
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"
|
|
controlUnderTest.toTokenSymbol = "ETH"
|
|
controlUnderTest.toTokenAmount = "1.42"
|
|
controlUnderTest.toTokenContractAddress = "0xdeadcaff"
|
|
|
|
// title & subtitle
|
|
compare(controlUnderTest.title, qsTr("Sign Swap"))
|
|
compare(controlUnderTest.subtitle, qsTr("1000.1235 SNT to 1.42 ETH")) // subtitle rounded amounts
|
|
|
|
// info box
|
|
const headerText = findChild(controlUnderTest.contentItem, "headerText")
|
|
verify(!!headerText)
|
|
compare(headerText.text, qsTr("Swap 1000.123456789 SNT to 1.42 ETH in %1 on %2").arg(controlUnderTest.accountName).arg(controlUnderTest.networkName))
|
|
const fromImage = findChild(controlUnderTest.contentItem, "fromImageIdenticon")
|
|
verify(!!fromImage)
|
|
compare(fromImage.asset.name, Constants.tokenIcon(controlUnderTest.fromTokenSymbol))
|
|
const toImage = findChild(controlUnderTest.contentItem, "toImageIdenticon")
|
|
verify(!!toImage)
|
|
compare(toImage.asset.name, Constants.tokenIcon(controlUnderTest.toTokenSymbol))
|
|
|
|
// pay box
|
|
const payBox = findChild(controlUnderTest.contentItem, "payBox")
|
|
verify(!!payBox)
|
|
compare(payBox.caption, qsTr("Pay"))
|
|
compare(payBox.primaryText, "%1 %2".arg(controlUnderTest.fromTokenAmount).arg(controlUnderTest.fromTokenSymbol))
|
|
compare(payBox.secondaryText, SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.fromTokenContractAddress))
|
|
|
|
// receive box
|
|
const receiveBox = findChild(controlUnderTest.contentItem, "receiveBox")
|
|
verify(!!receiveBox)
|
|
compare(receiveBox.caption, qsTr("Receive"))
|
|
compare(receiveBox.primaryText, "%1 %2".arg(controlUnderTest.toTokenAmount).arg(controlUnderTest.toTokenSymbol))
|
|
compare(receiveBox.secondaryText, SQUtils.Utils.elideAndFormatWalletAddress(controlUnderTest.toTokenContractAddress))
|
|
}
|
|
|
|
function test_accountInfo() {
|
|
verify(!!controlUnderTest)
|
|
|
|
// account box
|
|
const accountBox = findChild(controlUnderTest.contentItem, "accountBox")
|
|
verify(!!accountBox)
|
|
|
|
compare(accountBox.caption, qsTr("In 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_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 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(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 maxSlippageText = findChild(controlUnderTest.footer, "footerMaxSlippageText")
|
|
verify(!!maxSlippageText)
|
|
compare(maxSlippageText.text, "%1%".arg(controlUnderTest.slippage))
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
}
|