GnuCash 2.4.99
test_transaction.py
00001 from unittest import main
00002 
00003 from gnucash import Transaction, Book, Account, Split
00004 from unittest_support import *
00005 
00006 from test_book import BookSession
00007 
00008 class TransactionSession( BookSession ):
00009     def setUp(self):
00010         self.domain1 = "gnc.engine"
00011         self.domain2 = "gnc.engine.scrub"
00012         level =  G_LOG_LEVEL_CRITICAL
00013         check1 = TestErrorStruct()
00014         check1.log_domain = self.domain1
00015         check1.log_level = level
00016         check1.msg = "[xaccScrubUtilityGetOrMakeAccount()] No currency specified!"
00017         test_add_error(check1)
00018         check2 = TestErrorStruct()
00019         check2.log_domain = self.domain1
00020         check2.log_level = level
00021         check2.msg = "[xaccTransScrubSplits()] Transaction doesn't have a currency!"
00022         test_add_error(check2)
00023         self.hdlr1 = test_set_list_handler(self.domain1, level, None)
00024         check3 = TestErrorStruct()
00025         check3.log_domain = "gnc.engine.scrub"
00026         check3.log_level = level
00027         check3.msg = "[xaccScrubUtilityGetOrMakeAccount()] No currency specified!"
00028         self.hdlr2 = test_set_checked_handler(self.domain2, level, check3)
00029         BookSession.setUp(self)
00030         self.trans = Transaction(self.book)
00031         #Evil bug means we must set a split for the transaction before making
00032         #any other changes (is slightly useful for later tests)
00033         self.split = Split(self.book)
00034         self.split.SetParent(self.trans)
00035         ############
00036         self.trans.SetCurrency(self.currency)
00037 
00038     def tearDown(self):
00039         g_log_remove_handler(self.domain1, self.hdlr1)
00040         g_log_remove_handler(self.domain2, self.hdlr2)
00041         test_clear_error_list ()
00042 
00043 class TestTransaction( TransactionSession ):
00044     def test_equal(self):
00045         TRANS = self.trans
00046         self.assertTrue( TRANS.Equal(self.trans, True, False, False, False) )
00047 
00048     def test_clone(self):
00049         domain = "gnc.engine"
00050         level =  G_LOG_LEVEL_WARNING
00051         check = TestErrorStruct()
00052         check.log_domain = domain
00053         check.log_level = level
00054         check.msg = "[xaccTransEqual()] GUIDs differ"
00055         hdlr = test_set_checked_handler(domain, level, check)
00056 
00057         TRANS = self.trans.Clone()
00058        #Clone and original should have different GUIDs
00059         self.assertFalse( TRANS.Equal(self.trans, True, False, False, False) )
00060         #Clone and original should have the same balance
00061         self.assertTrue( TRANS.Equal(self.trans, False, False, True, False) )
00062 
00063         g_log_remove_handler(domain, hdlr)
00064 
00065     def test_setcurrency(self):
00066         self.assertTrue( self.currency.equal( self.trans.GetCurrency() ) )
00067 
00068     def test_edit(self):
00069         self.assertFalse( self.trans.IsOpen() )
00070         self.trans.BeginEdit()
00071         self.assertTrue( self.trans.IsOpen() )
00072         self.trans.CommitEdit()
00073         self.assertFalse( self.trans.IsOpen() )
00074 
00075     def test_rollback(self):
00076         self.assertEquals( '', self.trans.GetDescription() )
00077         self.trans.BeginEdit()
00078         DESC = 'Food'
00079         self.trans.SetDescription(DESC)
00080         self.assertEquals( DESC, self.trans.GetDescription() )
00081         self.trans.RollbackEdit() 
00082         self.assertEquals( '', self.trans.GetDescription() )
00083 
00084     def test_findsplit(self):
00085         ACCT = Account(self.book)
00086         ACCT.SetCommodity(self.currency)
00087         self.split.SetAccount( ACCT )
00088         SPLIT = self.trans.FindSplitByAccount( ACCT )
00089         self.assertTrue( SPLIT.Equal(self.split, True, False, False) )
00090     
00091     def test_getsplit(self):
00092         SPLIT = self.trans.GetSplit(0)
00093         self.assertTrue( SPLIT.Equal(self.split, True, False, False) )
00094         
00095     def test_getsplitindex(self):
00096         self.assertEquals( 0, self.trans.GetSplitIndex(self.split) )
00097 
00098     def test_countsplits(self):
00099         self.assertEquals( 1, self.trans.CountSplits() )
00100 
00101     def test_readonly(self):
00102         self.assertEquals( None, self.trans.GetReadOnly() )
00103         REASON = 'none'
00104         self.trans.SetReadOnly(REASON)
00105         self.assertEquals( REASON, self.trans.GetReadOnly() )
00106         self.trans.ClearReadOnly()
00107         self.assertEquals( None, self.trans.GetReadOnly() )
00108 
00109     def test_txntype(self):
00110         self.assertEquals( '\x00', self.trans.GetTxnType() )
00111         TYPE = 'I'
00112         self.trans.SetTxnType(TYPE)
00113         self.assertEquals( TYPE, self.trans.GetTxnType() )
00114         TYPE = 'P'
00115         self.trans.SetTxnType(TYPE)
00116         self.assertEquals( TYPE, self.trans.GetTxnType() )
00117 
00118     def test_num(self):
00119         NUM = '5'
00120         self.assertEquals( '', self.trans.GetNum() )
00121         self.trans.SetNum(NUM)
00122         self.assertEquals( NUM, self.trans.GetNum() )
00123 
00124     def test_description(self):
00125         DESCR = 'Groceries'
00126         self.assertEquals( '', self.trans.GetDescription() )
00127         self.trans.SetDescription(DESCR)
00128         self.assertEquals( DESCR, self.trans.GetDescription() )
00129 
00130     def test_notes(self):
00131         NOTE = 'For dinner party'
00132         self.assertEquals( None, self.trans.GetNotes() )
00133         self.trans.SetNotes(NOTE)
00134         self.assertEquals( NOTE, self.trans.GetNotes() )
00135 
00136 if __name__ == '__main__':
00137     main()
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines