@@ -183,9 +183,8 @@ TEST_F(AccountInfoParameterTest, ApiV1SignerListIsNotBool)
183183
184184TEST_F (RPCAccountInfoHandlerTest, LedgerNonExistViaIntSequence)
185185{
186- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
187186 // return empty ledgerHeader
188- ON_CALL (*backend_, fetchLedgerBySequence (30 , _)).WillByDefault (Return (std::optional<ripple::LedgerHeader>{}));
187+ EXPECT_CALL (*backend_, fetchLedgerBySequence (30 , _)).WillOnce (Return (std::optional<ripple::LedgerHeader>{}));
189188
190189 static auto const kINPUT = json::parse (
191190 fmt::format (
@@ -208,9 +207,8 @@ TEST_F(RPCAccountInfoHandlerTest, LedgerNonExistViaIntSequence)
208207
209208TEST_F (RPCAccountInfoHandlerTest, LedgerNonExistViaStringSequence)
210209{
211- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
212210 // return empty ledgerHeader
213- ON_CALL (*backend_, fetchLedgerBySequence (30 , _)).WillByDefault (Return (std::nullopt ));
211+ EXPECT_CALL (*backend_, fetchLedgerBySequence (30 , _)).WillOnce (Return (std::nullopt ));
214212
215213 static auto const kINPUT = json::parse (
216214 fmt::format (
@@ -233,10 +231,9 @@ TEST_F(RPCAccountInfoHandlerTest, LedgerNonExistViaStringSequence)
233231
234232TEST_F (RPCAccountInfoHandlerTest, LedgerNonExistViaHash)
235233{
236- EXPECT_CALL (*backend_, fetchLedgerByHash).Times (1 );
237234 // return empty ledgerHeader
238- ON_CALL (*backend_, fetchLedgerByHash (ripple::uint256{kLEDGER_HASH }, _))
239- .WillByDefault (Return (std::optional<ripple::LedgerHeader>{}));
235+ EXPECT_CALL (*backend_, fetchLedgerByHash (ripple::uint256{kLEDGER_HASH }, _))
236+ .WillOnce (Return (std::optional<ripple::LedgerHeader>{}));
240237
241238 static auto const kINPUT = json::parse (
242239 fmt::format (
@@ -261,11 +258,10 @@ TEST_F(RPCAccountInfoHandlerTest, LedgerNonExistViaHash)
261258TEST_F (RPCAccountInfoHandlerTest, AccountNotExist)
262259{
263260 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
264- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times ( 1 );
261+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce ( Return (ledgerHeader) );
265262
266- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
267263 ON_CALL (*backend_, doFetchLedgerObject).WillByDefault (Return (std::optional<Blob>{}));
268- EXPECT_CALL (*backend_, doFetchLedgerObject). Times ( 1 ) ;
264+ EXPECT_CALL (*backend_, doFetchLedgerObject);
269265
270266 static auto const kINPUT = json::parse (
271267 fmt::format (
@@ -288,12 +284,11 @@ TEST_F(RPCAccountInfoHandlerTest, AccountNotExist)
288284TEST_F (RPCAccountInfoHandlerTest, AccountInvalid)
289285{
290286 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
291- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times ( 1 );
287+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce ( Return (ledgerHeader) );
292288
293- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
294289 // return a valid ledger object but not account root
295290 ON_CALL (*backend_, doFetchLedgerObject).WillByDefault (Return (createLegacyFeeSettingBlob (1 , 2 , 3 , 4 , 0 )));
296- EXPECT_CALL (*backend_, doFetchLedgerObject). Times ( 1 ) ;
291+ EXPECT_CALL (*backend_, doFetchLedgerObject);
297292
298293 static auto const kINPUT = json::parse (
299294 fmt::format (
@@ -316,9 +311,8 @@ TEST_F(RPCAccountInfoHandlerTest, AccountInvalid)
316311TEST_F (RPCAccountInfoHandlerTest, SignerListsInvalid)
317312{
318313 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
319- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times ( 1 );
314+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce ( Return (ledgerHeader) );
320315
321- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
322316 auto const account = getAccountIdWithString (kACCOUNT );
323317 auto const accountKk = ripple::keylet::account (account).key ;
324318 auto const accountRoot = createAccountRootObject (kACCOUNT , 0 , 2 , 200 , 2 , kINDEX1 , 2 );
@@ -416,8 +410,7 @@ TEST_F(RPCAccountInfoHandlerTest, SignerListsTrueV2)
416410 );
417411
418412 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
419- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
420- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
413+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
421414
422415 auto const account = getAccountIdWithString (kACCOUNT );
423416 auto const accountKk = ripple::keylet::account (account).key ;
@@ -514,8 +507,7 @@ TEST_F(RPCAccountInfoHandlerTest, SignerListsTrueV1)
514507 );
515508
516509 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
517- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
518- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
510+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
519511
520512 auto const account = getAccountIdWithString (kACCOUNT );
521513 auto const accountKk = ripple::keylet::account (account).key ;
@@ -584,8 +576,7 @@ TEST_F(RPCAccountInfoHandlerTest, Flags)
584576 );
585577
586578 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
587- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
588- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
579+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
589580
590581 auto const account = getAccountIdWithString (kACCOUNT );
591582 auto const accountKk = ripple::keylet::account (account).key ;
@@ -626,8 +617,7 @@ TEST_F(RPCAccountInfoHandlerTest, Flags)
626617TEST_F (RPCAccountInfoHandlerTest, IdentAndSignerListsFalse)
627618{
628619 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
629- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
630- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
620+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
631621
632622 auto const account = getAccountIdWithString (kACCOUNT );
633623 auto const accountKk = ripple::keylet::account (account).key ;
@@ -655,6 +645,51 @@ TEST_F(RPCAccountInfoHandlerTest, IdentAndSignerListsFalse)
655645 });
656646}
657647
648+ TEST_F (RPCAccountInfoHandlerTest, EmptySignerLists)
649+ {
650+ auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
651+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
652+
653+ auto const account = getAccountIdWithString (kACCOUNT );
654+ auto const accountKk = ripple::keylet::account (account).key ;
655+ auto const accountRoot = createAccountRootObject (kACCOUNT , 0 , 2 , 200 , 2 , kINDEX1 , 2 );
656+ ON_CALL (*backend_, doFetchLedgerObject (accountKk, 30 , _))
657+ .WillByDefault (Return (accountRoot.getSerializer ().peekData ()));
658+ EXPECT_CALL (*mockAmendmentCenterPtr_, isEnabled (_, Amendments::DisallowIncoming, _)).WillOnce (Return (false ));
659+ EXPECT_CALL (*mockAmendmentCenterPtr_, isEnabled (_, Amendments::Clawback, _)).WillOnce (Return (false ));
660+ EXPECT_CALL (*mockAmendmentCenterPtr_, isEnabled (_, Amendments::TokenEscrow, _)).WillOnce (Return (false ));
661+
662+ auto signersKey = ripple::keylet::signers (account).key ;
663+ ON_CALL (*backend_, doFetchLedgerObject (signersKey, 30 , _)).WillByDefault (Return (std::optional<Blob>{}));
664+
665+ // Once for signer object, once for keylet
666+ EXPECT_CALL (*backend_, doFetchLedgerObject).Times (2 );
667+
668+ static auto const kINPUT = json::parse (
669+ fmt::format (
670+ R"JSON( {{
671+ "account": "{}",
672+ "signer_lists": true
673+ }})JSON" ,
674+ kACCOUNT
675+ )
676+ );
677+
678+ auto const handler = AnyHandler{AccountInfoHandler{backend_, mockAmendmentCenterPtr_}};
679+
680+ runSpawn ([&](auto yield) {
681+ auto const output = handler.process (kINPUT , Context{.yield = yield, .apiVersion = 2 });
682+ ASSERT_TRUE (output);
683+
684+ auto const & resultObj = output.result ->as_object ();
685+ ASSERT_TRUE (resultObj.contains (" signer_lists" ));
686+
687+ auto const & signerListsJson = resultObj.at (" signer_lists" );
688+ EXPECT_TRUE (signerListsJson.is_array ());
689+ EXPECT_TRUE (signerListsJson.as_array ().empty ());
690+ });
691+ }
692+
658693TEST_F (RPCAccountInfoHandlerTest, DisallowIncoming)
659694{
660695 auto const expectedOutput = fmt::format (
@@ -696,8 +731,7 @@ TEST_F(RPCAccountInfoHandlerTest, DisallowIncoming)
696731 );
697732
698733 auto const ledgerHeader = createLedgerHeader (kLEDGER_HASH , 30 );
699- EXPECT_CALL (*backend_, fetchLedgerBySequence).Times (1 );
700- ON_CALL (*backend_, fetchLedgerBySequence).WillByDefault (Return (ledgerHeader));
734+ EXPECT_CALL (*backend_, fetchLedgerBySequence).WillOnce (Return (ledgerHeader));
701735
702736 auto const account = getAccountIdWithString (kACCOUNT );
703737 auto const accountKk = ripple::keylet::account (account).key ;
0 commit comments