def test_ordinary_purchase(self): """Test basic purchases (ordinary price) """ account = Account(name="tset") account.deposit(500) # Depost issues the save routine operator = None m1 = Merchandise(name="m1", internal_price=3, ordinary_price=4) m1.save() m2 = Merchandise(name="m2", internal_price=2, ordinary_price=4) m2.save() merchandise_list = [m1, m1, m1, m2] # Test a basic purchase: total_price = sum(m.ordinary_price for m in merchandise_list) trans = buy_merchandise(account, merchandise_list, operator) account = Account.objects.get(id=account.id) # Force update self.failUnlessEqual(trans.amount, -total_price) self.failUnlessEqual(account.balance, 500 - total_price) # Test if the number of purchased items related to the transaction is # correct: pm_count = PurchasedItem.objects.filter(transaction=trans).count() item_count = len(merchandise_list) self.failUnlessEqual(pm_count, item_count)
def test_against_cascade_deletion_of_purchaseditem(self): """Test that purchased items are not removed when related merchandise is """ account = Account(name="tset") account.deposit(500) # Depost issues the save routine operator = None m1 = Merchandise(name="m1", internal_price=3, ordinary_price=4) m1.save() m2 = Merchandise(name="m2", internal_price=2, ordinary_price=4) m2.save() # Test a basic purchase: trans = buy_merchandise(account, [m1], operator) # Test that transactions are not deleted when related merchandise is, # and that backup information is stored to merchandise_tags and # merchandise_name: pm1_id = PurchasedItem.objects.get(transaction=trans).id merchandise_name = m1.name[:30] merchandise_tags = "|".join((unicode(t) for t in m1.tags.all()))[:30] m1.delete() pm1 = PurchasedItem.objects.get(id=pm1_id) self.failUnlessEqual(pm1.merchandise_name, merchandise_name) self.failUnlessEqual(pm1.merchandise_tags, merchandise_tags)
def test_illegal_purchase(self): """Test if purchases are canceled if they should not be allowed """ account = Account(name="tset") account.deposit(3) # Deposit issues the save routine operator = None m1 = Merchandise(name="m1", internal_price=3, ordinary_price=4) m1.save() # Test illegal purchase: trans = buy_merchandise(account, [m1], operator) account = Account.objects.get(id=account.id) # Force update self.failUnlessEqual(trans, None) self.failUnlessEqual(account.balance, 3)
def test_internal_purchase(self): """Test basic purchases (internal price) """ limit_group = LimitGroup(internal_price=True) limit_group.save() account = Account(name="tset", limit_group=limit_group) account.deposit(500) # Depost issues the save routine operator = None m1 = Merchandise(name="m1", internal_price=3, ordinary_price=4) m1.save() m2 = Merchandise(name="m2", internal_price=2, ordinary_price=4) m2.save() merchandise_list = [m1, m1, m1, m2] # Test internal purchase: total_price = sum(m.internal_price for m in merchandise_list) trans = buy_merchandise(account, merchandise_list, operator) account = Account.objects.get(id=account.id) # Force update self.failUnlessEqual(trans.amount, -total_price) self.failUnlessEqual(account.balance, 500 - total_price)