accounting_tests.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // ECOin - Copyright (c) - 2014/2021 - GPLv3 - epsylon@riseup.net (https://03c8.net)
  2. #include <boost/test/unit_test.hpp>
  3. #include <boost/foreach.hpp>
  4. #include "init.h"
  5. #include "wallet.h"
  6. #include "walletdb.h"
  7. BOOST_AUTO_TEST_SUITE(accounting_tests)
  8. static void
  9. GetResults(CWalletDB& walletdb, std::map<int64, CAccountingEntry>& results)
  10. {
  11. std::list<CAccountingEntry> aes;
  12. results.clear();
  13. BOOST_CHECK(walletdb.ReorderTransactions(pwalletMain) == DB_LOAD_OK);
  14. walletdb.ListAccountCreditDebit("", aes);
  15. BOOST_FOREACH(CAccountingEntry& ae, aes)
  16. {
  17. results[ae.nOrderPos] = ae;
  18. }
  19. }
  20. BOOST_AUTO_TEST_CASE(acc_orderupgrade)
  21. {
  22. CWalletDB walletdb(pwalletMain->strWalletFile);
  23. std::vector<CWalletTx*> vpwtx;
  24. CWalletTx wtx;
  25. CAccountingEntry ae;
  26. std::map<int64, CAccountingEntry> results;
  27. ae.strAccount = "";
  28. ae.nCreditDebit = 1;
  29. ae.nTime = 1333333333;
  30. ae.strOtherAccount = "b";
  31. ae.strComment = "";
  32. walletdb.WriteAccountingEntry(ae);
  33. wtx.mapValue["comment"] = "z";
  34. pwalletMain->AddToWallet(wtx);
  35. vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
  36. vpwtx[0]->nTimeReceived = (unsigned int)1333333335;
  37. vpwtx[0]->nOrderPos = -1;
  38. ae.nTime = 1333333336;
  39. ae.strOtherAccount = "c";
  40. walletdb.WriteAccountingEntry(ae);
  41. GetResults(walletdb, results);
  42. BOOST_CHECK(pwalletMain->nOrderPosNext == 3);
  43. BOOST_CHECK(2 == results.size());
  44. BOOST_CHECK(results[0].nTime == 1333333333);
  45. BOOST_CHECK(results[0].strComment.empty());
  46. BOOST_CHECK(1 == vpwtx[0]->nOrderPos);
  47. BOOST_CHECK(results[2].nTime == 1333333336);
  48. BOOST_CHECK(results[2].strOtherAccount == "c");
  49. ae.nTime = 1333333330;
  50. ae.strOtherAccount = "d";
  51. ae.nOrderPos = pwalletMain->IncOrderPosNext();
  52. walletdb.WriteAccountingEntry(ae);
  53. GetResults(walletdb, results);
  54. BOOST_CHECK(results.size() == 3);
  55. BOOST_CHECK(pwalletMain->nOrderPosNext == 4);
  56. BOOST_CHECK(results[0].nTime == 1333333333);
  57. BOOST_CHECK(1 == vpwtx[0]->nOrderPos);
  58. BOOST_CHECK(results[2].nTime == 1333333336);
  59. BOOST_CHECK(results[3].nTime == 1333333330);
  60. BOOST_CHECK(results[3].strComment.empty());
  61. wtx.mapValue["comment"] = "y";
  62. --wtx.nLockTime; // Just to change the hash :)
  63. pwalletMain->AddToWallet(wtx);
  64. vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
  65. vpwtx[1]->nTimeReceived = (unsigned int)1333333336;
  66. wtx.mapValue["comment"] = "x";
  67. --wtx.nLockTime; // Just to change the hash :)
  68. pwalletMain->AddToWallet(wtx);
  69. vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
  70. vpwtx[2]->nTimeReceived = (unsigned int)1333333329;
  71. vpwtx[2]->nOrderPos = -1;
  72. GetResults(walletdb, results);
  73. BOOST_CHECK(results.size() == 3);
  74. BOOST_CHECK(pwalletMain->nOrderPosNext == 6);
  75. BOOST_CHECK(0 == vpwtx[2]->nOrderPos);
  76. BOOST_CHECK(results[1].nTime == 1333333333);
  77. BOOST_CHECK(2 == vpwtx[0]->nOrderPos);
  78. BOOST_CHECK(results[3].nTime == 1333333336);
  79. BOOST_CHECK(results[4].nTime == 1333333330);
  80. BOOST_CHECK(results[4].strComment.empty());
  81. BOOST_CHECK(5 == vpwtx[1]->nOrderPos);
  82. ae.nTime = 1333333334;
  83. ae.strOtherAccount = "e";
  84. ae.nOrderPos = -1;
  85. walletdb.WriteAccountingEntry(ae);
  86. GetResults(walletdb, results);
  87. BOOST_CHECK(results.size() == 4);
  88. BOOST_CHECK(pwalletMain->nOrderPosNext == 7);
  89. BOOST_CHECK(0 == vpwtx[2]->nOrderPos);
  90. BOOST_CHECK(results[1].nTime == 1333333333);
  91. BOOST_CHECK(2 == vpwtx[0]->nOrderPos);
  92. BOOST_CHECK(results[3].nTime == 1333333336);
  93. BOOST_CHECK(results[3].strComment.empty());
  94. BOOST_CHECK(results[4].nTime == 1333333330);
  95. BOOST_CHECK(results[4].strComment.empty());
  96. BOOST_CHECK(results[5].nTime == 1333333334);
  97. BOOST_CHECK(6 == vpwtx[1]->nOrderPos);
  98. }
  99. BOOST_AUTO_TEST_SUITE_END()