42 testcase(
"Bad input to noripple_check");
47 auto const alice =
Account{
"alice"};
48 env.fund(XRP(10000), alice);
52 auto const result = env.rpc(
"json",
"noripple_check",
"{}")[jss::result];
53 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
54 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
59 params[jss::account] = alice.human();
60 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
61 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
62 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'role'.");
67 auto testInvalidAccountParam = [&](
auto const& param) {
69 params[jss::account] = param;
70 params[jss::role] =
"user";
71 auto jrr = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
72 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
73 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
76 testInvalidAccountParam(1);
77 testInvalidAccountParam(1.1);
78 testInvalidAccountParam(
true);
86 params[jss::account] = alice.human();
87 params[jss::role] =
"not_a_role";
88 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
89 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
90 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'role'.");
95 params[jss::account] = alice.human();
96 params[jss::role] =
"user";
97 params[jss::limit] = -1;
98 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
99 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
101 result[jss::error_message] ==
"Invalid field 'limit', not unsigned integer.");
106 params[jss::account] = alice.human();
107 params[jss::role] =
"user";
108 params[jss::ledger_hash] = 1;
109 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
110 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
112 result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
117 params[jss::account] =
Account{
"nobody"}.human();
118 params[jss::role] =
"user";
119 params[jss::ledger] =
"current";
120 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
121 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
122 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
129 params[jss::role] =
"user";
130 params[jss::ledger] =
"current";
131 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
132 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
133 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
139 params[jss::account] =
Account{
"nobody"}.human();
140 params[jss::role] =
"user";
141 params[jss::ledger] =
"current";
142 params[jss::ledger_hash] =
"ABCDEF";
143 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
144 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
146 result[jss::error_message] ==
147 "Exactly one of 'ledger', 'ledger_hash', or 'ledger_index' can "
154 params[jss::account] =
Account{
"nobody"}.human();
155 params[jss::role] =
"user";
157 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
158 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
160 result[jss::error_message] ==
"Invalid field 'ledger', not string or number.");
167 testcase <<
"Request noripple_check for " << (user ?
"user" :
"gateway") <<
" role, expect"
168 << (problems ?
"" :
" no") <<
" problems";
174 auto const alice =
Account{
"alice"};
176 env.fund(XRP(10000), gw, alice);
177 if ((user && problems) || (!user && !problems))
179 env(fset(alice, asfDefaultRipple));
180 env(trust(alice, gw[
"USD"](100)));
184 env(fclear(alice, asfDefaultRipple));
185 env(trust(alice, gw[
"USD"](100), gw, tfSetNoRipple));
190 params[jss::account] = alice.human();
191 params[jss::role] = (user ?
"user" :
"gateway");
192 params[jss::ledger] =
"current";
193 auto result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
195 auto const pa = result[
"problems"];
196 if (!BEAST_EXPECT(pa.isArray()))
201 if (!BEAST_EXPECT(pa.size() == 2))
206 BEAST_EXPECT(boost::starts_with(pa[0u].asString(),
"You appear to have set"));
207 BEAST_EXPECT(boost::starts_with(pa[1u].asString(),
"You should probably set"));
211 BEAST_EXPECT(boost::starts_with(pa[0u].asString(),
"You should immediately set"));
212 BEAST_EXPECT(boost::starts_with(pa[1u].asString(),
"You should clear"));
217 BEAST_EXPECT(pa.size() == 0);
222 params[jss::transactions] =
true;
223 result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
224 if (!BEAST_EXPECT(result[jss::transactions].isArray()))
227 auto const txs = result[jss::transactions];
230 if (!BEAST_EXPECT(txs.size() == (user ? 1 : 2)))
235 BEAST_EXPECT(txs[0u][jss::Account] == alice.human());
236 BEAST_EXPECT(txs[0u][jss::TransactionType] == jss::AccountSet);
239 BEAST_EXPECT(result[jss::transactions][txs.size() - 1][jss::Account] == alice.human());
241 result[jss::transactions][txs.size() - 1][jss::TransactionType] == jss::TrustSet);
243 result[jss::transactions][txs.size() - 1][jss::LimitAmount] ==
248 BEAST_EXPECT(txs.size() == 0);