Mock Stripe Methods in Python for testing -


so trying mock stripe web hooks in method can write unit test it. using mock library mocking stripe methods. here method trying mock:

class addcardview(apiview): """ * add card customer """  permission_classes = (     customerpermission, )  def post(self, request, format=none):     name = request.data.get('name', none)     cvc = request.data.get('cvc', none)     number = request.data.get('number', none)     expiry = request.data.get('expiry', none)      expiry_month, expiry_year = expiry.split("/")      customer_obj = request.user.contact.business.customer      customer = stripe.customer.retrieve(customer_obj.stripe_id)      try:         card = customer.sources.create(             source={                 "object": "card",                 "number": number,                 "exp_month": expiry_month,                 "exp_year": expiry_year,                 "cvc": cvc,                 "name": name             }         )         # making default card         customer.default_source = card.id         customer.save()     except carderror ce:         logger.error("got carderror customer_id={0}, carderror={1}".format(customer_obj.pk, ce.json_body))         return response({"success": false, "error": "failed add card"})     else:         customer_obj.card_last_4 = card.get('last4')         customer_obj.card_kind = card.get('type', '')         customer_obj.card_fingerprint = card.get('fingerprint')         customer_obj.save()      return response({"success": true}) 

this method unit testing:

@mock.patch('stripe.customer.retrieve') @mock.patch('stripe.customer.create') def test_add_card(self,create_mock,retrieve_mock):     response = {         'default_card': none,         'cards': {             "count": 0,             "data": []         }     }      # save_mock.return_value = response     create_mock.return_value = response     retrieve_mock.return_value = response      self.api_client.client.login(username = self.username, password = self.password)     res = self.api_client.post('/biz/api/auth/card/add')      print res 

now stripe.customer.retrieve being mocked properly. not able mock customer.sources.create. stuck on this.

this right way of doing it:

@mock.patch('stripe.customer.retrieve') def test_add_card_failure(self, retrieve_mock):     data = {         'name': "shubham",         'cvc': 123,         'number': "4242424242424242",         'expiry': "12/23",     }     e = carderror("card error", "", "")     retrieve_mock.return_value.sources.create.return_value = e      self.api_client.client.login(username=self.username, password=self.password)      res = self.api_client.post('/biz/api/auth/card/add', data=data)      self.assertequal(self.deserialize(res)['success'], false) 

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -