40 testcase(
"Bad input to noripple_check");
45 auto const alice =
Account{
"alice"};
46 env.fund(XRP(10000), alice);
50 auto const result = env.rpc(
"json",
"noripple_check",
"{}")[jss::result];
51 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
52 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'account'.");
57 params[jss::account] = alice.human();
58 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
59 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
60 BEAST_EXPECT(result[jss::error_message] ==
"Missing field 'role'.");
65 auto testInvalidAccountParam = [&](
auto const& param) {
67 params[jss::account] = param;
68 params[jss::role] =
"user";
69 auto jrr = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
70 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
71 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
74 testInvalidAccountParam(1);
75 testInvalidAccountParam(1.1);
76 testInvalidAccountParam(
true);
84 params[jss::account] = alice.human();
85 params[jss::role] =
"not_a_role";
86 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
87 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
88 BEAST_EXPECT(result[jss::error_message] ==
"Invalid field 'role'.");
93 params[jss::account] = alice.human();
94 params[jss::role] =
"user";
95 params[jss::limit] = -1;
96 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
97 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
99 result[jss::error_message] ==
"Invalid field 'limit', not unsigned integer.");
104 params[jss::account] = alice.human();
105 params[jss::role] =
"user";
106 params[jss::ledger_hash] = 1;
107 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
108 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
110 result[jss::error_message] ==
"Invalid field 'ledger_hash', not hex string.");
115 params[jss::account] =
Account{
"nobody"}.human();
116 params[jss::role] =
"user";
117 params[jss::ledger] =
"current";
118 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
119 BEAST_EXPECT(result[jss::error] ==
"actNotFound");
120 BEAST_EXPECT(result[jss::error_message] ==
"Account not found.");
127 params[jss::role] =
"user";
128 params[jss::ledger] =
"current";
129 params[jss::transactions] =
true;
130 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
131 BEAST_EXPECT(result[jss::error] ==
"actMalformed");
132 BEAST_EXPECT(result[jss::error_message] ==
"Account malformed.");
135 BEAST_EXPECT(!result.isMember(jss::transactions));
136 BEAST_EXPECT(!result.isMember(jss::ledger_hash));
137 BEAST_EXPECT(!result.isMember(jss::ledger_index));
138 BEAST_EXPECT(!result.isMember(jss::validated));
144 params[jss::account] =
Account{
"nobody"}.human();
145 params[jss::role] =
"user";
146 params[jss::ledger] =
"current";
147 params[jss::ledger_hash] =
"ABCDEF";
148 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
149 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
151 result[jss::error_message] ==
152 "Exactly one of 'ledger', 'ledger_hash', or 'ledger_index' can "
159 params[jss::account] =
Account{
"nobody"}.human();
160 params[jss::role] =
"user";
162 auto const result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
163 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
165 result[jss::error_message] ==
"Invalid field 'ledger', not string or number.");
172 testcase <<
"Request noripple_check for " << (user ?
"user" :
"gateway") <<
" role, expect"
173 << (problems ?
"" :
" no") <<
" problems";
179 auto const alice =
Account{
"alice"};
181 env.fund(XRP(10000), gw, alice);
182 if ((user && problems) || (!user && !problems))
184 env(fset(alice, asfDefaultRipple));
185 env(trust(alice, gw[
"USD"](100)));
189 env(fclear(alice, asfDefaultRipple));
190 env(trust(alice, gw[
"USD"](100), gw, tfSetNoRipple));
195 params[jss::account] = alice.human();
196 params[jss::role] = (user ?
"user" :
"gateway");
197 params[jss::ledger] =
"current";
198 auto result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
200 auto const pa = result[
"problems"];
201 if (!BEAST_EXPECT(pa.isArray()))
204 BEAST_EXPECT(!result.isMember(jss::transactions));
207 if (!BEAST_EXPECT(pa.size() == 2))
212 BEAST_EXPECT(pa[0u].asString().starts_with(
"You appear to have set"));
213 BEAST_EXPECT(pa[1u].asString().starts_with(
"You should probably set"));
217 BEAST_EXPECT(pa[0u].asString().starts_with(
"You should immediately set"));
218 BEAST_EXPECT(pa[1u].asString().starts_with(
"You should clear"));
223 BEAST_EXPECT(pa.size() == 0);
228 params[jss::transactions] =
true;
229 result = env.rpc(
"json",
"noripple_check",
to_string(params))[jss::result];
231 auto const txs = result[jss::transactions];
234 if (!BEAST_EXPECT(result[jss::transactions].isArray()))
236 if (!BEAST_EXPECT(txs.size() == (user ? 1 : 2)))
241 BEAST_EXPECT(txs[0u][jss::Account] == alice.human());
242 BEAST_EXPECT(txs[0u][jss::TransactionType] == jss::AccountSet);
245 BEAST_EXPECT(result[jss::transactions][txs.size() - 1][jss::Account] == alice.human());
247 result[jss::transactions][txs.size() - 1][jss::TransactionType] == jss::TrustSet);
249 result[jss::transactions][txs.size() - 1][jss::LimitAmount] ==
254 BEAST_EXPECT(txs.size() == 0);