@@ -24,8 +24,7 @@ import Pos.Crypto (EncryptedSecretKey, emptyPassphrase, firstHardened,
24
24
import Cardano.Wallet.API.Request (RequestParams (.. ))
25
25
import Cardano.Wallet.API.Request.Pagination (Page (.. ),
26
26
PaginationParams (.. ), PerPage (.. ))
27
- import Cardano.Wallet.API.Response (SliceOf (.. ),
28
- WalletResponse (wrData ))
27
+ import Cardano.Wallet.API.Response (SliceOf (.. ), WalletResponse (.. ))
29
28
import Cardano.Wallet.API.V1.Handlers.Addresses as Handlers
30
29
import qualified Cardano.Wallet.API.V1.Types as V1
31
30
import qualified Cardano.Wallet.Kernel.Addresses as Kernel
@@ -126,11 +125,14 @@ prepareAddressFixture n = do
126
125
let SliceOf {.. } = Addresses. getAddresses (RequestParams pp) db'
127
126
return . map AddressFixture $ paginatedSlice
128
127
128
+ newtype DesiredNewAccounts = DesiredNewAccs Int
129
+ newtype DesiredNewAddresses = DesiredNewAddrs Int
130
+
129
131
prepareAddressesFixture
130
- :: Int -- ^ Number of Accounts to create.
131
- -> Int -- ^ Number of ' Address per account to create.
132
- -> Fixture. GenPassiveWalletFixture (M. Map V1. AccountIndex [V1. WalletAddress ])
133
- prepareAddressesFixture acn adn = do
132
+ :: DesiredNewAccounts -- ^ Number of Accounts to create.
133
+ -> DesiredNewAddresses -- ^ Number of Address per account to create.
134
+ -> Fixture. GenPassiveWalletFixture (M. Map V1. AccountIndex [V1. WalletAddress ], Int )
135
+ prepareAddressesFixture ( DesiredNewAccs acn) ( DesiredNewAddrs adn) = do
134
136
spendingPassword <- Fixture. genSpendingPassword
135
137
newWalletRq <- WalletLayer. CreateWallet <$> Wallets. genNewWalletRq spendingPassword
136
138
return $ \ pw -> do
@@ -152,11 +154,9 @@ prepareAddressesFixture acn adn = do
152
154
Left e -> error (show e)
153
155
Right addr -> return (accId, addr)
154
156
res <- mapM insertAddresses accounts
155
- return $ M. fromList res
156
-
157
- expectedNumber :: Int -> Int -> Int
158
- expectedNumber acc adr = (acc + 1 )* (adr + 1 ) - acc
159
-
157
+ -- This takes into account that each wallet creates by default one account, which has
158
+ -- one address.
159
+ return $ (M. fromList res, (acn + 1 )* (adn + 1 ) - acn)
160
160
161
161
withFixture :: ( Keystore. Keystore
162
162
-> PassiveWalletLayer IO
@@ -180,11 +180,13 @@ withAddressFixtures n =
180
180
Fixture. withPassiveWalletFixture $ do
181
181
prepareAddressFixture n
182
182
183
- withAddressesFixtures :: Int -> Int ->
184
- ( Keystore. Keystore
183
+ withAddressesFixtures
184
+ :: DesiredNewAccounts
185
+ -> DesiredNewAddresses
186
+ -> ( Keystore. Keystore
185
187
-> PassiveWalletLayer IO
186
188
-> PassiveWallet
187
- -> M. Map V1. AccountIndex [V1. WalletAddress ]
189
+ -> ( M. Map V1. AccountIndex [V1. WalletAddress ], Int )
188
190
-> IO a
189
191
)
190
192
-> PropertyM IO a
@@ -396,9 +398,10 @@ spec = describe "Addresses" $ do
396
398
pure (toBeCheckedAddresses === correctAddresses)
397
399
398
400
describe " Address listing with multiple Accounts (Servant)" $ do
401
+ let rootId = addrRoot . V1. unV1 . V1. addrId
399
402
prop " page 0, per page 0" $ withMaxSuccess 20 $ do
400
403
monadicIO $
401
- withAddressesFixtures 4 4 $ \ _ layer _ _ -> do
404
+ withAddressesFixtures ( DesiredNewAccs 4 ) ( DesiredNewAddrs 4 ) $ \ _ layer _ _ -> do
402
405
let pp = PaginationParams (Page 0 ) (PerPage 0 )
403
406
res <- runExceptT $ runHandler' $ do
404
407
Handlers. listAddresses layer (RequestParams pp)
@@ -408,55 +411,34 @@ spec = describe "Addresses" $ do
408
411
409
412
prop " it yields the correct number of results" $ withMaxSuccess 20 $ do
410
413
monadicIO $
411
- withAddressesFixtures 3 4 $ \ _ layer _ _ -> do
414
+ withAddressesFixtures ( DesiredNewAccs 3 ) ( DesiredNewAddrs 4 ) $ \ _ layer _ (_, total) -> do
412
415
let pp = PaginationParams (Page 1 ) (PerPage 40 )
413
416
res <- runExceptT $ runHandler' $ do
414
417
Handlers. listAddresses layer (RequestParams pp)
415
418
case res of
416
419
Right wr -> do
417
- -- this takes into account that there is an initial account
418
- -- and each account has an initial address (but not the initial
419
- -- account thus the -1)
420
- length (wrData wr) `shouldBe` expectedNumber 3 4
420
+ length (wrData wr) `shouldBe` min 40 total
421
421
_ -> fail (" Got " ++ show res)
422
422
423
423
prop " is deterministic" $ withMaxSuccess 20 $ do
424
424
monadicIO $
425
- withAddressesFixtures 3 8 $ \ _ layer _ _ -> do
426
- let (expectedTotal :: Int ) = expectedNumber 3 8
427
- let pp = PaginationParams (Page 1 ) (PerPage 40 )
428
- let pp1 = PaginationParams (Page 1 ) (PerPage (quot expectedTotal 3 + 1 ))
429
- let pp2 = PaginationParams (Page 2 ) (PerPage (quot expectedTotal 3 + 1 ))
430
- let pp3 = PaginationParams (Page 3 ) (PerPage (quot expectedTotal 3 + 1 ))
431
- res <- runExceptT $ runHandler' $ do
432
- Handlers. listAddresses layer (RequestParams pp)
433
- res' <- runExceptT $ runHandler' $ do
434
- Handlers. listAddresses layer (RequestParams pp)
435
- res1 <- runExceptT $ runHandler' $ do
436
- Handlers. listAddresses layer (RequestParams pp1)
437
- res1' <- runExceptT $ runHandler' $ do
438
- Handlers. listAddresses layer (RequestParams pp1)
439
- res2 <- runExceptT $ runHandler' $ do
440
- Handlers. listAddresses layer (RequestParams pp2)
441
- res2' <- runExceptT $ runHandler' $ do
442
- Handlers. listAddresses layer (RequestParams pp2)
443
- res3 <- runExceptT $ runHandler' $ do
444
- Handlers. listAddresses layer (RequestParams pp3)
445
- res3' <- runExceptT $ runHandler' $ do
446
- Handlers. listAddresses layer (RequestParams pp3)
447
- res `shouldBe` res'
448
- res1 `shouldBe` res1'
449
- res2 `shouldBe` res2'
450
- res3 `shouldBe` res3'
425
+ withAddressesFixtures (DesiredNewAccs 3 ) (DesiredNewAddrs 8 ) $ \ _ layer _ (_, expectedTotal) -> do
426
+ let ppSplit = quot expectedTotal 3 + 1
427
+ mkRequest mypp = Handlers. listAddresses layer (RequestParams mypp)
428
+ forM_ [(1 ,40 ), (1 , ppSplit), (2 , ppSplit), (3 , ppSplit)] $ \ (page, perPage) -> do
429
+ let pp = PaginationParams (Page page) (PerPage perPage)
430
+ Right (r1, r2) <- runExceptT $ runHandler' $ do
431
+ (,) <$> mkRequest pp <*> mkRequest pp
432
+ r1 `shouldBe` r2
451
433
452
434
prop " yields the correct set of resutls" $ withMaxSuccess 20 $ do
453
435
monadicIO $
454
- withAddressesFixtures 4 8 $ \ _ layer _ _ -> do
455
- let (expectedTotal :: Int ) = expectedNumber 4 8
456
- let pp = PaginationParams (Page 1 ) (PerPage 50 )
457
- let pp1 = PaginationParams (Page 1 ) (PerPage ( quot expectedTotal 3 + 1 ) )
458
- let pp2 = PaginationParams (Page 2 ) (PerPage ( quot expectedTotal 3 + 1 ) )
459
- let pp3 = PaginationParams (Page 3 ) (PerPage ( quot expectedTotal 3 + 1 ) )
436
+ withAddressesFixtures ( DesiredNewAccs 4 ) ( DesiredNewAddrs 8 ) $ \ _ layer _ (_, expectedTotal) -> do
437
+ let ppSplit = quot expectedTotal 3 + 1
438
+ pp = PaginationParams (Page 1 ) (PerPage 50 )
439
+ pp1 = PaginationParams (Page 1 ) (PerPage ppSplit )
440
+ pp2 = PaginationParams (Page 2 ) (PerPage ppSplit )
441
+ pp3 = PaginationParams (Page 3 ) (PerPage ppSplit )
460
442
res <- runExceptT $ runHandler' $ do
461
443
Handlers. listAddresses layer (RequestParams pp)
462
444
res1 <- runExceptT $ runHandler' $ do
@@ -467,22 +449,21 @@ spec = describe "Addresses" $ do
467
449
Handlers. listAddresses layer (RequestParams pp3)
468
450
case (res, res1, res2, res3) of
469
451
(Right wr, Right wr1, Right wr2, Right wr3) -> do
470
- length (wrData wr) `shouldBe` expectedTotal
471
452
let con = wrData wr1 <> wrData wr2 <> wrData wr3
453
+ length (wrData wr) `shouldBe` expectedTotal
472
454
length con `shouldBe` expectedTotal
473
455
S. fromList con `shouldBe` S. fromList (wrData wr)
474
- (addrRoot . V1. unV1 . V1. addrId <$> con)
475
- `shouldBe` (addrRoot . V1. unV1 . V1. addrId <$> wrData wr)
456
+ (rootId <$> con) `shouldBe` (rootId <$> wrData wr)
476
457
_ -> fail (" Got " ++ show res)
477
458
478
459
prop " yields the correct ordered resutls when there is one account" $ withMaxSuccess 20 $ do
479
460
monadicIO $
480
- withAddressesFixtures 0 15 $ \ _ layer _ _ -> do
481
- let (expectedTotal :: Int ) = expectedNumber 0 15
482
- let pp = PaginationParams (Page 1 ) (PerPage 50 )
483
- let pp1 = PaginationParams (Page 1 ) (PerPage ( quot expectedTotal 3 + 1 ) )
484
- let pp2 = PaginationParams (Page 2 ) (PerPage ( quot expectedTotal 3 + 1 ) )
485
- let pp3 = PaginationParams (Page 3 ) (PerPage ( quot expectedTotal 3 + 1 ) )
461
+ withAddressesFixtures ( DesiredNewAccs 0 ) ( DesiredNewAddrs 15 ) $ \ _ layer _ (_, expectedTotal) -> do
462
+ let ppSplit = quot expectedTotal 3 + 1
463
+ pp = PaginationParams (Page 1 ) (PerPage 50 )
464
+ pp1 = PaginationParams (Page 1 ) (PerPage ppSplit )
465
+ pp2 = PaginationParams (Page 2 ) (PerPage ppSplit )
466
+ pp3 = PaginationParams (Page 3 ) (PerPage ppSplit )
486
467
res <- runExceptT $ runHandler' $ do
487
468
Handlers. listAddresses layer (RequestParams pp)
488
469
res1 <- runExceptT $ runHandler' $ do
@@ -493,25 +474,25 @@ spec = describe "Addresses" $ do
493
474
Handlers. listAddresses layer (RequestParams pp3)
494
475
case (res, res1, res2, res3) of
495
476
(Right wr, Right wr1, Right wr2, Right wr3) -> do
496
- length (wrData wr) `shouldBe` expectedTotal
497
477
let con = wrData wr1 <> wrData wr2 <> wrData wr3
478
+ length (wrData wr) `shouldBe` expectedTotal
498
479
length con `shouldBe` expectedTotal
499
480
S. fromList con `shouldBe` S. fromList (wrData wr)
500
- (addrRoot . V1. unV1 . V1. addrId <$> con)
501
- `shouldBe` (addrRoot . V1. unV1 . V1. addrId <$> wrData wr)
481
+ (rootId <$> con) `shouldBe` (rootId <$> wrData wr)
502
482
_ -> fail (" Got " ++ show res)
503
483
504
484
505
485
prop " yields the correct ordered resutls" $ withMaxSuccess 20 $ do
506
486
monadicIO $ do
507
- forM_ [(4 ,8 ), (6 ,6 ), (5 ,7 )] $ \ (acc,adr) ->
508
- withAddressesFixtures acc adr $ \ _ layer _ _ -> do
487
+ forM_ [(DesiredNewAccs 4 ,DesiredNewAddrs 8 ),
488
+ (DesiredNewAccs 6 ,DesiredNewAddrs 6 ),
489
+ (DesiredNewAccs 5 ,DesiredNewAddrs 7 )] $ \ (acc,adr) ->
490
+ withAddressesFixtures acc adr $ \ _ layer _ (_, expectedTotal) -> do
509
491
forM_ [2 .. 10 ] $ \ k -> do
510
492
let indexes = [1 .. k]
511
- let (expectedTotal :: Int ) = expectedNumber acc adr
512
- let pagesParams = map (\ i -> PaginationParams (Page i) (PerPage (quot expectedTotal k + 1 )))
493
+ pagesParams = map (\ i -> PaginationParams (Page i) (PerPage (quot expectedTotal k + 1 )))
513
494
indexes
514
- let pp = PaginationParams (Page 1 ) (PerPage 50 )
495
+ pp = PaginationParams (Page 1 ) (PerPage 50 )
515
496
res <- runExceptT $ runHandler' $ do
516
497
Handlers. listAddresses layer (RequestParams pp)
517
498
eiResultsArray <- forM pagesParams $ \ ppi -> runExceptT $ runHandler' $ do
@@ -523,8 +504,7 @@ spec = describe "Addresses" $ do
523
504
length (wrData wr) `shouldBe` expectedTotal
524
505
length con `shouldBe` expectedTotal
525
506
S. fromList con `shouldBe` S. fromList (wrData wr)
526
- (addrRoot . V1. unV1 . V1. addrId <$> con)
527
- `shouldBe` (addrRoot . V1. unV1 . V1. addrId <$> wrData wr)
507
+ (rootId <$> con)`shouldBe` (rootId <$> wrData wr)
528
508
_ -> fail (" Got " ++ show res)
529
509
530
510
describe " ValidateAddress" $ do
0 commit comments