from test_imports import * class BooksActivityTest(unittest.TestCase): def setUp(self): self.books = Books('My Books', 'sqlite:///') self.activity = Activity() self.account_a = Account('a', 'USD') self.books.add_account(self.account_a) self.account_b = Account('b', 'USD') self.books.add_account(self.account_b) self.account_c = Account('c', 'USD') self.books.add_account(self.account_c) def test_cant_post_an_empty_activity(self): self.assertRaises(EmptyActivityError, self.books.post, self.activity) def test_cant_post_an_unbalanced_activity(self): self.activity.add_posting(self.account_a, 123) self.assertRaises(UnbalancedActivityError, self.books.post, self.activity) def test_books_only_allow_activities_whose_accounts_are_members(self): self.activity.add_posting(self.account_b, -123) self.activity.add_posting(Account('c', 'USD'), 123) self.assertRaises(UnknownAccountError, self.books.post, self.activity) def test_a_balanced_activity_when_posted_to_a_books_appears_in_that_books_activities(self): self.activity.add_posting(self.account_a, 123) self.activity.add_posting(self.account_b, -123) self.books.post(self.activity) assert self.activity in self.books.activities() def test_posting_a_balanced_activity_saves_it_to_its_accounts(self): self.activity.add_posting(self.account_a, 123) self.activity.add_posting(self.account_b, -123) self.books.post(self.activity) self.assertEquals(self.account_a._postings[0].amount, 123) self.assertEquals(self.account_b._postings[0].amount, -123) self.assertEquals(123, self.account_a.balance()) self.assertEquals(-123, self.account_b.balance()) def test_posting_a_complex_balanced_activity_balances_correctly(self): self.activity.add_posting(self.account_a, 14) self.activity.add_posting(self.account_b,-7) self.activity.add_posting(self.account_c, -7) self.books.post(self.activity) self.activity = Activity() self.activity.add_posting(self.account_a, 12) self.activity.add_posting(self.account_b, -12) self.books.post(self.activity) self.assertEquals(len(self.account_a._postings), 2) self.assertEquals(26, self.account_a.balance()) self.assertEquals(-19, self.account_b.balance()) def test_account_report_tree_balance(self): self.account_b.parent = self.account_a self.activity.add_posting(self.account_b,456) self.activity.add_posting(self.account_a,654) self.activity.add_posting(self.account_c,-654) self.activity.add_posting(self.account_c,-456) self.books.post(self.activity) self.assertEquals(1110,self.account_a.tree_balance())