20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/jss.h>
34 testcase(
"Set and clear noripple");
39 auto const gw =
Account(
"gateway");
40 auto const alice =
Account(
"alice");
42 env.
fund(
XRP(10000), gw, alice);
44 auto const USD = gw[
"USD"];
47 account_gw[jss::account] = gw.human();
49 account_alice[jss::account] = alice.human();
51 for (
auto SetOrClear : {
true,
false})
63 env.
rpc(
"json",
"account_lines",
to_string(account_gw))};
64 auto const& gline0 =
lines[jss::result][jss::lines][0u];
65 BEAST_EXPECT(gline0[jss::no_ripple].asBool() == SetOrClear);
69 auto const& aline0 =
lines[jss::result][jss::lines][0u];
70 BEAST_EXPECT(aline0[jss::no_ripple_peer].asBool() == SetOrClear);
77 testcase(
"Set noripple on a line with negative balance");
80 auto const gw =
Account(
"gateway");
81 auto const alice =
Account(
"alice");
82 auto const bob =
Account(
"bob");
83 auto const carol =
Account(
"carol");
87 for (
auto const& tweakedFeatures :
90 Env env(*
this, tweakedFeatures);
92 env.
fund(
XRP(10000), gw, alice, bob, carol);
95 env.
trust(alice[
"USD"](100), bob);
96 env.
trust(bob[
"USD"](100), carol);
102 env(pay(alice, carol, carol[
"USD"](50)),
path(bob));
115 params[jss::source_account] = alice.human();
116 params[jss::destination_account] = carol.human();
117 params[jss::destination_amount] = [] {
119 dest_amt[jss::currency] =
"USD";
120 dest_amt[jss::value] =
"1";
127 BEAST_EXPECT(resp[jss::result][jss::alternatives].size() == 1);
131 return r[jss::lines];
135 BEAST_EXPECT(aliceLines.size() == 1);
136 BEAST_EXPECT(aliceLines[0u][jss::no_ripple].asBool() ==
false);
139 BEAST_EXPECT(bobLines.size() == 2);
140 BEAST_EXPECT(bobLines[0u][jss::no_ripple].asBool() ==
false);
141 BEAST_EXPECT(bobLines[1u][jss::no_ripple].asBool() ==
false);
146 env(pay(carol, alice, alice[
"USD"](50)),
path(bob));
154 BEAST_EXPECT(aliceLines.size() == 1);
155 BEAST_EXPECT(aliceLines[0u].isMember(jss::no_ripple));
158 BEAST_EXPECT(bobLines.size() == 2);
159 BEAST_EXPECT(bobLines[0u].isMember(jss::no_ripple_peer));
160 BEAST_EXPECT(bobLines[1u].isMember(jss::no_ripple));
168 testcase(
"pairwise NoRipple");
171 Env env(*
this, features);
173 auto const alice =
Account(
"alice");
174 auto const bob =
Account(
"bob");
175 auto const carol =
Account(
"carol");
177 env.
fund(
XRP(10000), alice, bob, carol);
179 env(trust(bob, alice[
"USD"](100)));
180 env(trust(carol, bob[
"USD"](100)));
187 params[jss::source_account] = alice.human();
188 params[jss::destination_account] = carol.human();
189 params[jss::destination_amount] = [] {
191 dest_amt[jss::currency] =
"USD";
192 dest_amt[jss::value] =
"1";
198 env.
rpc(
"json",
"ripple_path_find",
to_string(params))};
199 BEAST_EXPECT(resp[jss::result][jss::alternatives].size() == 0);
207 testcase(
"Set default ripple on an account and check new trustlines");
210 Env env(*
this, features);
212 auto const gw =
Account(
"gateway");
213 auto const alice =
Account(
"alice");
214 auto const bob =
Account(
"bob");
220 auto const USD = gw[
"USD"];
222 env(trust(gw, USD(100), alice, 0));
223 env(trust(gw, USD(100), bob, 0));
227 params[jss::account] = gw.human();
228 params[jss::peer] = alice.human();
231 auto const& line0 =
lines[jss::result][jss::lines][0u];
232 BEAST_EXPECT(line0[jss::no_ripple_peer].asBool() ==
true);
236 params[jss::account] = alice.human();
237 params[jss::peer] = gw.human();
240 auto const& line0 =
lines[jss::result][jss::lines][0u];
241 BEAST_EXPECT(line0[jss::no_ripple].asBool() ==
true);
245 params[jss::account] = gw.human();
246 params[jss::peer] = bob.human();
249 auto const& line0 =
lines[jss::result][jss::lines][0u];
250 BEAST_EXPECT(line0[jss::no_ripple].asBool() ==
false);
254 params[jss::account] = bob.human();
255 params[jss::peer] = gw.human();
258 auto const& line0 =
lines[jss::result][jss::lines][0u];
259 BEAST_EXPECT(line0[jss::no_ripple_peer].asBool() ==
false);