20 #include <ripple/protocol/jss.h>
22 #include <test/jtx/Env.h>
31 testcase(
"Invalid request params");
32 using namespace test::jtx;
38 env.client().invoke(
"transaction_entry", {})[jss::result];
39 BEAST_EXPECT(result[jss::error] ==
"fieldNotFoundTransaction");
40 BEAST_EXPECT(result[jss::status] ==
"error");
45 params[jss::ledger] = 20;
47 env.client().invoke(
"transaction_entry", params)[jss::result];
48 BEAST_EXPECT(result[jss::error] ==
"lgrNotFound");
49 BEAST_EXPECT(result[jss::status] ==
"error");
54 params[jss::ledger] =
"current";
55 params[jss::tx_hash] =
"DEADBEEF";
57 env.client().invoke(
"transaction_entry", params)[jss::result];
58 BEAST_EXPECT(result[jss::error] ==
"notYetImplemented");
59 BEAST_EXPECT(result[jss::status] ==
"error");
64 params[jss::ledger] =
"closed";
65 params[jss::tx_hash] =
"DEADBEEF";
67 env.client().invoke(
"transaction_entry", params)[jss::result];
68 BEAST_EXPECT(!result[jss::ledger_hash].asString().empty());
69 BEAST_EXPECT(result[jss::error] ==
"malformedRequest");
70 BEAST_EXPECT(result[jss::status] ==
"error");
74 "E2FE8D4AF3FCC3944DDF6CD8CDDC5E3F0AD50863EF8919AFEF10CB6408CD4D05"};
79 Json::Value const result{env.rpc(
"transaction_entry")};
80 BEAST_EXPECT(result[jss::ledger_hash].asString().empty());
81 BEAST_EXPECT(result[jss::error] ==
"badSyntax");
82 BEAST_EXPECT(result[jss::status] ==
"error");
87 Json::Value const result{env.rpc(
"transaction_entry", txHash)};
88 BEAST_EXPECT(result[jss::error] ==
"badSyntax");
89 BEAST_EXPECT(result[jss::status] ==
"error");
95 env.rpc(
"transaction_entry", txHash.substr(1),
"closed")};
96 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
97 BEAST_EXPECT(result[jss::status] ==
"error");
103 env.rpc(
"transaction_entry", txHash +
"A",
"closed")};
104 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
105 BEAST_EXPECT(result[jss::status] ==
"error");
111 env.rpc(
"transaction_entry", txHash,
"closer")};
112 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
113 BEAST_EXPECT(result[jss::status] ==
"error");
118 Json::Value const result{env.rpc(
"transaction_entry", txHash,
"0")};
119 BEAST_EXPECT(result[jss::error] ==
"invalidParams");
120 BEAST_EXPECT(result[jss::status] ==
"error");
126 env.rpc(
"transaction_entry", txHash,
"closed",
"extra")};
127 BEAST_EXPECT(result[jss::error] ==
"badSyntax");
128 BEAST_EXPECT(result[jss::status] ==
"error");
134 env.rpc(
"transaction_entry", txHash,
"closed")};
136 !result[jss::result][jss::ledger_hash].asString().empty());
138 result[jss::result][jss::error] ==
"transactionNotFound");
139 BEAST_EXPECT(result[jss::result][jss::status] ==
"error");
146 testcase(
"Basic request");
147 using namespace test::jtx;
150 auto check_tx = [
this, &env](
155 Json::Value const resIndex{[&env, index, &txhash]() {
157 params[jss::ledger_index] = index;
158 params[jss::tx_hash] = txhash;
159 return env.client().invoke(
160 "transaction_entry", params)[jss::result];
163 if (!BEAST_EXPECTS(resIndex.isMember(jss::tx_json), txhash))
166 BEAST_EXPECT(resIndex[jss::tx_json][jss::hash] == txhash);
170 resIndex[jss::tx_json][jss::TransactionType] == type,
172 resIndex[jss::tx_json][jss::TransactionType]
180 params[jss::ledger_hash] = resIndex[jss::ledger_hash];
181 params[jss::tx_hash] = txhash;
183 "transaction_entry", params)[jss::result];
184 BEAST_EXPECT(resHash == resIndex);
191 BEAST_EXPECT(clIndex[
"result"] == resIndex);
199 resIndex[jss::ledger_hash].asString())};
200 BEAST_EXPECT(clHash[
"result"] == resIndex);
207 env.fund(XRP(10000), A1);
209 boost::lexical_cast<std::string>(env.tx()->getTransactionID());
211 env.fund(XRP(10000), A2);
213 boost::lexical_cast<std::string>(env.tx()->getTransactionID());
219 check_tx(env.closed()->seq(), fund_1_tx);
220 check_tx(env.closed()->seq(), fund_2_tx);
222 env.trust(A2[
"USD"](1000), A1);
227 boost::lexical_cast<std::string>(env.tx()->getTransactionID());
229 env(pay(A2, A1, A2[
"USD"](5)));
231 boost::lexical_cast<std::string>(env.tx()->getTransactionID());
234 check_tx(env.closed()->seq(), trust_tx);
235 check_tx(env.closed()->seq(), pay_tx, jss::Payment.c_str());
237 env(offer(A2, XRP(100), A2[
"USD"](1)));
239 boost::lexical_cast<std::string>(env.tx()->getTransactionID());
243 check_tx(env.closed()->seq(), offer_tx, jss::OfferCreate.c_str());