20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/jss.h>
29 "00000000000000000000000000000000"
30 "00000000000000000000000000000001";
50 bool other_target =
false,
51 bool expiration =
false)
53 using namespace std::string_literals;
55 bool is_cancel = tx[jss::TransactionType] == jss::TicketCancel;
66 if (is_cancel && other_target)
94 for (
auto const& it : expected_nodes)
96 auto const& idx = std::get<0>(it);
97 auto const& field = std::get<1>(it);
98 auto const& type = std::get<2>(it);
110 testcase(
"Feature Not Enabled");
112 using namespace test::jtx;
122 testcase(
"Cancel Nonexistent");
124 using namespace test::jtx;
132 testcase(
"Create/Cancel Ticket with Bad Fee, Fail Preflight");
134 using namespace test::jtx;
137 env(ticket::create(env.master), fee(XRP(-1)), ter(
temBAD_FEE));
144 testcase(
"Create Tickets with Nonexistent Accounts");
146 using namespace test::jtx;
148 Account alice{
"alice"};
151 env(ticket::create(env.master, alice), ter(
tecNO_TARGET));
153 env(ticket::create(alice, env.master),
154 json(jss::Sequence, 1),
161 testcase(
"Create Tickets with Same Account and Target");
163 using namespace test::jtx;
166 env(ticket::create(env.master, env.master));
168 auto const& jticket = cr[1];
172 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
184 testcase(
"Create Ticket and Then Cancel by Creator");
186 using namespace test::jtx;
190 env(ticket::create(env.master));
192 auto const& jacct = cr[0];
193 auto const& jticket = cr[1];
203 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
211 auto const& jacctd = crd[0];
220 testcase(
"Create Ticket Insufficient Reserve");
222 using namespace test::jtx;
224 Account alice{
"alice"};
226 env.fund(env.current()->fees().accountReserve(0), alice);
235 testcase(
"Create Ticket and Then Cancel by Target");
237 using namespace test::jtx;
239 Account alice{
"alice"};
241 env.fund(XRP(10000), alice);
245 env(ticket::create(env.master, alice));
247 auto const& jacct = cr[0];
248 auto const& jticket = cr[1];
254 "C231BA31A0E13A4D524A75F990CE0D6890B800FF1AE75E51A2D33559547AC1A2");
265 auto const& jacctd = crd[0];
266 auto const& jdir = crd[2];
285 testcase(
"Create Ticket with Future Expiration");
287 using namespace test::jtx;
291 using namespace std::chrono_literals;
293 (env.timeKeeper().closeTime() + 60s).time_since_epoch().count();
294 env(ticket::create(env.master, expire));
296 auto const& jacct = cr[0];
297 auto const& jticket = cr[1];
312 testcase(
"Create Ticket with Zero Expiration");
314 using namespace test::jtx;
324 testcase(
"Create Ticket with Past Expiration");
326 using namespace test::jtx;
329 env.timeKeeper().adjustCloseTime(
days{2});
333 uint32_t expire = 60;
334 env(ticket::create(env.master, expire));
353 testcase(
"Create Ticket and Allow to Expire");
355 using namespace test::jtx;
362 env(ticket::create(env.master, expire));
364 auto const& jacct = cr[0];
365 auto const& jticket = cr[1];
374 "7F58A0AE17775BA3404D55D406DD1C2E91EADD7AF3F03A26877BCE764CCB75E3");
376 Account alice{
"alice"};
377 env.fund(XRP(10000), alice);
386 env.timeKeeper().adjustCloseTime(
days{3});
392 auto const& jticketd = crd[1];