def test_spend_should_raise_exception_when_user_does_not_have_enough_coins( self): wallet = Wallet.get_users_wallet(self.user) wallet.add(6) with self.assertRaises(CannotAffordError): wallet = Wallet.get_users_wallet(self.user) wallet.spend(10)
def test_success_multiple_listings(self): Listing.objects.create(item=self.item, count=20, price=20, direction=Listing.Direction.SELL, submitter=self.seller) Listing.objects.create(item=self.item, count=20, price=10, direction=Listing.Direction.SELL, submitter=self.seller) wallet = Wallet.get_users_wallet(self.user) wallet.add(200 + 100) result = self.item.make_buy_transaction(self.user, count=25) self.assertEquals(25, result['items_purchased']) self.assertEquals(200 + 100, result['coins_spent']) self.assertEqual(0, Wallet.get_users_wallet(self.user).coins) self.assertEqual(300, Wallet.get_users_wallet(self.seller).coins) self.assertEqual( 25, InventoryItem.objects.get(user=self.user, item=self.item).count) self.assertEqual(1, Listing.objects.filter(item=self.item).count()) self.assertEqual(15, Listing.objects.filter(item=self.item).first().count) self.assertEqual(20, Listing.objects.filter(item=self.item).first().price)
def test_spend(self): wallet = Wallet.get_users_wallet(self.user) wallet.add(6) wallet = Wallet.get_users_wallet(self.user) wallet.spend(5) wallet = Wallet.get_users_wallet(self.user) self.assertEqual(1, wallet.coins)
def test_user_has_no_coins(self): listing = Listing.objects.create(item=self.item, count=5, price=10, direction=Listing.Direction.SELL, submitter=self.seller) result = self.item.make_buy_transaction(self.user, count=5) self.assertEquals(0, result['items_purchased']) self.assertEquals(0, result['coins_spent']) self.assertEqual(0, Wallet.get_users_wallet(self.user).coins) self.assertEqual(0, Wallet.get_users_wallet(self.seller).coins) self.assertFalse( InventoryItem.objects.filter(user=self.user, item=self.item).exists()) self.assertEqual(listing, Listing.objects.get(pk=listing.pk))
def dashboard(request): sell_listings = Listing.objects.filter(submitter=request.user, direction=Listing.Direction.SELL).order_by('-pk') buy_listings = Listing.objects.filter(submitter=request.user, direction=Listing.Direction.BUY).order_by('-pk') inventory_items = InventoryItem.objects.filter(user=request.user) return render(request, 'app/dashboard.html', { 'wallet': Wallet.get_users_wallet(request.user), 'sell_listings': sell_listings, 'buy_listings': buy_listings, 'inventory_items': inventory_items, })
def test_cancel_buy_listing(self): listing = Listing.objects.create(item=self.item, count=5, price=10, submitter=self.user, direction=Listing.Direction.BUY) listing.cancel() self.assertEqual(0, Listing.objects.count()) self.assertEqual(50, Wallet.get_users_wallet(self.user).coins) self.assertEqual(0, InventoryItem.objects.count())
def test_success_listing_deleted(self): Listing.objects.create(item=self.item, count=5, price=10, direction=Listing.Direction.SELL, submitter=self.seller) wallet = Wallet.get_users_wallet(self.user) wallet.add(50) result = self.item.make_buy_transaction(self.user, count=5) self.assertEquals(5, result['items_purchased']) self.assertEquals(50, result['coins_spent']) self.assertEqual(0, Wallet.get_users_wallet(self.user).coins) self.assertEqual(50, Wallet.get_users_wallet(self.seller).coins) self.assertEqual( 5, InventoryItem.objects.get(user=self.user, item=self.item).count) self.assertFalse(Listing.objects.filter(item=self.item).exists())
def test_partial_success_not_enough_listings(self): Listing.objects.create(item=self.item, count=20, price=20, direction=Listing.Direction.SELL, submitter=self.seller) Listing.objects.create(item=self.item, count=20, price=10, direction=Listing.Direction.SELL, submitter=self.seller) wallet = Wallet.get_users_wallet(self.user) wallet.add(800) result = self.item.make_buy_transaction(self.user, count=50) self.assertEquals(40, result['items_purchased']) self.assertEquals(200 + 400, result['coins_spent']) self.assertEqual(200, Wallet.get_users_wallet(self.user).coins) self.assertEqual(600, Wallet.get_users_wallet(self.seller).coins) self.assertEqual( 40, InventoryItem.objects.get(user=self.user, item=self.item).count) self.assertEqual(0, Listing.objects.filter(item=self.item).count())
def test_add(self): wallet = Wallet.get_users_wallet(self.user) wallet.add(6) wallet = Wallet.get_users_wallet(self.user) self.assertEqual(6, wallet.coins)
def test_get_users_wallet(self): wallet = Wallet.get_users_wallet(self.user) self.assertEqual(self.user, wallet.user) self.assertEqual(0, wallet.coins)