Warning, file /office/kmymoney/kmymoney/mymoney/tests/mymoneyaccount-test.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2002-2017 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-FileCopyrightText: 2004 Kevin Tambascio <ktambascio@users.sourceforge.net>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "mymoneyaccount-test.h"
0008 
0009 #include <QTest>
0010 
0011 #define KMM_MYMONEY_UNIT_TESTABLE friend class MyMoneyAccountTest;
0012 
0013 #include "mymoneyaccount.h"
0014 #include "mymoneyaccount_p.h"
0015 #include "mymoneyaccountloan.h"
0016 #include "mymoneyenums.h"
0017 #include "mymoneyexception.h"
0018 #include "mymoneymoney.h"
0019 #include "mymoneysplit.h"
0020 
0021 QTEST_GUILESS_MAIN(MyMoneyAccountTest)
0022 
0023 void MyMoneyAccountTest::init()
0024 {
0025 }
0026 
0027 void MyMoneyAccountTest::cleanup()
0028 {
0029 }
0030 
0031 void MyMoneyAccountTest::testEmptyConstructor()
0032 {
0033     MyMoneyAccount a;
0034 
0035     QVERIFY(a.id().isEmpty());
0036     QVERIFY(a.name().isEmpty());
0037     QVERIFY(a.accountType() == eMyMoney::Account::Type::Unknown);
0038     QVERIFY(a.openingDate() == QDate());
0039     QVERIFY(a.lastModified() == QDate());
0040     QVERIFY(a.lastReconciliationDate() == QDate());
0041     QVERIFY(a.accountList().count() == 0);
0042     QVERIFY(a.balance().isZero());
0043 }
0044 
0045 void MyMoneyAccountTest::testConstructor()
0046 {
0047     QString id = "A000001";
0048     QString parent = "Parent";
0049     MyMoneyAccount r;
0050     MyMoneySplit s;
0051     r.setAccountType(eMyMoney::Account::Type::Asset);
0052     r.setOpeningDate(QDate::currentDate());
0053     r.setLastModified(QDate::currentDate());
0054     r.setDescription("Desc");
0055     r.setNumber("465500");
0056     r.setParentAccountId(parent);
0057     r.setValue(QString("key"), "value");
0058     s.setShares(MyMoneyMoney::ONE);
0059     r.adjustBalance(s);
0060     QVERIFY(r.pairs().count() == 1);
0061     QVERIFY(r.value("key") == "value");
0062 
0063     MyMoneyAccount a(id, r);
0064 
0065     QVERIFY(a.id() == id);
0066     QVERIFY(a.institutionId().isEmpty());
0067     QVERIFY(a.accountType() == eMyMoney::Account::Type::Asset);
0068     QVERIFY(a.openingDate() == QDate::currentDate());
0069     QVERIFY(a.lastModified() == QDate::currentDate());
0070     QVERIFY(a.number() == "465500");
0071     QVERIFY(a.description() == "Desc");
0072     QVERIFY(a.accountList().count() == 0);
0073     QVERIFY(a.parentAccountId() == "Parent");
0074     QVERIFY(a.balance() == MyMoneyMoney::ONE);
0075 
0076     QMap<QString, QString> copy;
0077     copy = r.pairs();
0078     QVERIFY(copy.count() == 1);
0079     QVERIFY(copy[QString("key")] == "value");
0080 }
0081 
0082 void MyMoneyAccountTest::testSetFunctions()
0083 {
0084     MyMoneyAccount a;
0085 
0086     QDate today(QDate::currentDate());
0087     QVERIFY(a.name().isEmpty());
0088     QVERIFY(a.lastModified() == QDate());
0089     QVERIFY(a.description().isEmpty());
0090 
0091     a.setName("Account");
0092     a.setInstitutionId("Institution1");
0093     a.setLastModified(today);
0094     a.setDescription("Desc");
0095     a.setNumber("123456");
0096     a.setAccountType(eMyMoney::Account::Type::MoneyMarket);
0097 
0098     QVERIFY(a.name() == "Account");
0099     QVERIFY(a.institutionId() == "Institution1");
0100     QVERIFY(a.lastModified() == today);
0101     QVERIFY(a.description() == "Desc");
0102     QVERIFY(a.number() == "123456");
0103     QVERIFY(a.accountType() == eMyMoney::Account::Type::MoneyMarket);
0104 }
0105 
0106 void MyMoneyAccountTest::testCopyConstructor()
0107 {
0108     QString id = "A000001";
0109     QString institutionid = "B000001";
0110     QString parent = "ParentAccount";
0111     MyMoneyAccount r;
0112     r.setAccountType(eMyMoney::Account::Type::Expense);
0113     r.setOpeningDate(QDate::currentDate());
0114     r.setLastModified(QDate::currentDate());
0115     r.setName("Account");
0116     r.setInstitutionId("Inst1");
0117     r.setDescription("Desc1");
0118     r.setNumber("Number");
0119     r.setParentAccountId(parent);
0120     r.setValue("Key", "Value");
0121 
0122     MyMoneyAccount a(id, r);
0123     a.setInstitutionId(institutionid);
0124 
0125     MyMoneyAccount b(a);
0126 
0127     QVERIFY(b.name() == "Account");
0128     QVERIFY(b.institutionId() == institutionid);
0129     QVERIFY(b.accountType() == eMyMoney::Account::Type::Expense);
0130     QVERIFY(b.lastModified() == QDate::currentDate());
0131     QVERIFY(b.openingDate() == QDate::currentDate());
0132     QVERIFY(b.description() == "Desc1");
0133     QVERIFY(b.number() == "Number");
0134     QVERIFY(b.parentAccountId() == "ParentAccount");
0135 
0136     QVERIFY(b.value("Key") == "Value");
0137 }
0138 
0139 void MyMoneyAccountTest::testAssignmentConstructor()
0140 {
0141     MyMoneyAccount a;
0142     a.setAccountType(eMyMoney::Account::Type::Checkings);
0143     a.setName("Account");
0144     a.setInstitutionId("Inst1");
0145     a.setDescription("Bla");
0146     a.setNumber("assigned Number");
0147     a.setValue("Key", "Value");
0148     a.addAccountId("ChildAccount");
0149 
0150     MyMoneyAccount b;
0151 
0152     b.setLastModified(QDate::currentDate());
0153 
0154     b = a;
0155 
0156     QCOMPARE(b.name(), "Account");
0157     QCOMPARE(b.institutionId(), "Inst1");
0158     QCOMPARE(b.accountType(), eMyMoney::Account::Type::Checkings);
0159     QCOMPARE(b.lastModified(), QDate());
0160     QCOMPARE(b.openingDate(), a.openingDate());
0161     QCOMPARE(b.description(), "Bla");
0162     QCOMPARE(b.number(), "assigned Number");
0163     QCOMPARE(b.value("Key"), "Value");
0164     QCOMPARE(b.accountList().count(), 1);
0165     QCOMPARE(b.accountList().at(0), "ChildAccount");
0166 
0167     MyMoneyAccountLoan c;
0168 
0169     b.setLastModified(QDate::currentDate());
0170 
0171     c = a;
0172 
0173     QCOMPARE(c.name(), "Account");
0174     QCOMPARE(c.institutionId(), "Inst1");
0175     QCOMPARE(c.accountType(), eMyMoney::Account::Type::Checkings);
0176     QCOMPARE(c.lastModified(), QDate());
0177     QCOMPARE(c.openingDate(), a.openingDate());
0178     QCOMPARE(c.description(), "Bla");
0179     QCOMPARE(c.number(), "assigned Number");
0180     QCOMPARE(c.value("Key"), "Value");
0181     QCOMPARE(c.accountList().count(), 1);
0182     QCOMPARE(c.accountList().at(0), "ChildAccount");
0183 }
0184 
0185 void MyMoneyAccountTest::testAdjustBalance()
0186 {
0187     MyMoneyAccount a;
0188     MyMoneySplit s;
0189     s.setShares(MyMoneyMoney(3, 1));
0190     a.adjustBalance(s);
0191     QVERIFY(a.balance() == MyMoneyMoney(3, 1));
0192     s.setShares(MyMoneyMoney(5, 1));
0193     a.adjustBalance(s, true);
0194     QVERIFY(a.balance() == MyMoneyMoney(-2, 1));
0195     s.setShares(MyMoneyMoney(2, 1));
0196     s.setAction(MyMoneySplit::actionName(eMyMoney::Split::Action::SplitShares));
0197     a.adjustBalance(s);
0198     QVERIFY(a.balance() == MyMoneyMoney(-4, 1));
0199     s.setShares(MyMoneyMoney(4, 1));
0200     s.setAction(QString());
0201     a.adjustBalance(s);
0202     QVERIFY(a.balance().isZero());
0203 }
0204 
0205 void MyMoneyAccountTest::testSubAccounts()
0206 {
0207     MyMoneyAccount a;
0208     a.setAccountType(eMyMoney::Account::Type::Checkings);
0209 
0210     a.addAccountId("Subaccount1");
0211     QVERIFY(a.accountList().count() == 1);
0212     a.addAccountId("Subaccount1");
0213     QVERIFY(a.accountList().count() == 1);
0214     a.addAccountId("Subaccount2");
0215     QVERIFY(a.accountList().count() == 2);
0216 
0217 }
0218 
0219 void MyMoneyAccountTest::testEquality()
0220 {
0221     MyMoneyAccount a;
0222 
0223     a.setLastModified(QDate::currentDate());
0224     a.setName("Name");
0225     a.setNumber("Number");
0226     a.setDescription("Desc");
0227     a.setInstitutionId("I-ID");
0228     a.setOpeningDate(QDate::currentDate());
0229     a.setLastReconciliationDate(QDate::currentDate());
0230     a.setAccountType(eMyMoney::Account::Type::Asset);
0231     a.setParentAccountId("P-ID");
0232     a.d_func()->setId("A-ID");
0233     a.setCurrencyId("C-ID");
0234     a.setValue("Key", "Value");
0235 
0236     MyMoneyAccount b;
0237 
0238     b = a;
0239     QVERIFY(b == a);
0240 
0241     a.setName("Noname");
0242     QVERIFY(!(b == a));
0243     b = a;
0244 
0245     a.setLastModified(QDate::currentDate().addDays(-1));
0246     QVERIFY(!(b == a));
0247     b = a;
0248 
0249     a.setNumber("Nonumber");
0250     QVERIFY(!(b == a));
0251     b = a;
0252 
0253     a.setDescription("NoDesc");
0254     QVERIFY(!(b == a));
0255     b = a;
0256 
0257     a.setInstitutionId("I-noID");
0258     QVERIFY(!(b == a));
0259     b = a;
0260 
0261     a.setOpeningDate(QDate::currentDate().addDays(-1));
0262     QVERIFY(!(b == a));
0263     b = a;
0264 
0265     a.setLastReconciliationDate(QDate::currentDate().addDays(-1));
0266     QVERIFY(!(b == a));
0267     b = a;
0268 
0269     a.setAccountType(eMyMoney::Account::Type::Liability);
0270     QVERIFY(!(b == a));
0271     b = a;
0272 
0273     a.setParentAccountId("P-noID");
0274     QVERIFY(!(b == a));
0275     b = a;
0276 
0277     a.d_func()->setId("A-noID");
0278     QVERIFY(!(b == a));
0279     b = a;
0280 
0281     a.setCurrencyId("C-noID");
0282     QVERIFY(!(b == a));
0283     b = a;
0284 
0285     a.setValue("Key", "noValue");
0286     QVERIFY(!(b == a));
0287     b = a;
0288 
0289     a.setValue("noKey", "Value");
0290     QVERIFY(!(b == a));
0291     b = a;
0292 
0293 }
0294 
0295 void MyMoneyAccountTest::testHasReferenceTo()
0296 {
0297     MyMoneyAccount a;
0298 
0299     a.setInstitutionId("I0001");
0300     a.addAccountId("A_001");
0301     a.addAccountId("A_002");
0302     a.setParentAccountId("A_Parent");
0303     a.setCurrencyId("Currency");
0304 
0305     QVERIFY(a.hasReferenceTo("I0001") == true);
0306     QVERIFY(a.hasReferenceTo("I0002") == false);
0307     QVERIFY(a.hasReferenceTo("A_001") == false);
0308     QVERIFY(a.hasReferenceTo("A_Parent") == true);
0309     QVERIFY(a.hasReferenceTo("Currency") == true);
0310 }
0311 
0312 void MyMoneyAccountTest::testSetClosed()
0313 {
0314     MyMoneyAccount a;
0315 
0316     QCOMPARE(a.isClosed(), false);
0317     a.setClosed(true);
0318     QCOMPARE(a.isClosed(), true);
0319     a.setClosed(false);
0320     QCOMPARE(a.isClosed(), false);
0321 }
0322 
0323 void MyMoneyAccountTest::specialAccountTypes_data()
0324 {
0325     QTest::addColumn<eMyMoney::Account::Type>("accountType");
0326     QTest::addColumn<bool>("incomeExpense");
0327     QTest::addColumn<bool>("assetLibility");
0328     QTest::addColumn<bool>("loan");
0329 
0330     // positive and null is debit
0331     QTest::newRow("unknown") << eMyMoney::Account::Type::Unknown << false << false << false;
0332     QTest::newRow("checking") << eMyMoney::Account::Type::Checkings << false << true << false;
0333     QTest::newRow("savings") << eMyMoney::Account::Type::Savings << false << true << false;
0334     QTest::newRow("cash") << eMyMoney::Account::Type::Cash << false << true << false;
0335     QTest::newRow("investment") << eMyMoney::Account::Type::Investment << false << true << false;
0336     QTest::newRow("asset") << eMyMoney::Account::Type::Asset << false << true << false;
0337     QTest::newRow("currency") << eMyMoney::Account::Type::Currency << false << true << false;
0338     QTest::newRow("expense") << eMyMoney::Account::Type::Expense << true << false << false;
0339     QTest::newRow("moneymarket") << eMyMoney::Account::Type::MoneyMarket << false << true << false;
0340     QTest::newRow("certificatedeposit") << eMyMoney::Account::Type::CertificateDep << false << true << false;
0341     QTest::newRow("assetloan") << eMyMoney::Account::Type::AssetLoan << false << true << true;
0342     QTest::newRow("stock") << eMyMoney::Account::Type::Stock << false << true << false;
0343     QTest::newRow("creditcard") << eMyMoney::Account::Type::CreditCard << false << true << false;
0344     QTest::newRow("loan") << eMyMoney::Account::Type::Loan << false << true << true;
0345     QTest::newRow("liability") << eMyMoney::Account::Type::Liability << false << true << false;
0346     QTest::newRow("income") << eMyMoney::Account::Type::Income << true << false << false;
0347     QTest::newRow("equity") << eMyMoney::Account::Type::Equity << false << false << false;
0348 }
0349 
0350 void MyMoneyAccountTest::specialAccountTypes()
0351 {
0352     QFETCH(eMyMoney::Account::Type, accountType);
0353     QFETCH(bool, incomeExpense);
0354     QFETCH(bool, assetLibility);
0355     QFETCH(bool, loan);
0356 
0357     MyMoneyAccount a;
0358     a.setAccountType(accountType);
0359     QCOMPARE(a.isIncomeExpense(), incomeExpense);
0360     QCOMPARE(a.isAssetLiability(), assetLibility);
0361     QCOMPARE(a.isLoan(), loan);
0362 }
0363 
0364 void MyMoneyAccountTest::addReconciliation()
0365 {
0366     MyMoneyAccount a;
0367 
0368     QVERIFY(a.addReconciliation(QDate(2011, 1, 2), MyMoneyMoney(123, 100)) == true);
0369     QVERIFY(a.reconciliationHistory().count() == 1);
0370     QVERIFY(a.addReconciliation(QDate(2011, 2, 1), MyMoneyMoney(456, 100)) == true);
0371     QVERIFY(a.reconciliationHistory().count() == 2);
0372     QVERIFY(a.addReconciliation(QDate(2011, 2, 1), MyMoneyMoney(789, 100)) == true);
0373     QVERIFY(a.reconciliationHistory().count() == 2);
0374     QVERIFY(a.reconciliationHistory().values().last() == MyMoneyMoney(789, 100));
0375 }
0376 
0377 void MyMoneyAccountTest::reconciliationHistory()
0378 {
0379     MyMoneyAccount a;
0380 
0381     QVERIFY(a.reconciliationHistory().isEmpty() == true);
0382     QVERIFY(a.addReconciliation(QDate(2011, 1, 2), MyMoneyMoney(123, 100)) == true);
0383     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 2)) == MyMoneyMoney(123, 100));
0384     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 1)) == MyMoneyMoney());
0385     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 3)) == MyMoneyMoney());
0386 
0387     QVERIFY(a.addReconciliation(QDate(2011, 2, 1), MyMoneyMoney(456, 100)) == true);
0388     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 2)) == MyMoneyMoney(123, 100));
0389     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 1)) == MyMoneyMoney());
0390     QVERIFY(a.reconciliationHistory().value(QDate(2011, 1, 3)) == MyMoneyMoney());
0391     QVERIFY(a.reconciliationHistory().value(QDate(2011, 2, 1)) == MyMoneyMoney(456, 100));
0392     QVERIFY(a.reconciliationHistory().count() == 2);
0393 }
0394 
0395 void MyMoneyAccountTest::testHasOnlineMapping()
0396 {
0397     MyMoneyAccount a;
0398     QCOMPARE(a.hasOnlineMapping(), false);
0399     MyMoneyKeyValueContainer kvp = a.onlineBankingSettings();
0400     kvp.setValue(QLatin1String("provider"), QLatin1String("bla"));
0401     a.setOnlineBankingSettings(kvp);
0402     QCOMPARE(a.hasOnlineMapping(), true);
0403 }
0404 
0405 void MyMoneyAccountTest::testBudgetOptions()
0406 {
0407     MyMoneyAccount a;
0408     a.setAccountType(eMyMoney::Account::Type::Asset);
0409     QCOMPARE(a.accountType(), eMyMoney::Account::Type::Asset);
0410     QCOMPARE(a.budgetAccountType(), eMyMoney::Account::Type::Asset);
0411 
0412     a.setBudgetAccountType(eMyMoney::Account::Type::Income);
0413     QCOMPARE(a.accountType(), eMyMoney::Account::Type::Asset);
0414     QCOMPARE(a.budgetAccountType(), eMyMoney::Account::Type::Income);
0415 
0416     a.setBudgetAccountType(eMyMoney::Account::Type::Expense);
0417     QCOMPARE(a.accountType(), eMyMoney::Account::Type::Asset);
0418     QCOMPARE(a.budgetAccountType(), eMyMoney::Account::Type::Expense);
0419 
0420     a.setBudgetAccountType(eMyMoney::Account::Type::Investment);
0421     QCOMPARE(a.accountType(), eMyMoney::Account::Type::Asset);
0422     QCOMPARE(a.budgetAccountType(), eMyMoney::Account::Type::Asset);
0423 }