def process_payment(): '''Process Payment Method :param CreditCardNumber(required): the CreditCardNumber of the Card. :type CreditCardNumber: string :param CardHolder(required): the Name of the Card Holder :type CardHolder: string :param ExpirationDate(required): the expiry date of the card in mm/yyyy :type ExpirationDate: string :param SecurityCode(optional): the SecurityCode of the Card (3 digit) :type SecurityCode: string :param Amount(required): the amount to be deducted from the card :type Amount: decimal :returns: message :rtype: dictionary ''' data = request.get_json() if data: try: data = dict(data) # Validate the Payload validate(data) # Init the ProcessPayment payment = ProcessPayment(data) # Execute the Use Payment Method result = payment.use_payment() return jsonify(result), 200 except (BadRequest, KeyError, exc.IntegrityError) as e: return make_error('failure', 400, str(e)) except Exception as e: return make_error('Internal Server Error', 500, 'Internal Server Error') else: return make_error('failure', 400, 'Please send card details')
def test_card_holder(self): # Test No CardHolder test_1 = { 'CreditCardNumber': '4242424242424242', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_1 = dict(test_1) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_1) assert ex.exception.message == "'CardHolder' is mandatory" # Test CardHolder Not string test_2 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 123, 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_2 = dict(test_2) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_2) assert ex.exception.message == 'Name should be a string' # Test Correct Details test_3 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'Test1', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_3 = dict(test_3) assert utils.validate(test_3) is None
def test_amount(self): test_amount = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2022', 'SecurityCode': '576', 'Amount': 512, } test_amount = dict(test_amount) # Test Positive Amount test_amount['Amount'] = 10 with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message == 'Amount Should be decimal' # Test Negative Amount test_amount['Amount'] = -10 with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message == 'Amount Should be decimal' test_amount['Amount'] = -10.10 with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message \ == 'Amount Should not be less than zero' # Test No Amount test_amount['Amount'] = None with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message == 'Amount Should be decimal' # Test Zero Amount test_amount['Amount'] = 0 with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message == 'Amount Should be decimal' # Test Decimal Amount test_amount['Amount'] = 100.12 assert utils.validate(test_amount) is None # Test Integer Amount test_amount['Amount'] = 100 with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_amount) assert ex.exception.message == 'Amount Should be decimal'
def test_security_code(self): # Test No Security Code test_1 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '02/2021', 'Amount': 512.88, } test_1 = dict(test_1) assert utils.validate(test_1) is None # Test Security Code not of length 3 test_2 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '02/2022', 'SecurityCode': '5766', 'Amount': 512.88, } test_2 = dict(test_2) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_2) assert ex.exception.message \ == 'Security Code must be of 3 digits' test_3 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '02/2022', 'SecurityCode': 'ad', 'Amount': 512.88, } test_3 = dict(test_3) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_3) assert ex.exception.message \ == 'Security Code must be of 3 digits' # Test Security Code Not a String test_3 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '02/2022', 'SecurityCode': 123, 'Amount': 512.88, } test_3 = dict(test_3) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_3) assert ex.exception.message \ == 'Security Code should be a string' # Test Correct Details test_4 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'Test1', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_4 = dict(test_4) assert utils.validate(test_4) is None
def test_expiry_date(self): # Test No Expiry Date test_1 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'SecurityCode': '576', 'Amount': 512.88, } test_1 = dict(test_1) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_1) assert ex.exception.message == "'ExpirationDate' is mandatory" # Test Past Expiry Date test_2 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '02/2018', 'SecurityCode': '576', 'Amount': 512.88, } test_2 = dict(test_2) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_2) assert ex.exception.message == 'Expire Date cannot be in past' # Test Invalid Date Format test_3 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '122020', 'SecurityCode': '576', 'Amount': 512.88, } test_3 = dict(test_3) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_3) assert ex.exception.message == 'Date is not Valid' test_4 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'TEst', 'ExpirationDate': '2020/12', 'SecurityCode': '576', 'Amount': 512.88, } test_4 = dict(test_4) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_4) assert ex.exception.message == 'Date is not Valid' # Test Correct Details test_5 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'Test1', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_5 = dict(test_5) assert utils.validate(test_5) is None
def test_card_number(self): # Test VISA Card test_1 = { 'CreditCardNumber': '4242424242424242', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_1 = dict(test_1) assert utils.validate(test_1) is None test_2 = { 'CreditCardNumber': '4012888888881881', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_2 = dict(test_2) assert utils.validate(test_2) is None # Test Master Card test_3 = { 'CreditCardNumber': '5555555555554444', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_3 = dict(test_3) assert utils.validate(test_3) is None test_4 = { 'CreditCardNumber': '5105105105105100', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_4 = dict(test_4) assert utils.validate(test_4) is None # Test American Express Card test_5 = { 'CreditCardNumber': '378282246310005', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_5 = dict(test_5) test = utils.validate(test_5) assert utils.validate(test_5) is None test_6 = { 'CreditCardNumber': '371449635398431', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_6 = dict(test_6) assert utils.validate(test_6) is None # Discover Card test_7 = { 'CreditCardNumber': '6011111111111117', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_7 = dict(test_7) assert utils.validate(test_7) is None test_8 = { 'CreditCardNumber': '6011000990139424', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_8 = dict(test_8) assert utils.validate(test_8) is None test_9 = { 'CreditCardNumber': 'tests', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_9 = dict(test_9) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_9) assert ex.exception.message \ == 'Please Enter a Valid Card Number' test_10 = { 'CreditCardNumber': '78979879789798798798798798798797', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_10 = dict(test_10) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_10) assert ex.exception.message \ == 'Please Enter a Valid Card Number' test_11 = { 'CreditCardNumber': 'tests798897987AFSDF@', 'CardHolder': 'Test Card Holder', 'ExpirationDate': '02/2021', 'SecurityCode': '576', 'Amount': 512.88, } test_11 = dict(test_11) with self.assertRaises(utils.BadRequest) as ex: utils.validate(test_11) assert ex.exception.message \ == 'Please Enter a Valid Card Number'