rippled
Loading...
Searching...
No Matches
TicketCreateTests.cpp
1// Auto-generated unit tests for transaction TicketCreate
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/SecretKey.h>
9#include <xrpl/protocol/Seed.h>
10#include <xrpl/protocol/STTx.h>
11#include <xrpl/protocol_autogen/transactions/TicketCreate.h>
12#include <xrpl/protocol_autogen/transactions/AccountSet.h>
13
14#include <string>
15
16namespace xrpl::transactions {
17
18// 1 & 4) Set fields via builder setters, build, then read them back via
19// wrapper getters. After build(), validate() should succeed.
20TEST(TransactionsTicketCreateTests, BuilderSettersRoundTrip)
21{
22 // Generate a deterministic keypair for signing
23 auto const [publicKey, secretKey] =
25
26 // Common transaction fields
27 auto const accountValue = calcAccountID(publicKey);
28 std::uint32_t const sequenceValue = 1;
29 auto const feeValue = canonical_AMOUNT();
30
31 // Transaction-specific field values
32 auto const ticketCountValue = canonical_UINT32();
33
34 TicketCreateBuilder builder{
35 accountValue,
36 ticketCountValue,
37 sequenceValue,
38 feeValue
39 };
40
41 // Set optional fields
42
43 auto tx = builder.build(publicKey, secretKey);
44
45 std::string reason;
46 EXPECT_TRUE(tx.validate(reason)) << reason;
47
48 // Verify signing was applied
49 EXPECT_FALSE(tx.getSigningPubKey().empty());
50 EXPECT_TRUE(tx.hasTxnSignature());
51
52 // Verify common fields
53 EXPECT_EQ(tx.getAccount(), accountValue);
54 EXPECT_EQ(tx.getSequence(), sequenceValue);
55 EXPECT_EQ(tx.getFee(), feeValue);
56
57 // Verify required fields
58 {
59 auto const& expected = ticketCountValue;
60 auto const actual = tx.getTicketCount();
61 expectEqualField(expected, actual, "sfTicketCount");
62 }
63
64 // Verify optional fields
65}
66
67// 2 & 4) Start from an STTx, construct a builder from it, build a new wrapper,
68// and verify all fields match.
69TEST(TransactionsTicketCreateTests, BuilderFromStTxRoundTrip)
70{
71 // Generate a deterministic keypair for signing
72 auto const [publicKey, secretKey] =
73 generateKeyPair(KeyType::secp256k1, generateSeed("testTicketCreateFromTx"));
74
75 // Common transaction fields
76 auto const accountValue = calcAccountID(publicKey);
77 std::uint32_t const sequenceValue = 2;
78 auto const feeValue = canonical_AMOUNT();
79
80 // Transaction-specific field values
81 auto const ticketCountValue = canonical_UINT32();
82
83 // Build an initial transaction
84 TicketCreateBuilder initialBuilder{
85 accountValue,
86 ticketCountValue,
87 sequenceValue,
88 feeValue
89 };
90
91
92 auto initialTx = initialBuilder.build(publicKey, secretKey);
93
94 // Create builder from existing STTx
95 TicketCreateBuilder builderFromTx{initialTx.getSTTx()};
96
97 auto rebuiltTx = builderFromTx.build(publicKey, secretKey);
98
99 std::string reason;
100 EXPECT_TRUE(rebuiltTx.validate(reason)) << reason;
101
102 // Verify common fields
103 EXPECT_EQ(rebuiltTx.getAccount(), accountValue);
104 EXPECT_EQ(rebuiltTx.getSequence(), sequenceValue);
105 EXPECT_EQ(rebuiltTx.getFee(), feeValue);
106
107 // Verify required fields
108 {
109 auto const& expected = ticketCountValue;
110 auto const actual = rebuiltTx.getTicketCount();
111 expectEqualField(expected, actual, "sfTicketCount");
112 }
113
114 // Verify optional fields
115}
116
117// 3) Verify wrapper throws when constructed from wrong transaction type.
118TEST(TransactionsTicketCreateTests, WrapperThrowsOnWrongTxType)
119{
120 // Build a valid transaction of a different type
121 auto const [pk, sk] =
123 auto const account = calcAccountID(pk);
124
125 AccountSetBuilder wrongBuilder{account, 1, canonical_AMOUNT()};
126 auto wrongTx = wrongBuilder.build(pk, sk);
127
128 EXPECT_THROW(TicketCreate{wrongTx.getSTTx()}, std::runtime_error);
129}
130
131// 4) Verify builder throws when constructed from wrong transaction type.
132TEST(TransactionsTicketCreateTests, BuilderThrowsOnWrongTxType)
133{
134 // Build a valid transaction of a different type
135 auto const [pk, sk] =
136 generateKeyPair(KeyType::secp256k1, generateSeed("testWrongTypeBuilder"));
137 auto const account = calcAccountID(pk);
138
139 AccountSetBuilder wrongBuilder{account, 1, canonical_AMOUNT()};
140 auto wrongTx = wrongBuilder.build(pk, sk);
141
142 EXPECT_THROW(TicketCreateBuilder{wrongTx.getSTTx()}, std::runtime_error);
143}
144
145
146}
TicketCreate build(PublicKey const &publicKey, SecretKey const &secretKey)
Build and return the TicketCreate wrapper.
std::shared_ptr< STTx const > getSTTx() const
Get the underlying STTx object.
TEST(TransactionsAccountDeleteTests, BuilderSettersRoundTrip)
Seed generateSeed(std::string const &passPhrase)
Generate a seed deterministically.
Definition Seed.cpp:57
std::pair< PublicKey, SecretKey > generateKeyPair(KeyType type, Seed const &seed)
Generate a key pair deterministically.
AccountID calcAccountID(PublicKey const &pk)
void expectEqualField(T const &expected, T const &actual, char const *fieldName)