27 auto const USD_gw = gw[
"USD"];
29 auto const USD_bob = bob[
"USD"];
31 env.fund(
XRP(10000), gw, bob);
32 env.trust(USD_gw(1000), bob);
37 env(
pay(gw, bob, USD_gw(10)));
38 unsigned const offer_count = 12u;
39 for (
auto i = 0u; i < offer_count; i++)
42 jvo[sfExpiration.fieldName] = 10000000u;
48 env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
55 jvParams[jss::account] = bob.
human();
56 jvParams[jss::limit] = 1u;
57 auto const jrr_l = env.rpc(
59 auto const& jro_l = jrr_l[jss::offers];
69 std::string(
"Sequential - ") + (asAdmin ?
"admin" :
"non-admin"));
74 auto const USD_gw = gw[
"USD"];
76 auto const USD_bob = bob[
"USD"];
78 env.fund(
XRP(10000), gw, bob);
79 env.trust(USD_gw(1000), bob);
84 env(
pay(gw, bob, USD_gw(10)));
86 env(
offer(bob,
XRP(100), USD_bob(1)));
87 env(
offer(bob,
XRP(200), USD_gw(2)));
92 env.rpc(
"account_offers", bob.
human())[jss::result][jss::offers];
99 BEAST_EXPECT(jroOuter[0u][jss::quality] ==
"100000000");
100 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::currency] ==
"USD");
102 jroOuter[0u][jss::taker_gets][jss::issuer] == gw.
human());
103 BEAST_EXPECT(jroOuter[0u][jss::taker_gets][jss::value] ==
"2");
104 BEAST_EXPECT(jroOuter[0u][jss::taker_pays] ==
"200000000");
106 BEAST_EXPECT(jroOuter[1u][jss::quality] ==
"100000000");
107 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::currency] ==
"USD");
109 jroOuter[1u][jss::taker_gets][jss::issuer] == bob.
human());
110 BEAST_EXPECT(jroOuter[1u][jss::taker_gets][jss::value] ==
"1");
111 BEAST_EXPECT(jroOuter[1u][jss::taker_pays] ==
"100000000");
113 BEAST_EXPECT(jroOuter[2u][jss::quality] ==
"5000000");
114 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::currency] ==
"USD");
116 jroOuter[2u][jss::taker_gets][jss::issuer] == gw.
human());
117 BEAST_EXPECT(jroOuter[2u][jss::taker_gets][jss::value] ==
"6");
118 BEAST_EXPECT(jroOuter[2u][jss::taker_pays] ==
"30000000");
124 jvParams[jss::account] = bob.
human();
125 jvParams[jss::limit] = 1u;
126 auto const jrr_l_1 = env.rpc(
130 auto const& jro_l_1 = jrr_l_1[jss::offers];
139 : (!jrr_l_1.isMember(jss::marker)));
142 BEAST_EXPECT(jroOuter[0u] == jro_l_1[0u]);
145 jvParams[jss::marker] = jrr_l_1[jss::marker];
146 auto const jrr_l_2 = env.rpc(
150 auto const& jro_l_2 = jrr_l_2[jss::offers];
153 BEAST_EXPECT(jroOuter[1u] == jro_l_2[0u]);
156 jvParams[jss::marker] = jrr_l_2[jss::marker];
157 jvParams[jss::limit] = 10u;
158 auto const jrr_l_3 = env.rpc(
162 auto const& jro_l_3 = jrr_l_3[jss::offers];
163 BEAST_EXPECT(!jrr_l_3.isMember(jss::marker));
165 BEAST_EXPECT(jroOuter[2u] == jro_l_3[0u]);
169 BEAST_EXPECT(jroOuter == jro_l_1);
175 jvParams[jss::account] = bob.
human();
176 jvParams[jss::limit] = 0u;
177 auto const jrr = env.rpc(
181 BEAST_EXPECT(jrr.isMember(jss::error_message));
193 auto const USD_gw = gw[
"USD"];
195 auto const USD_bob = bob[
"USD"];
198 env.
trust(USD_gw(1000), bob);
202 auto const jrr = env.
rpc(
"account_offers");
203 BEAST_EXPECT(jrr[jss::error] ==
"badSyntax");
204 BEAST_EXPECT(jrr[jss::status] ==
"error");
205 BEAST_EXPECT(jrr[jss::error_message] ==
"Syntax error.");
210 auto testInvalidAccountParam = [&](
auto const& param) {
212 params[jss::account] = param;
214 "json",
"account_offers",
to_string(params))[jss::result];
215 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
217 jrr[jss::error_message] ==
"Invalid field 'account'.");
220 testInvalidAccountParam(1);
221 testInvalidAccountParam(1.1);
222 testInvalidAccountParam(
true);
231 jvParams[jss::account] =
"";
232 auto const jrr = env.
rpc(
236 BEAST_EXPECT(jrr[jss::error] ==
"actMalformed");
237 BEAST_EXPECT(jrr[jss::status] ==
"error");
238 BEAST_EXPECT(jrr[jss::error_message] ==
"Account malformed.");
243 auto const jrr = env.
rpc(
244 "account_offers",
Account(
"bogus").human())[jss::result];
245 BEAST_EXPECT(jrr[jss::error] ==
"actNotFound");
246 BEAST_EXPECT(jrr[jss::status] ==
"error");
247 BEAST_EXPECT(jrr[jss::error_message] ==
"Account not found.");
253 jvParams[jss::account] = bob.
human();
254 jvParams[jss::limit] =
"0";
255 auto const jrr = env.
rpc(
259 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
260 BEAST_EXPECT(jrr[jss::status] ==
"error");
262 jrr[jss::error_message] ==
263 "Invalid field 'limit', not unsigned integer.");
269 jvParams[jss::account] = bob.
human();
270 jvParams[jss::marker] =
"NOT_A_MARKER";
271 auto const jrr = env.
rpc(
275 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
276 BEAST_EXPECT(jrr[jss::status] ==
"error");
278 jrr[jss::error_message] ==
"Invalid field 'marker'.",
279 jrr.toStyledString());
285 jvParams[jss::account] = bob.
human();
286 jvParams[jss::marker] = 1;
287 auto const jrr = env.
rpc(
291 BEAST_EXPECT(jrr[jss::error] ==
"invalidParams");
292 BEAST_EXPECT(jrr[jss::status] ==
"error");
294 jrr[jss::error_message] ==
295 "Invalid field 'marker', not string.");
301 jvParams[jss::account] = bob.
human();
302 jvParams[jss::ledger_index] = 10u;
303 auto const jrr = env.
rpc(
307 BEAST_EXPECT(jrr[jss::error] ==
"lgrNotFound");
308 BEAST_EXPECT(jrr[jss::status] ==
"error");
309 BEAST_EXPECT(jrr[jss::error_message] ==
"ledgerNotFound");