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