/*************************************************************************** mymoneyaccounttest.cpp ------------------- copyright : (C) 2002 by Thomas Baumgart email : ipwizard@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "mymoneyaccounttest.h" #include #include MyMoneyAccountTest::MyMoneyAccountTest() { } void MyMoneyAccountTest::setUp () { } void MyMoneyAccountTest::tearDown () { } void MyMoneyAccountTest::testEmptyConstructor() { MyMoneyAccount a; CPPUNIT_ASSERT(a.id().isEmpty()); CPPUNIT_ASSERT(a.name().isEmpty()); CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::UnknownAccountType); CPPUNIT_ASSERT(a.openingDate() == TQDate()); CPPUNIT_ASSERT(a.lastModified() == TQDate()); CPPUNIT_ASSERT(a.lastReconciliationDate() == TQDate()); CPPUNIT_ASSERT(a.accountList().count() == 0); CPPUNIT_ASSERT(a.balance().isZero()); } void MyMoneyAccountTest::testConstructor() { TQString id = "A000001"; TQString institutionid = "B000001"; TQString parent = "Parent"; MyMoneyAccount r; MyMoneySplit s; r.setAccountType(MyMoneyAccount::Asset); r.setOpeningDate(TQDate::currentDate()); r.setLastModified(TQDate::currentDate()); r.setDescription("Desc"); r.setNumber("465500"); r.setParentAccountId(parent); r.setValue(TQString("key"), "value"); s.setShares(MyMoneyMoney(1,1)); r.adjustBalance(s); CPPUNIT_ASSERT(r.m_kvp.count() == 1); CPPUNIT_ASSERT(r.value("key") == "value"); MyMoneyAccount a(id, r); CPPUNIT_ASSERT(a.id() == id); CPPUNIT_ASSERT(a.institutionId().isEmpty()); CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::Asset); CPPUNIT_ASSERT(a.openingDate() == TQDate::currentDate()); CPPUNIT_ASSERT(a.lastModified() == TQDate::currentDate()); CPPUNIT_ASSERT(a.number() == "465500"); CPPUNIT_ASSERT(a.description() == "Desc"); CPPUNIT_ASSERT(a.accountList().count() == 0); CPPUNIT_ASSERT(a.parentAccountId() == "Parent"); CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(1,1)); TQMap copy; copy = r.pairs(); CPPUNIT_ASSERT(copy.count() == 1); CPPUNIT_ASSERT(copy[TQString("key")] == "value"); } void MyMoneyAccountTest::testSetFunctions() { MyMoneyAccount a; TQDate today(TQDate::currentDate()); CPPUNIT_ASSERT(a.name().isEmpty()); CPPUNIT_ASSERT(a.lastModified() == TQDate()); CPPUNIT_ASSERT(a.description().isEmpty()); a.setName("Account"); a.setInstitutionId("Institution1"); a.setLastModified(today); a.setDescription("Desc"); a.setNumber("123456"); a.setAccountType(MyMoneyAccount::MoneyMarket); CPPUNIT_ASSERT(a.name() == "Account"); CPPUNIT_ASSERT(a.institutionId() == "Institution1"); CPPUNIT_ASSERT(a.lastModified() == today); CPPUNIT_ASSERT(a.description() == "Desc"); CPPUNIT_ASSERT(a.number() == "123456"); CPPUNIT_ASSERT(a.accountType() == MyMoneyAccount::MoneyMarket); } void MyMoneyAccountTest::testCopyConstructor() { TQString id = "A000001"; TQString institutionid = "B000001"; TQString parent = "ParentAccount"; MyMoneyAccount r; r.setAccountType(MyMoneyAccount::Expense); r.setOpeningDate(TQDate::currentDate()); r.setLastModified(TQDate::currentDate()); r.setName("Account"); r.setInstitutionId("Inst1"); r.setDescription("Desc1"); r.setNumber("Number"); r.setParentAccountId(parent); r.setValue("Key", "Value"); MyMoneyAccount a(id, r); a.setInstitutionId(institutionid); MyMoneyAccount b(a); CPPUNIT_ASSERT(b.name() == "Account"); CPPUNIT_ASSERT(b.institutionId() == institutionid); CPPUNIT_ASSERT(b.accountType() == MyMoneyAccount::Expense); CPPUNIT_ASSERT(b.lastModified() == TQDate::currentDate()); CPPUNIT_ASSERT(b.openingDate() == TQDate::currentDate()); CPPUNIT_ASSERT(b.description() == "Desc1"); CPPUNIT_ASSERT(b.number() == "Number"); CPPUNIT_ASSERT(b.parentAccountId() == "ParentAccount"); CPPUNIT_ASSERT(b.value("Key") == "Value"); } void MyMoneyAccountTest::testAssignmentConstructor() { MyMoneyAccount a; a.setAccountType(MyMoneyAccount::Checkings); a.setName("Account"); a.setInstitutionId("Inst1"); a.setDescription("Bla"); a.setNumber("assigned Number"); a.setValue("Key", "Value"); a.addAccountId("ChildAccount"); MyMoneyAccount b; b.setLastModified(TQDate::currentDate()); b = a; CPPUNIT_ASSERT(b.name() == "Account"); CPPUNIT_ASSERT(b.institutionId() == "Inst1"); CPPUNIT_ASSERT(b.accountType() == MyMoneyAccount::Checkings); CPPUNIT_ASSERT(b.lastModified() == TQDate()); CPPUNIT_ASSERT(b.openingDate() == a.openingDate()); CPPUNIT_ASSERT(b.description() == "Bla"); CPPUNIT_ASSERT(b.number() == "assigned Number"); CPPUNIT_ASSERT(b.value("Key") == "Value"); CPPUNIT_ASSERT(b.accountList().count() == 1); CPPUNIT_ASSERT(b.accountList()[0] == "ChildAccount"); } void MyMoneyAccountTest::testAdjustBalance() { MyMoneyAccount a; MyMoneySplit s; s.setShares(MyMoneyMoney(3,1)); a.adjustBalance(s); CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(3,1)); s.setShares(MyMoneyMoney(5,1)); a.adjustBalance(s, true); CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(-2,1)); s.setShares(MyMoneyMoney(2,1)); s.setAction(MyMoneySplit::ActionSplitShares); a.adjustBalance(s); CPPUNIT_ASSERT(a.balance() == MyMoneyMoney(-4,1)); s.setShares(MyMoneyMoney(4,1)); s.setAction(TQString()); a.adjustBalance(s); CPPUNIT_ASSERT(a.balance().isZero()); } void MyMoneyAccountTest::testSubAccounts() { MyMoneyAccount a; a.setAccountType(MyMoneyAccount::Checkings); a.addAccountId("Subaccount1"); CPPUNIT_ASSERT(a.accountList().count() == 1); a.addAccountId("Subaccount1"); CPPUNIT_ASSERT(a.accountList().count() == 1); a.addAccountId("Subaccount2"); CPPUNIT_ASSERT(a.accountList().count() == 2); } void MyMoneyAccountTest::testEquality() { MyMoneyAccount a; a.setLastModified(TQDate::currentDate()); a.setName("Name"); a.setNumber("Number"); a.setDescription("Desc"); a.setInstitutionId("I-ID"); a.setOpeningDate(TQDate::currentDate()); a.setLastReconciliationDate(TQDate::currentDate()); a.setAccountType(MyMoneyAccount::Asset); a.setParentAccountId("P-ID"); a.setId("A-ID"); a.setCurrencyId("C-ID"); a.setValue("Key", "Value"); MyMoneyAccount b; b = a; CPPUNIT_ASSERT(b == a); a.setName("Noname"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setLastModified(TQDate::currentDate().addDays(-1)); CPPUNIT_ASSERT(!(b == a)); b = a; a.setNumber("Nonumber"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setDescription("NoDesc"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setInstitutionId("I-noID"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setOpeningDate(TQDate::currentDate().addDays(-1)); CPPUNIT_ASSERT(!(b == a)); b = a; a.setLastReconciliationDate(TQDate::currentDate().addDays(-1)); CPPUNIT_ASSERT(!(b == a)); b = a; a.setAccountType(MyMoneyAccount::Liability); CPPUNIT_ASSERT(!(b == a)); b = a; a.setParentAccountId("P-noID"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setId("A-noID"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setCurrencyId("C-noID"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setValue("Key", "noValue"); CPPUNIT_ASSERT(!(b == a)); b = a; a.setValue("noKey", "Value"); CPPUNIT_ASSERT(!(b == a)); b = a; } void MyMoneyAccountTest::testWriteXML() { TQString id = "A000001"; TQString institutionid = "B000001"; TQString parent = "Parent"; MyMoneyAccount r; r.setAccountType(MyMoneyAccount::Asset); r.setOpeningDate(TQDate::currentDate()); r.setLastModified(TQDate::currentDate()); r.setDescription("Desc"); r.setName("AccountName"); r.setNumber("465500"); r.setParentAccountId(parent); r.setInstitutionId(institutionid); r.setValue(TQString("key"), "value"); r.addAccountId("A000002"); // CPPUNIT_ASSERT(r.m_kvp.count() == 1); // CPPUNIT_ASSERT(r.value("key") == "value"); MyMoneyAccount a(id, r); TQDomDocument doc("TEST"); TQDomElement el = doc.createElement("ACCOUNT-CONTAINER"); doc.appendChild(el); a.writeXML(doc, el); TQString ref = TQString( "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n"). arg(TQDate::currentDate().toString(TQt::ISODate)).arg(TQDate::currentDate().toString(TQt::ISODate)); CPPUNIT_ASSERT(doc.toString() == ref); } void MyMoneyAccountTest::testReadXML() { MyMoneyAccount a; TQString ref_ok = TQString( "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n"). arg(TQDate::currentDate().toString(TQt::ISODate)).arg(TQDate::currentDate().toString(TQt::ISODate)); TQString ref_false = TQString( "\n" "\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n"). arg(TQDate::currentDate().toString(TQt::ISODate)).arg(TQDate::currentDate().toString(TQt::ISODate)); TQDomDocument doc; TQDomElement node; doc.setContent(ref_false); node = doc.documentElement().firstChild().toElement(); try { a = MyMoneyAccount(node); CPPUNIT_FAIL("Missing expected exception"); } catch(MyMoneyException *e) { delete e; } doc.setContent(ref_ok); node = doc.documentElement().firstChild().toElement(); a.addAccountId("TEST"); a.setValue("KEY", "VALUE"); try { a = MyMoneyAccount(node); CPPUNIT_ASSERT(a.id() == "A000001"); CPPUNIT_ASSERT(a.m_name == "AccountName"); CPPUNIT_ASSERT(a.m_parentAccount == "Parent"); CPPUNIT_ASSERT(a.m_lastModified == TQDate::currentDate()); CPPUNIT_ASSERT(a.m_lastReconciliationDate == TQDate()); CPPUNIT_ASSERT(a.m_institution == "B000001"); CPPUNIT_ASSERT(a.m_number == "465500"); CPPUNIT_ASSERT(a.m_openingDate == TQDate::currentDate()); CPPUNIT_ASSERT(a.m_accountType == MyMoneyAccount::Asset); CPPUNIT_ASSERT(a.m_description == "Desc"); CPPUNIT_ASSERT(a.accountList().count() == 2); CPPUNIT_ASSERT(a.accountList()[0] == "A000002"); CPPUNIT_ASSERT(a.accountList()[1] == "A000003"); CPPUNIT_ASSERT(a.pairs().count() == 3); CPPUNIT_ASSERT(a.value("key") == "value"); CPPUNIT_ASSERT(a.value("Key") == "Value"); CPPUNIT_ASSERT(a.value("lastStatementDate").isEmpty()); } catch(MyMoneyException *e) { delete e; CPPUNIT_FAIL("Unexpected exception"); } } void MyMoneyAccountTest::testHasReferenceTo(void) { MyMoneyAccount a; a.setInstitutionId("I0001"); a.addAccountId("A_001"); a.addAccountId("A_002"); a.setParentAccountId("A_Parent"); a.setCurrencyId("Currency"); CPPUNIT_ASSERT(a.hasReferenceTo("I0001") == true); CPPUNIT_ASSERT(a.hasReferenceTo("I0002") == false); CPPUNIT_ASSERT(a.hasReferenceTo("A_001") == false); CPPUNIT_ASSERT(a.hasReferenceTo("A_Parent") == true); CPPUNIT_ASSERT(a.hasReferenceTo("Currency") == true); } void MyMoneyAccountTest::testSetClosed(void) { MyMoneyAccount a; CPPUNIT_ASSERT(a.isClosed() == false); a.setClosed(true); CPPUNIT_ASSERT(a.isClosed() == true); a.setClosed(false); CPPUNIT_ASSERT(a.isClosed() == false); } void MyMoneyAccountTest::testIsIncomeExpense(void) { MyMoneyAccount a; a.setAccountType(MyMoneyAccount::UnknownAccountType); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Checkings); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Savings); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Cash); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::CreditCard); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Loan); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::CertificateDep); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Investment); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::MoneyMarket); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Asset); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Liability); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Currency); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Income); CPPUNIT_ASSERT(a.isIncomeExpense() == true); a.setAccountType(MyMoneyAccount::Expense); CPPUNIT_ASSERT(a.isIncomeExpense() == true); a.setAccountType(MyMoneyAccount::AssetLoan); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Stock); CPPUNIT_ASSERT(a.isIncomeExpense() == false); a.setAccountType(MyMoneyAccount::Equity); CPPUNIT_ASSERT(a.isIncomeExpense() == false); } void MyMoneyAccountTest::testIsAssetLiability(void) { MyMoneyAccount a; a.setAccountType(MyMoneyAccount::UnknownAccountType); CPPUNIT_ASSERT(a.isAssetLiability() == false); a.setAccountType(MyMoneyAccount::Checkings); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Savings); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Cash); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::CreditCard); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Loan); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::CertificateDep); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Investment); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::MoneyMarket); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Asset); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Liability); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Currency); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Income); CPPUNIT_ASSERT(a.isAssetLiability() == false); a.setAccountType(MyMoneyAccount::Expense); CPPUNIT_ASSERT(a.isAssetLiability() == false); a.setAccountType(MyMoneyAccount::AssetLoan); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Stock); CPPUNIT_ASSERT(a.isAssetLiability() == true); a.setAccountType(MyMoneyAccount::Equity); CPPUNIT_ASSERT(a.isAssetLiability() == false); } void MyMoneyAccountTest::testIsLoan(void) { MyMoneyAccount a; a.setAccountType(MyMoneyAccount::UnknownAccountType); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Checkings); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Savings); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Cash); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::CreditCard); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Loan); CPPUNIT_ASSERT(a.isLoan() == true); a.setAccountType(MyMoneyAccount::CertificateDep); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Investment); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::MoneyMarket); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Asset); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Liability); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Currency); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Income); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Expense); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::AssetLoan); CPPUNIT_ASSERT(a.isLoan() == true); a.setAccountType(MyMoneyAccount::Stock); CPPUNIT_ASSERT(a.isLoan() == false); a.setAccountType(MyMoneyAccount::Equity); CPPUNIT_ASSERT(a.isLoan() == false); }