28 Env env{*
this, envconfig(noAdmin)};
32 auto const result = env.client().invoke(
"tx_history", {})[jss::result];
33 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
34 BEAST_EXPECT(result[jss::status] ==
"error");
40 params[jss::start] = 10001;
41 auto const result = env.client().invoke(
"tx_history", params)[jss::result];
42 BEAST_EXPECT(result[jss::error] ==
"noPermission");
43 BEAST_EXPECT(result[jss::status] ==
"error");
70 size_t const numAccounts = 20;
71 boost::container::static_vector<Account, numAccounts> accounts;
72 for (
size_t i = 0; i < numAccounts; ++i)
75 auto const& acct = accounts.back();
76 env.fund(XRP(10000), acct);
80 auto const& prev = accounts[i - 1];
81 env.trust(acct[
"USD"](1000), prev);
82 env(pay(acct, prev, acct[
"USD"](5)));
84 env(offer(acct, XRP(100), acct[
"USD"](1)));
90 params[jss::start] = 0;
91 auto result = env.client().invoke(
"tx_history", params)[jss::result];
92 if (!BEAST_EXPECT(result[jss::txs].isArray() && result[jss::txs].size() > 0))
96 bool const txFound = [&] {
98 for (
auto tx : result[jss::txs])
100 tx.removeMember(jss::inLedger);
101 tx.removeMember(jss::ledger_index);
107 BEAST_EXPECT(txFound);
110 unsigned int start = 0;
111 unsigned int total = 0;
117 params[jss::start] = start;
118 auto result = env.client().invoke(
"tx_history", params)[jss::result];
119 if (!BEAST_EXPECT(result[jss::txs].isArray() && result[jss::txs].size() > 0))
121 total += result[jss::txs].
size();
123 for (
auto const& t : result[jss::txs])
125 typeCounts[t[sfTransactionType.fieldName].asString()]++;
128 BEAST_EXPECT(total == 117);
129 BEAST_EXPECT(typeCounts[jss::AccountSet.cStr()] == 20);
130 BEAST_EXPECT(typeCounts[jss::TrustSet.cStr()] == 19);
131 BEAST_EXPECT(typeCounts[jss::Payment.cStr()] == 58);
132 BEAST_EXPECT(typeCounts[jss::OfferCreate.cStr()] == 20);
137 params[jss::start] = 10000;
138 auto const result = env.client().invoke(
"tx_history", params)[jss::result];
139 BEAST_EXPECT(result[jss::status] ==
"success");
140 BEAST_EXPECT(result[jss::index] == 10000);