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
Post a Comment