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 }