def test_buy_a_bet(self): """ Buy a bet """ event = EventFactory() user = UserFactory(total_cash=event.current_buy_for_price) old_price = event.current_buy_for_price bet_user, bet_event, bet = Bet.objects.buy_a_bet(user, event.id, Bet.YES, event.current_buy_for_price) self.assertEqual(user, bet_user) self.assertEqual(event, bet_event) self.assertEqual(event.current_buy_for_price, bet.bought_avg_price) self.assertEqual(1, bet.has) self.assertEqual(1, bet.bought) self.assertEqual(0, bet_user.total_cash) self.assertEqual(old_price, bet_user.portfolio_value) self.assertNotEqual(old_price, bet_event.current_buy_for_price) self.assertEqual(1, bet_event.turnover) with self.assertRaises(PriceMismatch): Bet.objects.buy_a_bet(user, event.id, Bet.YES, old_price) with self.assertRaises(InsufficientCash): Bet.objects.buy_a_bet(user, event.id, Bet.YES, bet_event.current_buy_for_price) user.total_cash = bet_event.current_buy_against_price user.save() # TODO should throw exception Bet.objects.buy_a_bet(user, event.id, Bet.NO, bet_event.current_buy_against_price)