rippled
Loading...
Searching...
No Matches
AccountRootTests.cpp
1// Auto-generated unit tests for ledger entry AccountRoot
2
3
4#include <gtest/gtest.h>
5
6#include <protocol_autogen/TestHelpers.h>
7
8#include <xrpl/protocol/STLedgerEntry.h>
9#include <xrpl/protocol_autogen/ledger_entries/AccountRoot.h>
10#include <xrpl/protocol_autogen/ledger_entries/Ticket.h>
11
12#include <string>
13
14namespace xrpl::ledger_entries {
15
16// 1 & 4) Set fields via builder setters, build, then read them back via
17// wrapper getters. After build(), validate() should succeed for both the
18// builder's STObject and the wrapper's SLE.
19TEST(AccountRootTests, BuilderSettersRoundTrip)
20{
21 uint256 const index{1u};
22
23 auto const accountValue = canonical_ACCOUNT();
24 auto const sequenceValue = canonical_UINT32();
25 auto const balanceValue = canonical_AMOUNT();
26 auto const ownerCountValue = canonical_UINT32();
27 auto const previousTxnIDValue = canonical_UINT256();
28 auto const previousTxnLgrSeqValue = canonical_UINT32();
29 auto const accountTxnIDValue = canonical_UINT256();
30 auto const regularKeyValue = canonical_ACCOUNT();
31 auto const emailHashValue = canonical_UINT128();
32 auto const walletLocatorValue = canonical_UINT256();
33 auto const walletSizeValue = canonical_UINT32();
34 auto const messageKeyValue = canonical_VL();
35 auto const transferRateValue = canonical_UINT32();
36 auto const domainValue = canonical_VL();
37 auto const tickSizeValue = canonical_UINT8();
38 auto const ticketCountValue = canonical_UINT32();
39 auto const nFTokenMinterValue = canonical_ACCOUNT();
40 auto const mintedNFTokensValue = canonical_UINT32();
41 auto const burnedNFTokensValue = canonical_UINT32();
42 auto const firstNFTokenSequenceValue = canonical_UINT32();
43 auto const aMMIDValue = canonical_UINT256();
44 auto const vaultIDValue = canonical_UINT256();
45 auto const loanBrokerIDValue = canonical_UINT256();
46
47 AccountRootBuilder builder{
48 accountValue,
49 sequenceValue,
50 balanceValue,
51 ownerCountValue,
52 previousTxnIDValue,
53 previousTxnLgrSeqValue
54 };
55
56 builder.setAccountTxnID(accountTxnIDValue);
57 builder.setRegularKey(regularKeyValue);
58 builder.setEmailHash(emailHashValue);
59 builder.setWalletLocator(walletLocatorValue);
60 builder.setWalletSize(walletSizeValue);
61 builder.setMessageKey(messageKeyValue);
62 builder.setTransferRate(transferRateValue);
63 builder.setDomain(domainValue);
64 builder.setTickSize(tickSizeValue);
65 builder.setTicketCount(ticketCountValue);
66 builder.setNFTokenMinter(nFTokenMinterValue);
67 builder.setMintedNFTokens(mintedNFTokensValue);
68 builder.setBurnedNFTokens(burnedNFTokensValue);
69 builder.setFirstNFTokenSequence(firstNFTokenSequenceValue);
70 builder.setAMMID(aMMIDValue);
71 builder.setVaultID(vaultIDValue);
72 builder.setLoanBrokerID(loanBrokerIDValue);
73
74 builder.setLedgerIndex(index);
75 builder.setFlags(0x1u);
76
77 EXPECT_TRUE(builder.validate());
78
79 auto const entry = builder.build(index);
80
81 EXPECT_TRUE(entry.validate());
82
83 {
84 auto const& expected = accountValue;
85 auto const actual = entry.getAccount();
86 expectEqualField(expected, actual, "sfAccount");
87 }
88
89 {
90 auto const& expected = sequenceValue;
91 auto const actual = entry.getSequence();
92 expectEqualField(expected, actual, "sfSequence");
93 }
94
95 {
96 auto const& expected = balanceValue;
97 auto const actual = entry.getBalance();
98 expectEqualField(expected, actual, "sfBalance");
99 }
100
101 {
102 auto const& expected = ownerCountValue;
103 auto const actual = entry.getOwnerCount();
104 expectEqualField(expected, actual, "sfOwnerCount");
105 }
106
107 {
108 auto const& expected = previousTxnIDValue;
109 auto const actual = entry.getPreviousTxnID();
110 expectEqualField(expected, actual, "sfPreviousTxnID");
111 }
112
113 {
114 auto const& expected = previousTxnLgrSeqValue;
115 auto const actual = entry.getPreviousTxnLgrSeq();
116 expectEqualField(expected, actual, "sfPreviousTxnLgrSeq");
117 }
118
119 {
120 auto const& expected = accountTxnIDValue;
121 auto const actualOpt = entry.getAccountTxnID();
122 ASSERT_TRUE(actualOpt.has_value());
123 expectEqualField(expected, *actualOpt, "sfAccountTxnID");
124 EXPECT_TRUE(entry.hasAccountTxnID());
125 }
126
127 {
128 auto const& expected = regularKeyValue;
129 auto const actualOpt = entry.getRegularKey();
130 ASSERT_TRUE(actualOpt.has_value());
131 expectEqualField(expected, *actualOpt, "sfRegularKey");
132 EXPECT_TRUE(entry.hasRegularKey());
133 }
134
135 {
136 auto const& expected = emailHashValue;
137 auto const actualOpt = entry.getEmailHash();
138 ASSERT_TRUE(actualOpt.has_value());
139 expectEqualField(expected, *actualOpt, "sfEmailHash");
140 EXPECT_TRUE(entry.hasEmailHash());
141 }
142
143 {
144 auto const& expected = walletLocatorValue;
145 auto const actualOpt = entry.getWalletLocator();
146 ASSERT_TRUE(actualOpt.has_value());
147 expectEqualField(expected, *actualOpt, "sfWalletLocator");
148 EXPECT_TRUE(entry.hasWalletLocator());
149 }
150
151 {
152 auto const& expected = walletSizeValue;
153 auto const actualOpt = entry.getWalletSize();
154 ASSERT_TRUE(actualOpt.has_value());
155 expectEqualField(expected, *actualOpt, "sfWalletSize");
156 EXPECT_TRUE(entry.hasWalletSize());
157 }
158
159 {
160 auto const& expected = messageKeyValue;
161 auto const actualOpt = entry.getMessageKey();
162 ASSERT_TRUE(actualOpt.has_value());
163 expectEqualField(expected, *actualOpt, "sfMessageKey");
164 EXPECT_TRUE(entry.hasMessageKey());
165 }
166
167 {
168 auto const& expected = transferRateValue;
169 auto const actualOpt = entry.getTransferRate();
170 ASSERT_TRUE(actualOpt.has_value());
171 expectEqualField(expected, *actualOpt, "sfTransferRate");
172 EXPECT_TRUE(entry.hasTransferRate());
173 }
174
175 {
176 auto const& expected = domainValue;
177 auto const actualOpt = entry.getDomain();
178 ASSERT_TRUE(actualOpt.has_value());
179 expectEqualField(expected, *actualOpt, "sfDomain");
180 EXPECT_TRUE(entry.hasDomain());
181 }
182
183 {
184 auto const& expected = tickSizeValue;
185 auto const actualOpt = entry.getTickSize();
186 ASSERT_TRUE(actualOpt.has_value());
187 expectEqualField(expected, *actualOpt, "sfTickSize");
188 EXPECT_TRUE(entry.hasTickSize());
189 }
190
191 {
192 auto const& expected = ticketCountValue;
193 auto const actualOpt = entry.getTicketCount();
194 ASSERT_TRUE(actualOpt.has_value());
195 expectEqualField(expected, *actualOpt, "sfTicketCount");
196 EXPECT_TRUE(entry.hasTicketCount());
197 }
198
199 {
200 auto const& expected = nFTokenMinterValue;
201 auto const actualOpt = entry.getNFTokenMinter();
202 ASSERT_TRUE(actualOpt.has_value());
203 expectEqualField(expected, *actualOpt, "sfNFTokenMinter");
204 EXPECT_TRUE(entry.hasNFTokenMinter());
205 }
206
207 {
208 auto const& expected = mintedNFTokensValue;
209 auto const actualOpt = entry.getMintedNFTokens();
210 ASSERT_TRUE(actualOpt.has_value());
211 expectEqualField(expected, *actualOpt, "sfMintedNFTokens");
212 EXPECT_TRUE(entry.hasMintedNFTokens());
213 }
214
215 {
216 auto const& expected = burnedNFTokensValue;
217 auto const actualOpt = entry.getBurnedNFTokens();
218 ASSERT_TRUE(actualOpt.has_value());
219 expectEqualField(expected, *actualOpt, "sfBurnedNFTokens");
220 EXPECT_TRUE(entry.hasBurnedNFTokens());
221 }
222
223 {
224 auto const& expected = firstNFTokenSequenceValue;
225 auto const actualOpt = entry.getFirstNFTokenSequence();
226 ASSERT_TRUE(actualOpt.has_value());
227 expectEqualField(expected, *actualOpt, "sfFirstNFTokenSequence");
228 EXPECT_TRUE(entry.hasFirstNFTokenSequence());
229 }
230
231 {
232 auto const& expected = aMMIDValue;
233 auto const actualOpt = entry.getAMMID();
234 ASSERT_TRUE(actualOpt.has_value());
235 expectEqualField(expected, *actualOpt, "sfAMMID");
236 EXPECT_TRUE(entry.hasAMMID());
237 }
238
239 {
240 auto const& expected = vaultIDValue;
241 auto const actualOpt = entry.getVaultID();
242 ASSERT_TRUE(actualOpt.has_value());
243 expectEqualField(expected, *actualOpt, "sfVaultID");
244 EXPECT_TRUE(entry.hasVaultID());
245 }
246
247 {
248 auto const& expected = loanBrokerIDValue;
249 auto const actualOpt = entry.getLoanBrokerID();
250 ASSERT_TRUE(actualOpt.has_value());
251 expectEqualField(expected, *actualOpt, "sfLoanBrokerID");
252 EXPECT_TRUE(entry.hasLoanBrokerID());
253 }
254
255 EXPECT_TRUE(entry.hasLedgerIndex());
256 auto const ledgerIndex = entry.getLedgerIndex();
257 ASSERT_TRUE(ledgerIndex.has_value());
258 EXPECT_EQ(*ledgerIndex, index);
259 EXPECT_EQ(entry.getKey(), index);
260}
261
262// 2 & 4) Start from an SLE, set fields directly on it, construct a builder
263// from that SLE, build a new wrapper, and verify all fields (and validate()).
264TEST(AccountRootTests, BuilderFromSleRoundTrip)
265{
266 uint256 const index{2u};
267
268 auto const accountValue = canonical_ACCOUNT();
269 auto const sequenceValue = canonical_UINT32();
270 auto const balanceValue = canonical_AMOUNT();
271 auto const ownerCountValue = canonical_UINT32();
272 auto const previousTxnIDValue = canonical_UINT256();
273 auto const previousTxnLgrSeqValue = canonical_UINT32();
274 auto const accountTxnIDValue = canonical_UINT256();
275 auto const regularKeyValue = canonical_ACCOUNT();
276 auto const emailHashValue = canonical_UINT128();
277 auto const walletLocatorValue = canonical_UINT256();
278 auto const walletSizeValue = canonical_UINT32();
279 auto const messageKeyValue = canonical_VL();
280 auto const transferRateValue = canonical_UINT32();
281 auto const domainValue = canonical_VL();
282 auto const tickSizeValue = canonical_UINT8();
283 auto const ticketCountValue = canonical_UINT32();
284 auto const nFTokenMinterValue = canonical_ACCOUNT();
285 auto const mintedNFTokensValue = canonical_UINT32();
286 auto const burnedNFTokensValue = canonical_UINT32();
287 auto const firstNFTokenSequenceValue = canonical_UINT32();
288 auto const aMMIDValue = canonical_UINT256();
289 auto const vaultIDValue = canonical_UINT256();
290 auto const loanBrokerIDValue = canonical_UINT256();
291
293
294 sle->at(sfAccount) = accountValue;
295 sle->at(sfSequence) = sequenceValue;
296 sle->at(sfBalance) = balanceValue;
297 sle->at(sfOwnerCount) = ownerCountValue;
298 sle->at(sfPreviousTxnID) = previousTxnIDValue;
299 sle->at(sfPreviousTxnLgrSeq) = previousTxnLgrSeqValue;
300 sle->at(sfAccountTxnID) = accountTxnIDValue;
301 sle->at(sfRegularKey) = regularKeyValue;
302 sle->at(sfEmailHash) = emailHashValue;
303 sle->at(sfWalletLocator) = walletLocatorValue;
304 sle->at(sfWalletSize) = walletSizeValue;
305 sle->at(sfMessageKey) = messageKeyValue;
306 sle->at(sfTransferRate) = transferRateValue;
307 sle->at(sfDomain) = domainValue;
308 sle->at(sfTickSize) = tickSizeValue;
309 sle->at(sfTicketCount) = ticketCountValue;
310 sle->at(sfNFTokenMinter) = nFTokenMinterValue;
311 sle->at(sfMintedNFTokens) = mintedNFTokensValue;
312 sle->at(sfBurnedNFTokens) = burnedNFTokensValue;
313 sle->at(sfFirstNFTokenSequence) = firstNFTokenSequenceValue;
314 sle->at(sfAMMID) = aMMIDValue;
315 sle->at(sfVaultID) = vaultIDValue;
316 sle->at(sfLoanBrokerID) = loanBrokerIDValue;
317
318 AccountRootBuilder builderFromSle{sle};
319 EXPECT_TRUE(builderFromSle.validate());
320
321 auto const entryFromBuilder = builderFromSle.build(index);
322
323 AccountRoot entryFromSle{sle};
324 EXPECT_TRUE(entryFromBuilder.validate());
325 EXPECT_TRUE(entryFromSle.validate());
326
327 {
328 auto const& expected = accountValue;
329
330 auto const fromSle = entryFromSle.getAccount();
331 auto const fromBuilder = entryFromBuilder.getAccount();
332
333 expectEqualField(expected, fromSle, "sfAccount");
334 expectEqualField(expected, fromBuilder, "sfAccount");
335 }
336
337 {
338 auto const& expected = sequenceValue;
339
340 auto const fromSle = entryFromSle.getSequence();
341 auto const fromBuilder = entryFromBuilder.getSequence();
342
343 expectEqualField(expected, fromSle, "sfSequence");
344 expectEqualField(expected, fromBuilder, "sfSequence");
345 }
346
347 {
348 auto const& expected = balanceValue;
349
350 auto const fromSle = entryFromSle.getBalance();
351 auto const fromBuilder = entryFromBuilder.getBalance();
352
353 expectEqualField(expected, fromSle, "sfBalance");
354 expectEqualField(expected, fromBuilder, "sfBalance");
355 }
356
357 {
358 auto const& expected = ownerCountValue;
359
360 auto const fromSle = entryFromSle.getOwnerCount();
361 auto const fromBuilder = entryFromBuilder.getOwnerCount();
362
363 expectEqualField(expected, fromSle, "sfOwnerCount");
364 expectEqualField(expected, fromBuilder, "sfOwnerCount");
365 }
366
367 {
368 auto const& expected = previousTxnIDValue;
369
370 auto const fromSle = entryFromSle.getPreviousTxnID();
371 auto const fromBuilder = entryFromBuilder.getPreviousTxnID();
372
373 expectEqualField(expected, fromSle, "sfPreviousTxnID");
374 expectEqualField(expected, fromBuilder, "sfPreviousTxnID");
375 }
376
377 {
378 auto const& expected = previousTxnLgrSeqValue;
379
380 auto const fromSle = entryFromSle.getPreviousTxnLgrSeq();
381 auto const fromBuilder = entryFromBuilder.getPreviousTxnLgrSeq();
382
383 expectEqualField(expected, fromSle, "sfPreviousTxnLgrSeq");
384 expectEqualField(expected, fromBuilder, "sfPreviousTxnLgrSeq");
385 }
386
387 {
388 auto const& expected = accountTxnIDValue;
389
390 auto const fromSleOpt = entryFromSle.getAccountTxnID();
391 auto const fromBuilderOpt = entryFromBuilder.getAccountTxnID();
392
393 ASSERT_TRUE(fromSleOpt.has_value());
394 ASSERT_TRUE(fromBuilderOpt.has_value());
395
396 expectEqualField(expected, *fromSleOpt, "sfAccountTxnID");
397 expectEqualField(expected, *fromBuilderOpt, "sfAccountTxnID");
398 }
399
400 {
401 auto const& expected = regularKeyValue;
402
403 auto const fromSleOpt = entryFromSle.getRegularKey();
404 auto const fromBuilderOpt = entryFromBuilder.getRegularKey();
405
406 ASSERT_TRUE(fromSleOpt.has_value());
407 ASSERT_TRUE(fromBuilderOpt.has_value());
408
409 expectEqualField(expected, *fromSleOpt, "sfRegularKey");
410 expectEqualField(expected, *fromBuilderOpt, "sfRegularKey");
411 }
412
413 {
414 auto const& expected = emailHashValue;
415
416 auto const fromSleOpt = entryFromSle.getEmailHash();
417 auto const fromBuilderOpt = entryFromBuilder.getEmailHash();
418
419 ASSERT_TRUE(fromSleOpt.has_value());
420 ASSERT_TRUE(fromBuilderOpt.has_value());
421
422 expectEqualField(expected, *fromSleOpt, "sfEmailHash");
423 expectEqualField(expected, *fromBuilderOpt, "sfEmailHash");
424 }
425
426 {
427 auto const& expected = walletLocatorValue;
428
429 auto const fromSleOpt = entryFromSle.getWalletLocator();
430 auto const fromBuilderOpt = entryFromBuilder.getWalletLocator();
431
432 ASSERT_TRUE(fromSleOpt.has_value());
433 ASSERT_TRUE(fromBuilderOpt.has_value());
434
435 expectEqualField(expected, *fromSleOpt, "sfWalletLocator");
436 expectEqualField(expected, *fromBuilderOpt, "sfWalletLocator");
437 }
438
439 {
440 auto const& expected = walletSizeValue;
441
442 auto const fromSleOpt = entryFromSle.getWalletSize();
443 auto const fromBuilderOpt = entryFromBuilder.getWalletSize();
444
445 ASSERT_TRUE(fromSleOpt.has_value());
446 ASSERT_TRUE(fromBuilderOpt.has_value());
447
448 expectEqualField(expected, *fromSleOpt, "sfWalletSize");
449 expectEqualField(expected, *fromBuilderOpt, "sfWalletSize");
450 }
451
452 {
453 auto const& expected = messageKeyValue;
454
455 auto const fromSleOpt = entryFromSle.getMessageKey();
456 auto const fromBuilderOpt = entryFromBuilder.getMessageKey();
457
458 ASSERT_TRUE(fromSleOpt.has_value());
459 ASSERT_TRUE(fromBuilderOpt.has_value());
460
461 expectEqualField(expected, *fromSleOpt, "sfMessageKey");
462 expectEqualField(expected, *fromBuilderOpt, "sfMessageKey");
463 }
464
465 {
466 auto const& expected = transferRateValue;
467
468 auto const fromSleOpt = entryFromSle.getTransferRate();
469 auto const fromBuilderOpt = entryFromBuilder.getTransferRate();
470
471 ASSERT_TRUE(fromSleOpt.has_value());
472 ASSERT_TRUE(fromBuilderOpt.has_value());
473
474 expectEqualField(expected, *fromSleOpt, "sfTransferRate");
475 expectEqualField(expected, *fromBuilderOpt, "sfTransferRate");
476 }
477
478 {
479 auto const& expected = domainValue;
480
481 auto const fromSleOpt = entryFromSle.getDomain();
482 auto const fromBuilderOpt = entryFromBuilder.getDomain();
483
484 ASSERT_TRUE(fromSleOpt.has_value());
485 ASSERT_TRUE(fromBuilderOpt.has_value());
486
487 expectEqualField(expected, *fromSleOpt, "sfDomain");
488 expectEqualField(expected, *fromBuilderOpt, "sfDomain");
489 }
490
491 {
492 auto const& expected = tickSizeValue;
493
494 auto const fromSleOpt = entryFromSle.getTickSize();
495 auto const fromBuilderOpt = entryFromBuilder.getTickSize();
496
497 ASSERT_TRUE(fromSleOpt.has_value());
498 ASSERT_TRUE(fromBuilderOpt.has_value());
499
500 expectEqualField(expected, *fromSleOpt, "sfTickSize");
501 expectEqualField(expected, *fromBuilderOpt, "sfTickSize");
502 }
503
504 {
505 auto const& expected = ticketCountValue;
506
507 auto const fromSleOpt = entryFromSle.getTicketCount();
508 auto const fromBuilderOpt = entryFromBuilder.getTicketCount();
509
510 ASSERT_TRUE(fromSleOpt.has_value());
511 ASSERT_TRUE(fromBuilderOpt.has_value());
512
513 expectEqualField(expected, *fromSleOpt, "sfTicketCount");
514 expectEqualField(expected, *fromBuilderOpt, "sfTicketCount");
515 }
516
517 {
518 auto const& expected = nFTokenMinterValue;
519
520 auto const fromSleOpt = entryFromSle.getNFTokenMinter();
521 auto const fromBuilderOpt = entryFromBuilder.getNFTokenMinter();
522
523 ASSERT_TRUE(fromSleOpt.has_value());
524 ASSERT_TRUE(fromBuilderOpt.has_value());
525
526 expectEqualField(expected, *fromSleOpt, "sfNFTokenMinter");
527 expectEqualField(expected, *fromBuilderOpt, "sfNFTokenMinter");
528 }
529
530 {
531 auto const& expected = mintedNFTokensValue;
532
533 auto const fromSleOpt = entryFromSle.getMintedNFTokens();
534 auto const fromBuilderOpt = entryFromBuilder.getMintedNFTokens();
535
536 ASSERT_TRUE(fromSleOpt.has_value());
537 ASSERT_TRUE(fromBuilderOpt.has_value());
538
539 expectEqualField(expected, *fromSleOpt, "sfMintedNFTokens");
540 expectEqualField(expected, *fromBuilderOpt, "sfMintedNFTokens");
541 }
542
543 {
544 auto const& expected = burnedNFTokensValue;
545
546 auto const fromSleOpt = entryFromSle.getBurnedNFTokens();
547 auto const fromBuilderOpt = entryFromBuilder.getBurnedNFTokens();
548
549 ASSERT_TRUE(fromSleOpt.has_value());
550 ASSERT_TRUE(fromBuilderOpt.has_value());
551
552 expectEqualField(expected, *fromSleOpt, "sfBurnedNFTokens");
553 expectEqualField(expected, *fromBuilderOpt, "sfBurnedNFTokens");
554 }
555
556 {
557 auto const& expected = firstNFTokenSequenceValue;
558
559 auto const fromSleOpt = entryFromSle.getFirstNFTokenSequence();
560 auto const fromBuilderOpt = entryFromBuilder.getFirstNFTokenSequence();
561
562 ASSERT_TRUE(fromSleOpt.has_value());
563 ASSERT_TRUE(fromBuilderOpt.has_value());
564
565 expectEqualField(expected, *fromSleOpt, "sfFirstNFTokenSequence");
566 expectEqualField(expected, *fromBuilderOpt, "sfFirstNFTokenSequence");
567 }
568
569 {
570 auto const& expected = aMMIDValue;
571
572 auto const fromSleOpt = entryFromSle.getAMMID();
573 auto const fromBuilderOpt = entryFromBuilder.getAMMID();
574
575 ASSERT_TRUE(fromSleOpt.has_value());
576 ASSERT_TRUE(fromBuilderOpt.has_value());
577
578 expectEqualField(expected, *fromSleOpt, "sfAMMID");
579 expectEqualField(expected, *fromBuilderOpt, "sfAMMID");
580 }
581
582 {
583 auto const& expected = vaultIDValue;
584
585 auto const fromSleOpt = entryFromSle.getVaultID();
586 auto const fromBuilderOpt = entryFromBuilder.getVaultID();
587
588 ASSERT_TRUE(fromSleOpt.has_value());
589 ASSERT_TRUE(fromBuilderOpt.has_value());
590
591 expectEqualField(expected, *fromSleOpt, "sfVaultID");
592 expectEqualField(expected, *fromBuilderOpt, "sfVaultID");
593 }
594
595 {
596 auto const& expected = loanBrokerIDValue;
597
598 auto const fromSleOpt = entryFromSle.getLoanBrokerID();
599 auto const fromBuilderOpt = entryFromBuilder.getLoanBrokerID();
600
601 ASSERT_TRUE(fromSleOpt.has_value());
602 ASSERT_TRUE(fromBuilderOpt.has_value());
603
604 expectEqualField(expected, *fromSleOpt, "sfLoanBrokerID");
605 expectEqualField(expected, *fromBuilderOpt, "sfLoanBrokerID");
606 }
607
608 EXPECT_EQ(entryFromSle.getKey(), index);
609 EXPECT_EQ(entryFromBuilder.getKey(), index);
610}
611
612// 3) Verify wrapper throws when constructed from wrong ledger entry type.
613TEST(AccountRootTests, WrapperThrowsOnWrongEntryType)
614{
615 uint256 const index{3u};
616
617 // Build a valid ledger entry of a different type
618 // Ticket requires: Account, OwnerNode, TicketSequence, PreviousTxnID, PreviousTxnLgrSeq
619 // Check requires: Account, Destination, SendMax, Sequence, OwnerNode, DestinationNode, PreviousTxnID, PreviousTxnLgrSeq
620 TicketBuilder wrongBuilder{
626 auto wrongEntry = wrongBuilder.build(index);
627
628 EXPECT_THROW(AccountRoot{wrongEntry.getSle()}, std::runtime_error);
629}
630
631// 4) Verify builder throws when constructed from wrong ledger entry type.
632TEST(AccountRootTests, BuilderThrowsOnWrongEntryType)
633{
634 uint256 const index{4u};
635
636 // Build a valid ledger entry of a different type
637 TicketBuilder wrongBuilder{
643 auto wrongEntry = wrongBuilder.build(index);
644
645 EXPECT_THROW(AccountRootBuilder{wrongEntry.getSle()}, std::runtime_error);
646}
647
648// 5) Build with only required fields and verify optional fields return nullopt.
649TEST(AccountRootTests, OptionalFieldsReturnNullopt)
650{
651 uint256 const index{3u};
652
653 auto const accountValue = canonical_ACCOUNT();
654 auto const sequenceValue = canonical_UINT32();
655 auto const balanceValue = canonical_AMOUNT();
656 auto const ownerCountValue = canonical_UINT32();
657 auto const previousTxnIDValue = canonical_UINT256();
658 auto const previousTxnLgrSeqValue = canonical_UINT32();
659
660 AccountRootBuilder builder{
661 accountValue,
662 sequenceValue,
663 balanceValue,
664 ownerCountValue,
665 previousTxnIDValue,
666 previousTxnLgrSeqValue
667 };
668
669 auto const entry = builder.build(index);
670
671 // Verify optional fields are not present
672 EXPECT_FALSE(entry.hasAccountTxnID());
673 EXPECT_FALSE(entry.getAccountTxnID().has_value());
674 EXPECT_FALSE(entry.hasRegularKey());
675 EXPECT_FALSE(entry.getRegularKey().has_value());
676 EXPECT_FALSE(entry.hasEmailHash());
677 EXPECT_FALSE(entry.getEmailHash().has_value());
678 EXPECT_FALSE(entry.hasWalletLocator());
679 EXPECT_FALSE(entry.getWalletLocator().has_value());
680 EXPECT_FALSE(entry.hasWalletSize());
681 EXPECT_FALSE(entry.getWalletSize().has_value());
682 EXPECT_FALSE(entry.hasMessageKey());
683 EXPECT_FALSE(entry.getMessageKey().has_value());
684 EXPECT_FALSE(entry.hasTransferRate());
685 EXPECT_FALSE(entry.getTransferRate().has_value());
686 EXPECT_FALSE(entry.hasDomain());
687 EXPECT_FALSE(entry.getDomain().has_value());
688 EXPECT_FALSE(entry.hasTickSize());
689 EXPECT_FALSE(entry.getTickSize().has_value());
690 EXPECT_FALSE(entry.hasTicketCount());
691 EXPECT_FALSE(entry.getTicketCount().has_value());
692 EXPECT_FALSE(entry.hasNFTokenMinter());
693 EXPECT_FALSE(entry.getNFTokenMinter().has_value());
694 EXPECT_FALSE(entry.hasMintedNFTokens());
695 EXPECT_FALSE(entry.getMintedNFTokens().has_value());
696 EXPECT_FALSE(entry.hasBurnedNFTokens());
697 EXPECT_FALSE(entry.getBurnedNFTokens().has_value());
698 EXPECT_FALSE(entry.hasFirstNFTokenSequence());
699 EXPECT_FALSE(entry.getFirstNFTokenSequence().has_value());
700 EXPECT_FALSE(entry.hasAMMID());
701 EXPECT_FALSE(entry.getAMMID().has_value());
702 EXPECT_FALSE(entry.hasVaultID());
703 EXPECT_FALSE(entry.getVaultID().has_value());
704 EXPECT_FALSE(entry.hasLoanBrokerID());
705 EXPECT_FALSE(entry.getLoanBrokerID().has_value());
706}
707}
Builder for AccountRoot ledger entries.
AccountRootBuilder & setMintedNFTokens(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfMintedNFTokens (soeDEFAULT)
AccountRootBuilder & setAccountTxnID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfAccountTxnID (soeOPTIONAL)
AccountRootBuilder & setNFTokenMinter(std::decay_t< typename SF_ACCOUNT::type::value_type > const &value)
Set sfNFTokenMinter (soeOPTIONAL)
AccountRootBuilder & setMessageKey(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfMessageKey (soeOPTIONAL)
AccountRootBuilder & setTickSize(std::decay_t< typename SF_UINT8::type::value_type > const &value)
Set sfTickSize (soeOPTIONAL)
AccountRootBuilder & setBurnedNFTokens(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfBurnedNFTokens (soeDEFAULT)
AccountRootBuilder & setTransferRate(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfTransferRate (soeOPTIONAL)
AccountRootBuilder & setFirstNFTokenSequence(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfFirstNFTokenSequence (soeOPTIONAL)
AccountRootBuilder & setRegularKey(std::decay_t< typename SF_ACCOUNT::type::value_type > const &value)
Set sfRegularKey (soeOPTIONAL)
AccountRootBuilder & setWalletSize(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfWalletSize (soeOPTIONAL)
AccountRootBuilder & setAMMID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfAMMID (soeOPTIONAL)
AccountRootBuilder & setLoanBrokerID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfLoanBrokerID (soeOPTIONAL)
AccountRootBuilder & setEmailHash(std::decay_t< typename SF_UINT128::type::value_type > const &value)
Set sfEmailHash (soeOPTIONAL)
AccountRootBuilder & setTicketCount(std::decay_t< typename SF_UINT32::type::value_type > const &value)
Set sfTicketCount (soeOPTIONAL)
AccountRootBuilder & setDomain(std::decay_t< typename SF_VL::type::value_type > const &value)
Set sfDomain (soeOPTIONAL)
AccountRootBuilder & setVaultID(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfVaultID (soeOPTIONAL)
AccountRootBuilder & setWalletLocator(std::decay_t< typename SF_UINT256::type::value_type > const &value)
Set sfWalletLocator (soeOPTIONAL)
Ledger Entry: AccountRoot.
Definition AccountRoot.h:28
static constexpr LedgerEntryType entryType
Definition AccountRoot.h:30
std::shared_ptr< SLE const > getSle() const
Get the underlying SLE object.
Derived & setLedgerIndex(uint256 const &value)
Set the ledger index.
Derived & setFlags(uint32_t value)
Set the flags.
Builder for Ticket ledger entries.
Definition Ticket.h:112
T is_same_v
TEST(AccountRootTests, BuilderSettersRoundTrip)
void expectEqualField(T const &expected, T const &actual, char const *fieldName)