@@ -100,32 +100,41 @@ class LoanBroker_test : public beast::unit_test::suite
100100 jtx::Account const & alice,
101101 jtx::Account const & evan,
102102 VaultInfo const & vault,
103- std::function<void ( )> createBroker ,
104- std::function<void (SLE::const_ref broker )> checkBroker,
105- std::function<void (SLE::const_ref broker )> changeBroker,
106- std::function<void (SLE::const_ref broker )> checkChangedBroker)
103+ std::function<jtx::JTx(jtx::JTx const & )> modifyJTx ,
104+ std::function<void (SLE::const_ref)> checkBroker,
105+ std::function<void (SLE::const_ref)> changeBroker,
106+ std::function<void (SLE::const_ref)> checkChangedBroker)
107107 {
108108 auto const keylet = keylet::loanbroker (alice.id (), env.seq (alice));
109+ testcase (" Lifecycle: " + to_string (vault.asset ));
109110
110111 using namespace jtx ;
111112 using namespace loanBroker ;
112113
113- createBroker ();
114+ {
115+ // Start with default values
116+ auto jtx = env.jt (set (alice, vault.vaultID ), fee (increment));
117+ // Modify as desired
118+ if (modifyJTx)
119+ jtx = modifyJTx (jtx);
120+ // Successfully create a Loan Broker
121+ env (jtx);
122+ }
123+
114124 env.close ();
115125 if (auto broker = env.le (keylet); BEAST_EXPECT (broker))
116126 {
127+ log << to_string (broker->getJson ()) << std::endl;
117128 BEAST_EXPECT (broker->at (sfVaultID) == vault.vaultID );
118129 BEAST_EXPECT (broker->at (sfAccount) != alice.id ());
119130 BEAST_EXPECT (broker->at (sfOwner) == alice.id ());
120131 BEAST_EXPECT (broker->at (sfFlags) == 0 );
121132 BEAST_EXPECT (broker->at (sfSequence) == env.seq (alice) - 1 );
122133 BEAST_EXPECT (broker->at (sfOwnerCount) == 0 );
123134 BEAST_EXPECT (broker->at (sfDebtTotal) == 0 );
124- BEAST_EXPECT (broker->at (sfDebtMaximum) == 0 );
125135 BEAST_EXPECT (broker->at (sfCoverAvailable) == 0 );
126- BEAST_EXPECT (broker->at (sfCoverRateMinimum) == 0 );
127- BEAST_EXPECT (broker->at (sfCoverRateLiquidation) == 0 );
128- checkBroker (broker);
136+ if (checkBroker)
137+ checkBroker (broker);
129138
130139 // Load the pseudo-account
131140 auto const pseudoKeylet = keylet::account (broker->at (sfAccount));
@@ -162,13 +171,28 @@ class LoanBroker_test : public beast::unit_test::suite
162171 env (set (alice, vault.vaultID ), loanBrokerID (keylet.key ));
163172
164173 // Make modifications to the broker
165- changeBroker (broker);
174+ if (changeBroker)
175+ changeBroker (broker);
166176
167177 env.close ();
168178 broker = env.le (keylet);
169179
170180 // Check the results of modifications
171- checkChangedBroker (broker);
181+ if (checkChangedBroker)
182+ checkChangedBroker (broker);
183+
184+ // Verify that fields get removed when set to default values
185+ // Debt maximum: explicit 0
186+ // Data: explicit empty
187+ env (set (alice, vault.vaultID ),
188+ loanBrokerID (broker->key ()),
189+ debtMaximum (Number (0 )),
190+ data (" " ));
191+
192+ // Check the updated fields
193+ broker = env.le (keylet);
194+ BEAST_EXPECT (!broker->isFieldPresent (sfDebtMaximum));
195+ BEAST_EXPECT (!broker->isFieldPresent (sfData));
172196
173197 // ///////////////////////////////////
174198 // try to delete the wrong broker object
@@ -320,23 +344,25 @@ class LoanBroker_test : public beast::unit_test::suite
320344 fee (increment),
321345 ter (temINVALID));
322346
347+ std::string testData;
323348 lifecycle (
324349 env,
325350 alice,
326351 evan,
327352 vault,
328- [&]() {
329- // Successfully create a Loan Broker with all default
330- // values.
331- env (set (alice, vault.vaultID ), fee (increment));
332- },
353+ // No modifications
354+ {},
333355 [&](SLE::const_ref broker) {
334356 // Extra checks
335357 BEAST_EXPECT (!broker->isFieldPresent (sfManagementFeeRate));
336358 BEAST_EXPECT (!broker->isFieldPresent (sfCoverRateMinimum));
337359 BEAST_EXPECT (
338360 !broker->isFieldPresent (sfCoverRateLiquidation));
339361 BEAST_EXPECT (!broker->isFieldPresent (sfData));
362+ BEAST_EXPECT (!broker->isFieldPresent (sfDebtMaximum));
363+ BEAST_EXPECT (broker->at (sfDebtMaximum) == 0 );
364+ BEAST_EXPECT (broker->at (sfCoverRateMinimum) == 0 );
365+ BEAST_EXPECT (broker->at (sfCoverRateLiquidation) == 0 );
340366 },
341367 [&](SLE::const_ref broker) {
342368 // Modifications
@@ -375,19 +401,13 @@ class LoanBroker_test : public beast::unit_test::suite
375401 ter (temINVALID));
376402
377403 // fields that can be changed
378- std::string const testData ( " Test Data 1234" ) ;
404+ testData = " Test Data 1234" ;
379405 // Bad data: too long
380406 env (set (alice, vault.vaultID ),
381407 loanBrokerID (broker->key ()),
382408 data (std::string (maxDataPayloadLength + 1 , ' W' )),
383409 ter (temINVALID));
384- // Debt maximum: explicit 0
385- env (set (alice, vault.vaultID ),
386- loanBrokerID (broker->key ()),
387- debtMaximum (Number (0 )));
388- // Check the updated fields
389- broker = env.le (broker->key ());
390- BEAST_EXPECT (!broker->isFieldPresent (sfDebtMaximum));
410+
391411 // Bad debt maximum
392412 env (set (alice, vault.vaultID ),
393413 loanBrokerID (broker->key ()),
@@ -410,30 +430,30 @@ class LoanBroker_test : public beast::unit_test::suite
410430 alice,
411431 evan,
412432 vault,
413- [&]() {
414- std::string const testData2 ( " spam spam spam spam" ) ;
433+ [&](jtx::JTx const & jv ) {
434+ testData = " spam spam spam spam" ;
415435 // Finally, create another Loan Broker with none of the
416436 // values at default
417- env (set (alice, vault.vaultID ),
418- data (testData2),
437+ return env.jt (
438+ jv,
439+ data (testData),
419440 managementFeeRate (123 ),
420441 debtMaximum (Number (9 )),
421442 coverRateMinimum (100 ),
422- coverRateLiquidation (200 ),
423- fee (increment));
443+ coverRateLiquidation (200 ));
424444 },
425445 [&](SLE::const_ref broker) {
426446 // Extra checks
427447 BEAST_EXPECT (broker->at (sfManagementFeeRate) == 123 );
428448 BEAST_EXPECT (broker->at (sfCoverRateMinimum) == 100 );
429449 BEAST_EXPECT (broker->at (sfCoverRateLiquidation) == 200 );
430450 BEAST_EXPECT (broker->at (sfDebtMaximum) == Number (9 ));
431- BEAST_EXPECT (checkVL (broker->at (sfData), testData2 ));
451+ BEAST_EXPECT (checkVL (broker->at (sfData), testData ));
432452 },
433453 [&](SLE::const_ref broker) {
434454 // Reset Data & Debt maximum to default values
435455 env (set (alice, vault.vaultID ),
436- loanBrokerID (keylet. key ),
456+ loanBrokerID (broker-> key () ),
437457 data (" " ),
438458 debtMaximum (Number (0 )));
439459 },
0 commit comments