133 lines
6.2 KiB
QML
133 lines
6.2 KiB
QML
|
import QtQuick 2.15
|
||
|
import QtTest 1.15
|
||
|
|
||
|
import AppLayouts.Wallet.services.dapps 1.0
|
||
|
import shared.stores 1.0
|
||
|
|
||
|
Item {
|
||
|
id: root
|
||
|
|
||
|
Component {
|
||
|
id: wcDAppsProviderComponent
|
||
|
WCDappsProvider {
|
||
|
id: wcDAppsProvider
|
||
|
readonly property SignalSpy connectedSpy: SignalSpy { target: wcDAppsProvider; signalName: "connected" }
|
||
|
readonly property SignalSpy disconnectedSpy: SignalSpy { target: wcDAppsProvider; signalName: "disconnected" }
|
||
|
supportedAccountsModel: ListModel {
|
||
|
ListElement {
|
||
|
address: "0x123"
|
||
|
}
|
||
|
}
|
||
|
store: DAppsStore {
|
||
|
signal dappsListReceived(string dappsJson)
|
||
|
|
||
|
property var addWalletConnectSessionCalls: []
|
||
|
function addWalletConnectSession(sessionJson) {
|
||
|
addWalletConnectSessionCalls.push(sessionJson)
|
||
|
}
|
||
|
|
||
|
property var deactivateWalletConnectSessionCalls: []
|
||
|
function deactivateWalletConnectSession(topic) {
|
||
|
deactivateWalletConnectSessionCalls.push(topic)
|
||
|
}
|
||
|
|
||
|
property var updateWalletConnectSessionsCalls: []
|
||
|
function updateWalletConnectSessions(topics) {
|
||
|
updateWalletConnectSessionsCalls.push(topics)
|
||
|
}
|
||
|
|
||
|
property var getDAppsCalls: []
|
||
|
function getDapps() {
|
||
|
getDAppsCalls.push(true)
|
||
|
return []
|
||
|
}
|
||
|
}
|
||
|
sdk: WalletConnectSDKBase {
|
||
|
id: sdk
|
||
|
enabled: true
|
||
|
projectId: ""
|
||
|
property bool sdkReady: true
|
||
|
property var activeSessions: ({})
|
||
|
getActiveSessions: function(callback) {
|
||
|
callback(sdk.activeSessions)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function buildSession(dappUrl, dappName, dappIcon, proposalId, account, chains) {
|
||
|
let sessionTemplate = (dappUrl, dappName, dappIcon, proposalId, eipAccount, eipChains) => {
|
||
|
return {
|
||
|
peer: {
|
||
|
metadata: {
|
||
|
description: "-",
|
||
|
icons: [
|
||
|
dappIcon
|
||
|
],
|
||
|
name: dappName,
|
||
|
url: dappUrl
|
||
|
}
|
||
|
},
|
||
|
namespaces: {
|
||
|
eip155: {
|
||
|
accounts: [eipAccount],
|
||
|
chains: eipChains
|
||
|
}
|
||
|
},
|
||
|
pairingTopic: proposalId,
|
||
|
topic: dappUrl
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const eipAccount = account ? `eip155:${account}` : ""
|
||
|
const eipChains = chains ? chains.map((chain) => `eip155:${chain}`) : []
|
||
|
|
||
|
return sessionTemplate(dappUrl, dappName, dappIcon, proposalId, eipAccount, eipChains)
|
||
|
}
|
||
|
|
||
|
TestCase {
|
||
|
id: wcDAppsProviderTest
|
||
|
|
||
|
property WCDappsProvider componentUnderTest: null
|
||
|
function init() {
|
||
|
componentUnderTest = createTemporaryObject(wcDAppsProviderComponent, root)
|
||
|
}
|
||
|
|
||
|
function test_addRemoveSession() {
|
||
|
const newSession = buildSession("https://example.com", "Example", "https://example.com/icon.png", "123", "0x123", ["1"])
|
||
|
componentUnderTest.sdk.activeSessions["https://example.com"] = newSession
|
||
|
componentUnderTest.sdk.approveSessionResult("requestID", newSession, null)
|
||
|
|
||
|
compare(componentUnderTest.store.addWalletConnectSessionCalls.length, 1, "addWalletConnectSession should be called once")
|
||
|
compare(componentUnderTest.connectedSpy.count, 1, "Connected signal should be emitted once")
|
||
|
compare(componentUnderTest.connectedSpy.signalArguments[0][0], "requestID", "Connected signal should have correct proposalId")
|
||
|
compare(componentUnderTest.connectedSpy.signalArguments[0][1], "https://example.com", "Connected signal should have correct topic")
|
||
|
compare(componentUnderTest.connectedSpy.signalArguments[0][2], "https://example.com", "Connected signal should have correct dAppUrl")
|
||
|
|
||
|
const dapp = componentUnderTest.getByTopic("https://example.com")
|
||
|
verify(!!dapp, "DApp should be found")
|
||
|
compare(dapp.name, "Example", "DApp should have correct name")
|
||
|
compare(dapp.url, "https://example.com", "DApp should have correct url")
|
||
|
compare(dapp.iconUrl, "https://example.com/icon.png", "DApp should have correct iconUrl")
|
||
|
compare(dapp.topic, "https://example.com", "DApp should have correct topic")
|
||
|
compare(dapp.connectorId, componentUnderTest.connectorId, "DApp should have correct connectorId")
|
||
|
compare(dapp.accountAddresses.count, 1, "DApp should have correct accountAddresses count")
|
||
|
compare(dapp.accountAddresses.get(0).address, "0x123", "DApp should have correct accountAddresses address")
|
||
|
compare(dapp.rawSessions.count, 1, "DApp should have correct rawSessions count")
|
||
|
|
||
|
componentUnderTest.sdk.sessionDelete("https://example.com", "")
|
||
|
compare(componentUnderTest.store.deactivateWalletConnectSessionCalls.length, 1, "deactivateWalletConnectSession should be called once")
|
||
|
compare(componentUnderTest.disconnectedSpy.count, 1, "Disconnected signal should be emitted once")
|
||
|
compare(componentUnderTest.disconnectedSpy.signalArguments[0][0], "https://example.com", "Disconnected signal should have correct topic")
|
||
|
compare(componentUnderTest.disconnectedSpy.signalArguments[0][1], "https://example.com", "Disconnected signal should have correct dAppUrl")
|
||
|
}
|
||
|
|
||
|
function test_disabledSDK() {
|
||
|
componentUnderTest.sdk.enabled = false
|
||
|
componentUnderTest.sdk.approveSessionResult("requestID", buildSession("https://example.com", "Example", "https://example.com/icon.png", "123", "0x123", ["1"]), "")
|
||
|
compare(componentUnderTest.connectedSpy.count, 0, "Connected signal should not be emitted")
|
||
|
componentUnderTest.sdk.sessionDelete("https://example.com", "")
|
||
|
compare(componentUnderTest.disconnectedSpy.count, 0, "Disconnected signal should not be emitted")
|
||
|
}
|
||
|
}
|
||
|
}
|