@@ -2233,6 +2233,7 @@ class MockNodeModel : public QObject
22332233 Q_PROPERTY (bool faulted MEMBER m_faulted NOTIFY faultedChanged)
22342234 Q_PROPERTY (int blockTipHeight MEMBER m_block_tip_height NOTIFY blockTipHeightChanged)
22352235 Q_PROPERTY (int broadcastSignedPsbtCalls READ broadcastSignedPsbtCalls NOTIFY broadcastSignedPsbtCallsChanged)
2236+ Q_PROPERTY (int externalSignerQueryCalls READ externalSignerQueryCalls NOTIFY externalSignerQueryCallsChanged)
22362237
22372238public:
22382239 bool m_pause{false };
@@ -2246,8 +2247,12 @@ class MockNodeModel : public QObject
22462247 QString m_next_broadcast_message{QStringLiteral (" Transaction broadcast successfully! Transaction ID: mocktxid" )};
22472248 QString m_next_broadcast_txid{QStringLiteral (" mocktxid" )};
22482249 QString m_last_broadcast_psbt;
2250+ bool m_external_signer_query_success{true };
2251+ QVariantList m_external_signers{QVariant{QStringLiteral (" Mock External Signer" )}};
2252+ QString m_external_signer_query_error;
22492253
22502254 int broadcastSignedPsbtCalls () const { return m_broadcast_signed_psbt_calls; }
2255+ int externalSignerQueryCalls () const { return m_external_signer_query_calls; }
22512256
22522257 Q_INVOKABLE void startNodeInitializionThread () {}
22532258 Q_INVOKABLE void requestShutdown () { Q_EMIT requestedShutdown (); }
@@ -2261,6 +2266,69 @@ class MockNodeModel : public QObject
22612266 return pattern.match (value).hasMatch ();
22622267 }
22632268
2269+ Q_INVOKABLE QVariantMap listExternalSigners ()
2270+ {
2271+ ++m_external_signer_query_calls;
2272+ Q_EMIT externalSignerQueryCallsChanged ();
2273+
2274+ QVariantMap payload;
2275+ payload.insert (QStringLiteral (" success" ), m_external_signer_query_success);
2276+
2277+ if (!m_external_signer_query_success) {
2278+ payload.insert (QStringLiteral (" state" ), QStringLiteral (" error" ));
2279+ payload.insert (
2280+ QStringLiteral (" message" ),
2281+ m_external_signer_query_error.isEmpty ()
2282+ ? QStringLiteral (" Unable to detect external signer due to a mock error." )
2283+ : m_external_signer_query_error
2284+ );
2285+ payload.insert (QStringLiteral (" count" ), 0 );
2286+ payload.insert (QStringLiteral (" signers" ), QVariantList{});
2287+ return payload;
2288+ }
2289+
2290+ payload.insert (QStringLiteral (" signers" ), m_external_signers);
2291+ payload.insert (QStringLiteral (" count" ), m_external_signers.size ());
2292+
2293+ if (m_external_signers.isEmpty ()) {
2294+ payload.insert (QStringLiteral (" state" ), QStringLiteral (" missing" ));
2295+ payload.insert (
2296+ QStringLiteral (" message" ),
2297+ QStringLiteral (" No external signer detected. Connect your device and retry." )
2298+ );
2299+ } else if (m_external_signers.size () == 1 ) {
2300+ payload.insert (QStringLiteral (" state" ), QStringLiteral (" available" ));
2301+ payload.insert (
2302+ QStringLiteral (" message" ),
2303+ QStringLiteral (" External signer detected: %1" )
2304+ .arg (m_external_signers.constFirst ().toString ())
2305+ );
2306+ } else {
2307+ payload.insert (QStringLiteral (" state" ), QStringLiteral (" multiple" ));
2308+ payload.insert (
2309+ QStringLiteral (" message" ),
2310+ QStringLiteral (" Multiple external signers detected. Connect only one signer and retry." )
2311+ );
2312+ }
2313+
2314+ return payload;
2315+ }
2316+
2317+ Q_INVOKABLE void setExternalSignerQueryResultForTest (const bool success,
2318+ const QVariantList& signers,
2319+ const QString& error)
2320+ {
2321+ m_external_signer_query_success = success;
2322+ m_external_signers = signers;
2323+ m_external_signer_query_error = error;
2324+ }
2325+
2326+ Q_INVOKABLE void resetExternalSignerQueryCallsForTest ()
2327+ {
2328+ m_external_signer_query_calls = 0 ;
2329+ Q_EMIT externalSignerQueryCallsChanged ();
2330+ }
2331+
22642332 Q_INVOKABLE QVariantMap broadcastSignedPsbt (const QString& psbt_base64)
22652333 {
22662334 ++m_broadcast_signed_psbt_calls;
@@ -2300,9 +2368,11 @@ class MockNodeModel : public QObject
23002368 void faultedChanged ();
23012369 void blockTipHeightChanged ();
23022370 void broadcastSignedPsbtCallsChanged ();
2371+ void externalSignerQueryCallsChanged ();
23032372
23042373private:
23052374 int m_broadcast_signed_psbt_calls{0 };
2375+ int m_external_signer_query_calls{0 };
23062376};
23072377
23082378class MockPeerTableModel : public QObject
0 commit comments