[billreminder: 3/17] Added some basic tests.



commit 02109c90a802b07dca950b54e6da6f76270e17ae
Author: Luiz Armesto <luiz armesto gmail com>
Date:   Mon Aug 16 00:37:06 2010 -0300

    Added some basic tests.

 src/tests/dal_test.py  |  132 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/tests/db_test.py   |  112 ++++++++++++++++++++++++++++++++++++++++
 src/tests/run_tests.py |   38 ++++++++++++++
 3 files changed, 282 insertions(+), 0 deletions(-)
---
diff --git a/src/tests/dal_test.py b/src/tests/dal_test.py
new file mode 100644
index 0000000..cad615a
--- /dev/null
+++ b/src/tests/dal_test.py
@@ -0,0 +1,132 @@
+import unittest
+import sys
+import os
+
+from decimal import Decimal
+
+sys.path += [os.path.abspath('..')]
+
+from lib import dal
+
+class DALTest(unittest.TestCase):
+    def setUp(self):
+        from datetime import date
+        from datetime import datetime
+
+        self.dal = dal.DAL(fake=True)
+
+        self.today = date.today()
+        self.today_t = datetime.today()
+
+    def test_add_category(self):
+        category_orig = dal.Category('Groceries', 'c0c0c0')
+
+        # Add category using DAL
+        category_orig_id = self.dal.add(category_orig)
+
+        session = self.dal.Session()
+        category = session.query(dal.Category).filter(dal.Category.name=='Groceries').first()
+        
+        self.assertEqual(category.name, 'Groceries')
+        self.assertEqual(category.color, 'c0c0c0')
+        self.assertEqual(category.id, category_orig_id)
+
+        session.close()
+
+    def test_add_category_twice(self):
+        category_orig_A = dal.Category('Groceries', 'c0c0c0')
+        category_orig_A_id = self.dal.add(category_orig_A)
+
+        category_orig_B = dal.Category('Groceries', 'c0c0c0')
+        category_orig_B_id = self.dal.add(category_orig_A)
+
+        self.assertEqual(category_orig_A_id, category_orig_B_id)
+
+        session = self.dal.Session()
+        self.assertEqual(session.query(dal.Category).filter(dal.Category.name=='Groceries').count(), 1)
+        session.close()
+    
+    def test_add_simple_bill(self):
+        bills_orig = dict()
+        bills = dict()
+
+        # Create a simple bill
+        bills_orig['Harris Teeter'] = dal.Bill('Harris Teeter', Decimal('123.94'), self.today)
+        
+        # Add bill using DAL
+        self.dal.add(bills_orig['Harris Teeter'])
+
+        session = self.dal.Session()
+        bills['Harris Teeter'] = session.query(dal.Bill).filter(dal.Bill.payee=='Harris Teeter').first()
+
+        self.assertEqual(bills['Harris Teeter'].payee, 'Harris Teeter')
+        self.assertEqual(bills['Harris Teeter'].amount, Decimal('123.94'))
+        self.assertEqual(bills['Harris Teeter'].dueDate, self.today)
+        self.assertEqual(bills['Harris Teeter'].alarmDate, None)
+        self.assertEqual(bills['Harris Teeter'].notes, None)
+        self.assertFalse(bills['Harris Teeter'].paid)
+        self.assertEqual(bills['Harris Teeter'].repeats, None)
+        self.assertEqual(bills['Harris Teeter'].category, None)
+
+        session.close()    
+
+    def test_add_bill_with_category(self):
+        bills_orig = dict()
+        bills = dict()
+
+        category_orig = dal.Category('Groceries', 'c0c0c0')
+
+        # Add category using DAL
+        category_orig_id = self.dal.add(category_orig)
+
+        session = self.dal.Session()
+        category = session.query(dal.Category).filter(dal.Category.name=='Groceries').first()
+
+        # Create a simple bill
+        bills_orig['Harris Teeter'] = dal.Bill('Harris Teeter', Decimal('123.94'), self.today, category=dal.Category('Groceries', 'c0c0c0'))
+
+        session.close()
+        
+        # Add bill using DAL
+        self.assertEqual(self.dal.add(bills_orig['Harris Teeter']), 1)
+        
+        session = self.dal.Session()
+        category = session.query(dal.Category).filter(dal.Category.name=='Groceries').first()
+        bills['Harris Teeter'] = session.query(dal.Bill).filter(dal.Bill.payee=='Harris Teeter').first()
+        
+        self.assertEqual(bills['Harris Teeter'].payee, 'Harris Teeter')
+        self.assertEqual(bills['Harris Teeter'].amount, Decimal('123.94'))
+        self.assertEqual(bills['Harris Teeter'].dueDate, self.today)
+        self.assertEqual(bills['Harris Teeter'].alarmDate, None)
+        self.assertEqual(bills['Harris Teeter'].notes, None)
+        self.assertFalse(bills['Harris Teeter'].paid)
+        self.assertEqual(bills['Harris Teeter'].repeats, None)
+        self.assertEqual(bills['Harris Teeter'].category.id, category_orig_id)
+
+        session.close()
+
+    def test_add_bill_with_new_category(self):
+        bills_orig = dict()
+        bills = dict()
+        category_orig = dal.Category('Nothing', 'c0c0c0')
+
+        # Create a simple bill
+        bills_orig['Harris Teeter'] = dal.Bill('Harris Teeter', Decimal('123.94'), self.today, category=category_orig)
+        
+        # Add bill using DAL
+        self.dal.add(bills_orig['Harris Teeter'])
+        session = self.dal.Session()
+
+        bills['Harris Teeter'] = session.query(dal.Bill).filter(dal.Bill.payee=='Harris Teeter').first()
+        
+        self.assertEqual(bills['Harris Teeter'].payee, 'Harris Teeter')
+        self.assertEqual(bills['Harris Teeter'].amount, Decimal('123.94'))
+        self.assertEqual(bills['Harris Teeter'].dueDate, self.today)
+        self.assertEqual(bills['Harris Teeter'].alarmDate, None)
+        self.assertEqual(bills['Harris Teeter'].notes, None)
+        self.assertFalse(bills['Harris Teeter'].paid)
+        self.assertEqual(bills['Harris Teeter'].repeats, None)
+        self.assertEqual(bills['Harris Teeter'].category.id, 1)
+
+        session.close()
+
diff --git a/src/tests/db_test.py b/src/tests/db_test.py
new file mode 100644
index 0000000..f463cb8
--- /dev/null
+++ b/src/tests/db_test.py
@@ -0,0 +1,112 @@
+import unittest
+import sys
+import os
+
+from decimal import Decimal
+
+sys.path += [os.path.abspath('..')]
+
+from db import entities
+
+class EntitiesTest(unittest.TestCase):
+    def setUp(self):
+        from sqlalchemy.orm import sessionmaker
+        from sqlalchemy import create_engine
+        from sqlalchemy.orm import sessionmaker
+        from datetime import date
+        from datetime import datetime
+
+        # Create a temporary database
+        self.engine = create_engine('sqlite:///:memory:', echo=False)
+        self.Session = sessionmaker(bind=self.engine)
+
+        # Creates all database tables
+        entities.Bill.metadata.create_all(self.engine)
+        entities.Category.metadata.create_all(self.engine)
+        
+        self.today = date.today()
+        self.today_t = datetime.today()
+
+    def test_create_a_new_category(self):
+        category_orig = entities.Category('Groceries', 'c0c0c0')
+
+        session = self.Session()
+        session.add(category_orig)
+        session.commit()
+
+        category = session.query(entities.Category).filter(entities.Category.name=='Groceries').first()
+
+        self.assertEqual(category.name, 'Groceries')
+        self.assertEqual(category.color, 'c0c0c0')
+
+        session.close()
+
+    def test_create_a_new_bill(self):
+        bills_orig = dict()
+        bills = dict()
+
+        # Create a simple bill
+        bills_orig['Harris Teeter'] = entities.Bill('Harris Teeter', 123.94, self.today)
+
+        session = self.Session()
+        session.add(bills_orig['Harris Teeter'])
+        session.commit()
+
+        bills['Harris Teeter'] = session.query(entities.Bill).filter(entities.Bill.payee=='Harris Teeter').first()
+
+        self.assertEqual(bills['Harris Teeter'].payee, 'Harris Teeter')
+        self.assertEqual(bills['Harris Teeter'].amount, Decimal('123.94'))
+        self.assertEqual(bills['Harris Teeter'].dueDate, self.today)
+        self.assertEqual(bills['Harris Teeter'].alarmDate, None)
+        self.assertEqual(bills['Harris Teeter'].notes, None)
+        self.assertFalse(bills['Harris Teeter'].paid)
+        self.assertEqual(bills['Harris Teeter'].repeats, None)
+        self.assertEqual(bills['Harris Teeter'].category, None)
+
+        # Create a complete bill
+        bills_orig['Toyota'] = entities.Bill('Toyota', 3900.00, self.today, self.today_t, 'My new car', True, True)
+
+        session = self.Session()
+        session.add(bills_orig['Toyota'])
+        session.commit()
+
+        bills['Toyota'] = session.query(entities.Bill).filter(entities.Bill.payee=='Toyota').first()
+
+        self.assertEqual(bills['Toyota'].payee, 'Toyota')
+        self.assertEqual(bills['Toyota'].amount, Decimal('3900.00'))
+        self.assertEqual(bills['Toyota'].dueDate, self.today)
+        self.assertEqual(bills['Toyota'].alarmDate, self.today_t)
+        self.assertEqual(bills['Toyota'].notes, 'My new car')
+        self.assertTrue(bills['Toyota'].paid)
+        self.assertTrue(bills['Toyota'].repeats)
+        self.assertEqual(bills['Toyota'].category, None)
+
+        session.close()
+
+    def test_add_category_to_bill(self):
+        categories = dict()
+        bills = dict()
+
+        # Create bills and category to be tested
+        bills['Harris Teeter'] = entities.Bill('Harris Teeter', 123.94, self.today)
+        bills['Toyota'] = entities.Bill('Toyota', 3900.00, self.today, self.today, 'My new car', True, True)
+        categories['Miscellaneous'] = entities.Category('Miscellaneous', 'c0c0c0')        
+
+        # Verify that there is no relations between bills and category yet
+        self.assertEqual(categories['Miscellaneous'].bills, [])
+        self.assertEqual(bills['Harris Teeter'].category, None)
+        self.assertEqual(bills['Toyota'].category, None)
+
+        # Set cotegory for one bill
+        bills['Harris Teeter'].category = categories['Miscellaneous']        
+        self.assertEqual(categories['Miscellaneous'].bills, [bills['Harris Teeter']])
+        self.assertEqual(bills['Harris Teeter'].category, categories['Miscellaneous'])
+
+        # Verify that the other bill remains with no category
+        self.assertEqual(bills['Toyota'].category, None)
+
+        # Append the other bill to the category using another method
+        categories['Miscellaneous'].bills.append(bills['Toyota'])
+        self.assertEqual(categories['Miscellaneous'].bills, [bills['Harris Teeter'], bills['Toyota']])
+        self.assertEqual(bills['Toyota'].category, categories['Miscellaneous'])
+
diff --git a/src/tests/run_tests.py b/src/tests/run_tests.py
new file mode 100644
index 0000000..2c20ea9
--- /dev/null
+++ b/src/tests/run_tests.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import unittest
+
+IGNORE_FILES = ['run_tests.py',]
+
+suite = unittest.TestSuite()
+debug = True
+
+try:
+    descriptions = sys.argv[1]
+    verbosity = sys.argv[1]
+except IndexError:
+    descriptions = 2
+    verbosity = 2
+
+try:
+    if sys.argv[2] == '1':
+        debug = True
+except IndexError:
+    pass
+
+for file in os.listdir(os.path.abspath('.')):
+    if file in IGNORE_FILES:
+        continue
+    if file[-3:] != '.py':
+        continue
+    if debug: 
+        print 'Found test : %s' % file[:-3]
+    suite.addTest(unittest.defaultTestLoader.loadTestsFromName(file[:-3]))
+
+test_runner = unittest.TextTestRunner(descriptions=descriptions, verbosity=verbosity)
+result = test_runner.run(suite)
+if result.failures or result.errors:
+    sys.exit(1)
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]