26 auto const USD_gw = gw[
"USD"];
28 auto const USD_bob = bob[
"USD"];
30 env.fund(
XRP(10000), gw, bob);
31 env.trust(USD_gw(1000), bob);
36 env(
pay(gw, bob, USD_gw(10)));
37 unsigned const offer_count = 12u;
38 for (
auto i = 0u; i < offer_count; i++)
41 jvo[sfExpiration.fieldName] = 10000000u;
46 auto const jro_nl = env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
53 jvParams[jss::account] = bob.
human();
54 jvParams[jss::limit] = 1u;
55 auto const jrr_l = env.rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
56 auto const& jro_l = jrr_l[jss::offers];
70 auto const USD_gw = gw[
"USD"];
72 auto const USD_bob = bob[
"USD"];
74 env.fund(
XRP(10000), gw, bob);
75 env.trust(USD_gw(1000), bob);
80 env(
pay(gw, bob, USD_gw(10)));
82 env(
offer(bob,
XRP(100), USD_bob(1)));
83 env(
offer(bob,
XRP(200), USD_gw(2)));
87 auto const jroOuter = env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
94 BEAST_EXPECT(jroOuter[0u][jss::quality] ==
"100000000");
95 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::currency] ==
"USD");
96 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::issuer] == gw.
human());
97 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::value] ==
"2");
98 BEAST_EXPECT(jroOuter[0u][jss::taker_pays] ==
"200000000");
100 BEAST_EXPECT(jroOuter[1u][jss::quality] ==
"100000000");
101 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::currency] ==
"USD");
102 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::issuer] == bob.
human());
103 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::value] ==
"1");
104 BEAST_EXPECT(jroOuter[1u][jss::taker_pays] ==
"100000000");
106 BEAST_EXPECT(jroOuter[2u][jss::quality] ==
"5000000");
107 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::currency] ==
"USD");
108 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::issuer] == gw.
human());
109 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::value] ==
"6");
110 BEAST_EXPECT(jroOuter[2u][jss::taker_pays] ==
"30000000");
116 jvParams[jss::account] = bob.
human();
117 jvParams[jss::limit] = 1u;
118 auto const jrr_l_1 = env.rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
119 auto const& jro_l_1 = jrr_l_1[jss::offers];
126 BEAST_EXPECT(asAdmin ?
checkMarker(jrr_l_1) : (!jrr_l_1.isMember(jss::marker)));
129 BEAST_EXPECT(jroOuter[0u] == jro_l_1[0u]);
132 jvParams[jss::marker] = jrr_l_1[jss::marker];
133 auto const jrr_l_2 = env.rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
134 auto const& jro_l_2 = jrr_l_2[jss::offers];
137 BEAST_EXPECT(jroOuter[1u] == jro_l_2[0u]);
140 jvParams[jss::marker] = jrr_l_2[jss::marker];
141 jvParams[jss::limit] = 10u;
142 auto const jrr_l_3 = env.rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
143 auto const& jro_l_3 = jrr_l_3[jss::offers];
144 BEAST_EXPECT(!jrr_l_3.isMember(jss::marker));
146 BEAST_EXPECT(jroOuter[2u] == jro_l_3[0u]);
150 BEAST_EXPECT(jroOuter == jro_l_1);
156 jvParams[jss::account] = bob.
human();
157 jvParams[jss::limit] = 0u;
158 auto const jrr = env.rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
159 BEAST_EXPECT(jrr.isMember(jss::error_message));
171 auto const USD_gw = gw[
"USD"];
173 auto const USD_bob = bob[
"USD"];
176 env.
trust(USD_gw(1000), bob);
180 auto const jrr = env.
rpc(
"account_offers");
181 BEAST_EXPECT(jrr[jss::error] ==
"badSyntax");
182 BEAST_EXPECT(jrr[jss::status] ==
"error");
183 BEAST_EXPECT(jrr[jss::error_message] ==
"Syntax error.");
188 auto testInvalidAccountParam = [&](
auto const& param) {
190 params[jss::account] = param;
191 auto jrr = env.
rpc(
"json",
"account_offers",
to_string(params))[jss::result];
192 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
193 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'account'.");
196 testInvalidAccountParam(1);
197 testInvalidAccountParam(1.1);
198 testInvalidAccountParam(
true);
207 jvParams[jss::account] =
"";
208 auto const jrr = env.
rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
209 BEAST_EXPECT(jrr[jss::error] ==
"actMalformed");
210 BEAST_EXPECT(jrr[jss::status] ==
"error");
211 BEAST_EXPECT(jrr[jss::error_message] ==
"Account malformed.");
216 auto const jrr = env.
rpc(
"account_offers",
Account(
"bogus").human())[jss::result];
217 BEAST_EXPECT(jrr[jss::error] ==
"actNotFound");
218 BEAST_EXPECT(jrr[jss::status] ==
"error");
219 BEAST_EXPECT(jrr[jss::error_message] ==
"Account not found.");
225 jvParams[jss::account] = bob.
human();
226 jvParams[jss::limit] =
"0";
227 auto const jrr = env.
rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
228 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
229 BEAST_EXPECT(jrr[jss::status] ==
"error");
230 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'limit', not unsigned integer.");
236 jvParams[jss::account] = bob.
human();
237 jvParams[jss::marker] =
"NOT_A_MARKER";
238 auto const jrr = env.
rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
239 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
240 BEAST_EXPECT(jrr[jss::status] ==
"error");
241 BEAST_EXPECTS(jrr[jss::error_message] ==
"Invalid field 'marker'.", jrr.toStyledString());
247 jvParams[jss::account] = bob.
human();
248 jvParams[jss::marker] = 1;
249 auto const jrr = env.
rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
250 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
251 BEAST_EXPECT(jrr[jss::status] ==
"error");
252 BEAST_EXPECT(jrr[jss::error_message] ==
"Invalid field 'marker', not string.");
258 jvParams[jss::account] = bob.
human();
259 jvParams[jss::ledger_index] = 10u;
260 auto const jrr = env.
rpc(
"json",
"account_offers", jvParams.
toStyledString())[jss::result];
261 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
262 BEAST_EXPECT(jrr[jss::status] ==
"error");
263 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");