11/* eslint-disable unicorn/consistent-destructuring, sonarjs/no-duplicate-string, @typescript-eslint/no-floating-promises, promise/no-nesting, promise/always-return */
22import * as Crypto from '@cardano-sdk/crypto' ;
3+ import { AddressDiscovery , PersonalWallet , TxInFlight } from '../../src' ;
34import { AddressType , Bip32Account , GroupedAddress , Witnesser , util } from '@cardano-sdk/key-management' ;
45import { AssetId , createStubStakePoolProvider , mockProviders as mocks } from '@cardano-sdk/util-dev' ;
56import { BehaviorSubject , Subscription , firstValueFrom , skip } from 'rxjs' ;
@@ -18,7 +19,6 @@ import {
1819} from '@cardano-sdk/core' ;
1920import { HexBlob } from '@cardano-sdk/util' ;
2021import { InitializeTxProps } from '@cardano-sdk/tx-construction' ;
21- import { PersonalWallet , TxInFlight } from '../../src' ;
2222import { buildDRepIDFromDRepKey , toOutgoingTx , waitForWalletStateSettle } from '../util' ;
2323import { getPassphrase , stakeKeyDerivationPath , testAsyncKeyAgent } from '../../../key-management/test/mocks' ;
2424import { dummyLogger as logger } from 'ts-log' ;
@@ -60,6 +60,15 @@ const promiseTimeout = (p: Promise<unknown>, timeout = 10): Promise<unknown> =>
6060
6161describe ( 'PersonalWallet methods' , ( ) => {
6262 const address = mocks . utxo [ 0 ] [ 0 ] . address ! ;
63+ const groupedAddress : GroupedAddress = {
64+ accountIndex : 0 ,
65+ address,
66+ index : 0 ,
67+ networkId : Cardano . NetworkId . Testnet ,
68+ rewardAccount : mocks . rewardAccount ,
69+ stakeKeyDerivationPath,
70+ type : AddressType . External
71+ } ;
6372 let txSubmitProvider : mocks . TxSubmitProviderStub ;
6473 let networkInfoProvider : mocks . NetworkInfoProviderStub ;
6574 let assetProvider : mocks . MockAssetProvider ;
@@ -71,33 +80,27 @@ describe('PersonalWallet methods', () => {
7180 let utxoProvider : mocks . UtxoProviderStub ;
7281 let witnesser : Witnesser ;
7382 let bip32Account : Bip32Account ;
83+ let addressDiscovery : jest . Mocked < AddressDiscovery > ;
7484
7585 beforeEach ( async ( ) => {
7686 txSubmitProvider = mocks . mockTxSubmitProvider ( ) ;
7787 networkInfoProvider = mocks . mockNetworkInfoProvider ( ) ;
7888 utxoProvider = mocks . mockUtxoProvider ( ) ;
79-
8089 assetProvider = mocks . mockAssetProvider ( ) ;
8190 stakePoolProvider = createStubStakePoolProvider ( ) ;
8291 rewardsProvider = mockRewardsProvider ( ) ;
8392 chainHistoryProvider = mockChainHistoryProvider ( ) ;
8493 handleProvider = mocks . mockHandleProvider ( ) ;
85- const groupedAddress : GroupedAddress = {
86- accountIndex : 0 ,
87- address,
88- index : 0 ,
89- networkId : Cardano . NetworkId . Testnet ,
90- rewardAccount : mocks . rewardAccount ,
91- stakeKeyDerivationPath,
92- type : AddressType . External
93- } ;
94+ addressDiscovery = { discover : jest . fn ( ) . mockImplementation ( async ( ) => [ groupedAddress ] ) } ;
95+
9496 const asyncKeyAgent = await testAsyncKeyAgent ( ) ;
9597 bip32Account = await Bip32Account . fromAsyncKeyAgent ( asyncKeyAgent ) ;
9698 bip32Account . deriveAddress = jest . fn ( ) . mockResolvedValue ( groupedAddress ) ;
9799 witnesser = util . createBip32Ed25519Witnesser ( asyncKeyAgent ) ;
98100 wallet = new PersonalWallet (
99101 { name : 'Test Wallet' } ,
100102 {
103+ addressDiscovery,
101104 assetProvider,
102105 bip32Account,
103106 chainHistoryProvider,
@@ -465,4 +468,22 @@ describe('PersonalWallet methods', () => {
465468 expect ( response ) . toBe ( 'string' ) ;
466469 expect ( bip32Account . derivePublicKey ) . toHaveBeenCalledTimes ( 3 ) ;
467470 } ) ;
471+
472+ describe ( 'discoverAddresses' , ( ) => {
473+ it ( 'discovers new addreses and emits them from addresses$' , async ( ) => {
474+ const newAddresses : GroupedAddress [ ] = [
475+ groupedAddress ,
476+ {
477+ ...groupedAddress ,
478+ address : Cardano . PaymentAddress (
479+ 'addr_test1qzs0umu0s2ammmpw0hea0w2crtcymdjvvlqngpgqy76gpfnuzcjqw982pcftgx53fu5527z2cj2tkx2h8ux2vxsg475qp3y3vz'
480+ ) ,
481+ index : groupedAddress . index + 1
482+ }
483+ ] ;
484+ addressDiscovery . discover . mockResolvedValueOnce ( newAddresses ) ;
485+ await expect ( wallet . discoverAddresses ( ) ) . resolves . toEqual ( newAddresses ) ;
486+ await expect ( firstValueFrom ( wallet . addresses$ ) ) . resolves . toEqual ( newAddresses ) ;
487+ } ) ;
488+ } ) ;
468489} ) ;
0 commit comments