19 using namespace test::jtx;
20 Env env{*
this, envconfig(no_admin)};
24 auto const result = env.client().invoke(
"tx_history", {})[jss::result];
25 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
26 BEAST_EXPECT(result[jss::status] ==
"error");
32 params[jss::start] = 10001;
33 auto const result = env.client().invoke(
"tx_history", params)[jss::result];
34 BEAST_EXPECT(result[jss::error] ==
"noPermission");
35 BEAST_EXPECT(result[jss::status] ==
"error");
57 using namespace test::jtx;
62 size_t const numAccounts = 20;
63 boost::container::static_vector<Account, numAccounts> accounts;
64 for (
size_t i = 0; i < numAccounts; ++i)
67 auto const& acct = accounts.back();
68 env.fund(XRP(10000), acct);
72 auto const& prev = accounts[i - 1];
73 env.trust(acct[
"USD"](1000), prev);
74 env(pay(acct, prev, acct[
"USD"](5)));
76 env(offer(acct, XRP(100), acct[
"USD"](1)));
82 params[jss::start] = 0;
83 auto result = env.client().invoke(
"tx_history", params)[jss::result];
84 if (!BEAST_EXPECT(result[jss::txs].isArray() && result[jss::txs].size() > 0))
88 bool const txFound = [&] {
90 for (
auto tx : result[jss::txs])
99 BEAST_EXPECT(txFound);
102 unsigned int start = 0;
103 unsigned int total = 0;
109 params[jss::start] = start;
110 auto result = env.client().invoke(
"tx_history", params)[jss::result];
111 if (!BEAST_EXPECT(result[jss::txs].isArray() && result[jss::txs].size() > 0))
113 total += result[jss::txs].
size();
115 for (
auto const& t : result[jss::txs])
117 typeCounts[t[sfTransactionType.fieldName].asString()]++;
120 BEAST_EXPECT(total == 117);
121 BEAST_EXPECT(typeCounts[jss::AccountSet.c_str()] == 20);
122 BEAST_EXPECT(typeCounts[jss::TrustSet.c_str()] == 19);
123 BEAST_EXPECT(typeCounts[jss::Payment.c_str()] == 58);
124 BEAST_EXPECT(typeCounts[jss::OfferCreate.c_str()] == 20);
129 params[jss::start] = 10000;
130 auto const result = env.client().invoke(
"tx_history", params)[jss::result];
131 BEAST_EXPECT(result[jss::status] ==
"success");
132 BEAST_EXPECT(result[jss::index] == 10000);