def test_purchase(self): account_obj = AccountFactory.create() wallet_obj = WalletFactory.create(owner_id=account_obj.id) WalletTrxFactory.create( wallet=wallet_obj, amount=Money(1000, 'SEK'), trx_status=TrxStatus.FINALIZED ) product_obj1 = ProductFactory.create( code='1337733113370', name='Billys Original', price=Money(13, 'SEK') ) product_obj2 = ProductFactory.create( code='7331733113370', name='Kebaba', price=Money(30, 'SEK') ) products = [ (product_obj1.id, 3), (product_obj2.id, 1), ] api.purchase(account_obj.id, products) product_obj1.refresh_from_db() product_obj2.refresh_from_db() self.assertEqual(product_obj1.qty, -3) self.assertEqual(product_obj2.qty, -1) _, balance = wallet_api.get_balance(account_obj.id) self.assertEqual(balance, Money(931, 'SEK'))
def test_list_purchases(self): account_obj = AccountFactory.create() wallet_obj = WalletFactory.create(owner_id=account_obj.id) WalletTrxFactory.create(wallet=wallet_obj, amount=Money(1000, 'SEK'), trx_status=TrxStatus.FINALIZED) product_obj1 = ProductFactory.create(code='1337733113370', name='Billys Original', price=Money(13, 'SEK')) products = [ (product_obj1.id, 3), ] api.purchase(account_obj.id, products) objs = api.list_purchases(account_obj.id) self.assertEqual(len(objs), 1)
def test_cancel_card_purchase(self): account_obj = AccountFactory.create() wallet_obj = WalletFactory.create(owner_id=account_obj.id) WalletTrxFactory.create(wallet=wallet_obj, amount=Money(1000, 'SEK'), trx_status=TrxStatus.FINALIZED) product_obj1 = ProductFactory.create(code='1337733113370', name='Billys Original', price=Money(13, 'SEK')) product_obj2 = ProductFactory.create(code='7331733113370', name='Kebaba', price=Money(30, 'SEK')) products = [ (product_obj1.id, 3), (product_obj2.id, 1), ] purchase_obj = api.purchase(account_obj.id, products) api.cancel_purchase(purchase_obj.id) purchase_obj, _ = api.get_purchase(purchase_obj.id) self.assertEqual(purchase_obj.status, enums.PurchaseStatus.CANCELED) product_obj1.refresh_from_db() product_obj2.refresh_from_db() self.assertEqual(product_obj1.qty, 0) self.assertEqual(product_obj2.qty, 0) _, balance = wallet_api.get_balance(account_obj.id) self.assertEqual(balance, Money(1000, 'SEK')) _, balance = wallet_api.get_balance(settings.FOOBAR_MAIN_WALLET) self.assertEqual(balance, Money(0, 'SEK'))
def test_purchase(self): account_obj = AccountFactory.create() wallet_obj = WalletFactory.create(owner_id=account_obj.id) WalletTrxFactory.create( wallet=wallet_obj, amount=Money(1000, 'SEK'), trx_type=TrxType.FINALIZED ) product_obj1 = ProductFactory.create( code='1337733113370', name='Billys Original', price=Money(13, 'SEK') ) product_obj2 = ProductFactory.create( code='7331733113370', name='Kebaba', price=Money(30, 'SEK') ) products = [ (product_obj1.id, 3), (product_obj2.id, 1), ] purchase_obj = api.purchase(account_obj.id, products) self.assertEqual(purchase_obj.amount, Money(69, 'SEK')) product_obj1.refresh_from_db() product_obj2.refresh_from_db() self.assertEqual(product_obj1.qty, -3) self.assertEqual(product_obj2.qty, -1) _, balance = wallet_api.get_balance(account_obj.id) self.assertEqual(balance, Money(931, 'SEK')) _, balance = wallet_api.get_balance(settings.FOOBAR_MAIN_WALLET) self.assertEqual(balance, Money(69, 'SEK'))
def test_cancel_cash_purchase(self): product_obj1 = ProductFactory.create( code='1337733113370', name='Billys Original', price=Money(13, 'SEK') ) product_obj2 = ProductFactory.create( code='7331733113370', name='Kebaba', price=Money(30, 'SEK') ) products = [ (product_obj1.id, 3), (product_obj2.id, 1), ] purchase_obj = api.purchase(None, products) api.cancel_purchase(purchase_obj.id) purchase_obj, _ = api.get_purchase(purchase_obj.id) self.assertEqual(purchase_obj.status, enums.PurchaseStatus.CANCELED) product_obj1.refresh_from_db() product_obj2.refresh_from_db() self.assertEqual(product_obj1.qty, 0) self.assertEqual(product_obj2.qty, 0) _, balance = wallet_api.get_balance(settings.FOOBAR_CASH_WALLET) self.assertEqual(balance, Money(0, 'SEK'))
def create(self, request): serializer = PurchaseSerializer(data=request.data) if not serializer.is_valid(): return Response( serializer.errors, status=status.HTTP_400_BAD_REQUEST ) try: api.purchase(**serializer.as_purchase_kwargs()) except InsufficientFunds: return Response( 'Insufficient funds', status=status.HTTP_400_BAD_REQUEST ) return Response( data=serializer.data, status=status.HTTP_200_OK )
def test_cash_purchase(self): product_obj1 = ProductFactory.create(code='1337733113370', name='Billys Original', price=Money(13, 'SEK')) product_obj2 = ProductFactory.create(code='7331733113370', name='Kebaba', price=Money(30, 'SEK')) products = [ (product_obj1.id, 3), (product_obj2.id, 1), ] api.purchase(None, products) product_obj1.refresh_from_db() product_obj2.refresh_from_db() self.assertEqual(product_obj1.qty, -3) self.assertEqual(product_obj2.qty, -1) _, balance = wallet_api.get_balance(settings.FOOBAR_CASH_WALLET) self.assertEqual(balance, Money(69, 'SEK'))
def create(self, request): serializer = PurchaseRequestSerializer(data=request.data) serializer.is_valid(raise_exception=True) try: purchase_obj = api.purchase(**serializer.as_purchase_kwargs()) except InsufficientFunds: return Response('Insufficient funds', status=status.HTTP_400_BAD_REQUEST) serializer = PurchaseSerializer(purchase_obj) return Response(serializer.data, status=status.HTTP_200_OK)
def test_get_purchase(self): account_obj = AccountFactory.create() wallet_obj = WalletFactory.create(owner_id=account_obj.id) WalletTrxFactory.create( wallet=wallet_obj, amount=Money(1000, 'SEK'), trx_type=TrxType.FINALIZED ) product_obj1 = ProductFactory.create( code='1337733113370', name='Billys Original', price=Money(13, 'SEK') ) products = [ (product_obj1.id, 3), ] purchase_obj = api.purchase(account_obj.id, products) obj = api.get_purchase(purchase_obj.id) self.assertIsNotNone(obj)