add AccountTx tests for Sponsorship

This commit is contained in:
tequ
2025-09-20 12:20:29 +09:00
parent 613fe48d54
commit f7e1d4bbb9

View File

@@ -835,6 +835,87 @@ class AccountTx_test : public beast::unit_test::suite
checkAliceAcctTx(9, jss::Payment);
}
void
testSponsorship()
{
// test all sponsored transactions are in sponsor and sponsee's account
// tx list
testcase("Sponsorship");
using namespace test::jtx;
Env env(*this);
Account const alice("alice");
Account const sponsor("sponsor");
Account const sponsor2("sponsor2");
env.fund(XRP(10000), alice, sponsor, sponsor2);
env.close();
// check the latest sponsorship-related txn is in account tx list
auto const checkTx = [&](Account const& account,
Json::StaticString txType) {
Json::Value params;
params[jss::account] = account.human();
params[jss::limit] = 100;
auto const jv =
env.rpc("json", "account_tx", to_string(params))[jss::result];
auto const& tx0(jv[jss::transactions][0u][jss::tx]);
BEAST_EXPECT(tx0[jss::TransactionType] == txType);
std::string const txHash{
env.tx()->getJson(JsonOptions::none)[jss::hash].asString()};
BEAST_EXPECT(tx0[jss::hash] == txHash);
};
// fee sponsorship
env(noop(alice),
sponsor::as(sponsor, tfSponsorFee),
sponsor::sig(sponsor));
env.close();
checkTx(alice, jss::AccountSet);
checkTx(sponsor, jss::AccountSet);
// set sponsor
env(sponsor::set(sponsor, alice, 0, 100, XRP(100)), ter(tesSUCCESS));
env.close();
checkTx(alice, jss::SponsorshipSet);
checkTx(sponsor, jss::SponsorshipSet);
// create a ticket with sponsor
auto const seq = env.seq(alice);
env(ticket::create(alice, 1), sponsor::as(sponsor, tfSponsorReserve));
env.close();
checkTx(alice, jss::TicketCreate);
checkTx(sponsor, jss::TicketCreate);
// transfer object sponsorship
env(sponsor::transfer(alice, keylet::ticket(alice, seq + 1).key),
sponsor::as(sponsor2, tfSponsorReserve),
sponsor::sig(sponsor2));
env.close();
checkTx(alice, jss::SponsorshipTransfer);
checkTx(sponsor, jss::SponsorshipTransfer);
checkTx(sponsor2, jss::SponsorshipTransfer);
// use a ticket
env(noop(alice),
ticket::use(seq + 1),
sponsor::as(sponsor, tfSponsorFee),
sponsor::sig(sponsor));
env.close();
checkTx(alice, jss::AccountSet);
checkTx(sponsor, jss::AccountSet);
checkTx(sponsor2, jss::AccountSet);
// account sponsorship
env(sponsor::transfer(alice),
sponsor::as(sponsor, tfSponsorReserve),
sponsor::sig(sponsor));
env.close();
checkTx(alice, jss::SponsorshipTransfer);
checkTx(sponsor, jss::SponsorshipTransfer);
}
public:
void
run() override
@@ -844,6 +925,7 @@ public:
testContents();
testAccountDelete();
testMPT();
testSponsorship();
}
};
BEAST_DEFINE_TESTSUITE(AccountTx, rpc, ripple);