20 #include <ripple/beast/unit_test.h>
21 #include <ripple/protocol/Feature.h>
22 #include <ripple/protocol/jss.h>
24 #include <test/jtx/WSClient.h>
106 if (t[jss::TransactionType].asString() != jss::Payment)
109 bool isSet = metaData.
isMember(jss::delivered_amount);
110 bool isSetUnavailable =
false;
111 bool isSetAvailable =
false;
114 if (metaData[jss::delivered_amount] !=
"unavailable")
115 isSetAvailable =
true;
117 isSetUnavailable =
true;
121 else if (isSetUnavailable)
130 if (metaData[jss::delivered_amount] !=
138 if (metaData[jss::delivered_amount] != t[jss::Amount])
143 if (metaData[jss::delivered_amount] !=
"unavailable")
170 if (!isSetUnavailable)
184 testcase(
"Ledger Request Subscribe DeliveredAmount");
186 using namespace test::jtx;
187 using namespace std::chrono_literals;
192 auto const gw =
Account(
"gateway");
193 auto const USD = gw[
"USD"];
195 for (
bool const afterSwitchTime : {
true,
false})
198 env.
fund(
XRP(10000), alice, bob, carol, gw);
199 env.trust(USD(1000), alice, bob, carol);
210 env(
pay(gw, alice, USD(50)));
211 checkDeliveredAmount.adjCountersSuccess();
212 env(
pay(gw, alice,
XRP(50)));
213 checkDeliveredAmount.adjCountersSuccess();
217 checkDeliveredAmount.adjCountersPartialPayment();
218 env.require(
balance(bob, USD(1000)));
222 checkDeliveredAmount.adjCountersFail();
223 env.require(
balance(carol, USD(0)));
232 stream[jss::streams].append(
"ledger");
234 stream[jss::accounts].append(
toBase58(alice.
id()));
235 stream[jss::accounts].append(
toBase58(bob.
id()));
236 stream[jss::accounts].append(
toBase58(carol.
id()));
237 auto jv = wsc->invoke(
"subscribe", stream);
238 if (wsc->version() == 2)
241 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
243 jv.isMember(jss::ripplerpc) &&
244 jv[jss::ripplerpc] ==
"2.0");
245 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
247 BEAST_EXPECT(jv[jss::result][jss::ledger_index] == 3);
254 auto const r = wsc->findMsg(1s, [&](
auto const& jv) {
255 return jv[jss::ledger_index] == 4;
260 if (!r->isMember(jss::transaction))
263 BEAST_EXPECT(checkDeliveredAmount.checkTxn(
264 (*r)[jss::transaction], (*r)[jss::meta]));
267 BEAST_EXPECT(checkDeliveredAmount.checkExpectedCounters());
273 testcase(
"Ledger Request RPC DeliveredAmount");
275 using namespace test::jtx;
276 using namespace std::chrono_literals;
281 auto const gw =
Account(
"gateway");
282 auto const USD = gw[
"USD"];
284 for (
bool const afterSwitchTime : {
true,
false})
287 env.
fund(
XRP(10000), alice, bob, carol, gw);
288 env.trust(USD(1000), alice, bob, carol);
296 env(
pay(gw, alice, USD(50)));
297 checkDeliveredAmount.adjCountersSuccess();
298 env(
pay(gw, alice,
XRP(50)));
299 checkDeliveredAmount.adjCountersSuccess();
303 checkDeliveredAmount.adjCountersPartialPayment();
304 env.require(
balance(bob, USD(1000)));
308 checkDeliveredAmount.adjCountersFail();
309 env.require(
balance(carol, USD(0)));
314 jvParams[jss::ledger_index] = 4u;
315 jvParams[jss::transactions] =
true;
316 jvParams[jss::expand] =
true;
317 auto const jtxn = env.rpc(
321 jvParams))[jss::result][jss::ledger][jss::transactions];
322 for (
auto const& t : jtxn)
324 checkDeliveredAmount.checkTxn(t, t[jss::metaData]));
325 BEAST_EXPECT(checkDeliveredAmount.checkExpectedCounters());