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>
105 if (t[jss::TransactionType].asString() != jss::Payment)
108 bool isSet = metaData.
isMember(jss::delivered_amount);
109 bool isSetUnavailable =
false;
110 bool isSetAvailable =
false;
113 if (metaData[jss::delivered_amount] !=
"unavailable")
114 isSetAvailable =
true;
116 isSetUnavailable =
true;
120 else if (isSetUnavailable)
129 if (metaData[jss::delivered_amount] !=
137 if (metaData[jss::delivered_amount] != t[jss::Amount])
142 if (metaData[jss::delivered_amount] !=
"unavailable")
169 if (!isSetUnavailable)
183 testcase(
"Ledger Request Subscribe DeliveredAmount");
185 using namespace test::jtx;
186 using namespace std::chrono_literals;
191 auto const gw =
Account(
"gateway");
192 auto const USD = gw[
"USD"];
194 for (
bool const afterSwitchTime : {
true,
false})
197 env.
fund(
XRP(10000), alice, bob, carol, gw);
198 env.trust(USD(1000), alice, bob, carol);
209 env(
pay(gw, alice, USD(50)));
210 checkDeliveredAmount.adjCountersSuccess();
211 env(
pay(gw, alice,
XRP(50)));
212 checkDeliveredAmount.adjCountersSuccess();
216 checkDeliveredAmount.adjCountersPartialPayment();
217 env.require(
balance(bob, USD(1000)));
221 checkDeliveredAmount.adjCountersFail();
222 env.require(
balance(carol, USD(0)));
231 stream[jss::streams].append(
"ledger");
233 stream[jss::accounts].append(
toBase58(alice.
id()));
234 stream[jss::accounts].append(
toBase58(bob.
id()));
235 stream[jss::accounts].append(
toBase58(carol.
id()));
236 auto jv = wsc->invoke(
"subscribe", stream);
237 if (wsc->version() == 2)
240 jv.isMember(jss::jsonrpc) && jv[jss::jsonrpc] ==
"2.0");
242 jv.isMember(jss::ripplerpc) &&
243 jv[jss::ripplerpc] ==
"2.0");
244 BEAST_EXPECT(jv.isMember(jss::id) && jv[jss::id] == 5);
246 BEAST_EXPECT(jv[jss::result][jss::ledger_index] == 3);
253 auto const r = wsc->findMsg(1s, [&](
auto const& jv) {
254 return jv[jss::ledger_index] == 4;
259 if (!r->isMember(jss::transaction))
262 BEAST_EXPECT(checkDeliveredAmount.checkTxn(
263 (*r)[jss::transaction], (*r)[jss::meta]));
266 BEAST_EXPECT(checkDeliveredAmount.checkExpectedCounters());
272 testcase(
"Ledger Request RPC DeliveredAmount");
274 using namespace test::jtx;
275 using namespace std::chrono_literals;
280 auto const gw =
Account(
"gateway");
281 auto const USD = gw[
"USD"];
283 for (
bool const afterSwitchTime : {
true,
false})
286 env.
fund(
XRP(10000), alice, bob, carol, gw);
287 env.trust(USD(1000), alice, bob, carol);
295 env(
pay(gw, alice, USD(50)));
296 checkDeliveredAmount.adjCountersSuccess();
297 env(
pay(gw, alice,
XRP(50)));
298 checkDeliveredAmount.adjCountersSuccess();
302 checkDeliveredAmount.adjCountersPartialPayment();
303 env.require(
balance(bob, USD(1000)));
307 checkDeliveredAmount.adjCountersFail();
308 env.require(
balance(carol, USD(0)));
313 jvParams[jss::ledger_index] = 4u;
314 jvParams[jss::transactions] =
true;
315 jvParams[jss::expand] =
true;
316 auto const jtxn = env.rpc(
320 jvParams))[jss::result][jss::ledger][jss::transactions];
321 for (
auto const& t : jtxn)
323 checkDeliveredAmount.checkTxn(t, t[jss::metaData]));
324 BEAST_EXPECT(checkDeliveredAmount.checkExpectedCounters());