def test_decodeSignedData_nonBase64Data(self): with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = '3ww', Ds_Signature = self.signature, Ds_SignatureVersion = self.signatureversion, ) msg = cm.exception.args[0] self.assertEqual(msg, 'Unable to decode base 64')
def test_decodeSignedData_badVersion(self): with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = self.encodeddata, Ds_Signature = self.signature, Ds_SignatureVersion = 'bad', ) msg = cm.exception.args[0] self.assertEqual(msg, 'Unsupported signature version')
def test_decodeSignedData_badSignature(self): json_data = '{"Ds_Order":"777"}' with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = base64.urlsafe_b64encode(json_data), Ds_Signature = self.signature, Ds_SignatureVersion = self.signatureversion, ) msg = cm.exception.args[0] self.assertEqual(msg, 'Bad signature')
def test_decodeSignedData_misingOrder(self): json_data = '{}' with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = base64.urlsafe_b64encode(json_data), Ds_Signature = self.signature, Ds_SignatureVersion = self.signatureversion, ) msg = cm.exception.args[0] self.assertEqual(msg, 'Missing Ds_Order attribute')
def test_decodeSignedData_badJson(self): json_data = "{bad json}" with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = base64.urlsafe_b64encode(json_data), Ds_Signature = self.signature, Ds_SignatureVersion = self.signatureversion, ) msg = cm.exception.args[0] self.assertEqual(msg, 'Bad JSON format')
def test_decodeSignedData_badParam(self): json_data = '{"Ds_Order":"666", "Bad":"value"}' base64_data = base64.urlsafe_b64encode(json_data) signature = signPayload(self.secret, base64_data, urlsafe=True) with self.assertRaises(SignatureError) as cm: decodeSignedData( self.merchantkey, Ds_MerchantParameters = base64_data, Ds_Signature = signature, Ds_SignatureVersion = self.signatureversion, ) msg = cm.exception.args[0] self.assertEqual(msg, "Bad parameter 'Bad'")
def test_decodeSignedData_whenAllOk(self): data = decodeSignedData( self.merchantkey, Ds_MerchantParameters = self.encodeddata, Ds_Signature = self.signature, Ds_SignatureVersion = self.signatureversion, ) self.assertEqual(data, dict( Ds_Order = '666', ))
def test_decodeSignedData_unicode(self): json_data = '{"DS_ORDER":"666"}' base64_data = base64.urlsafe_b64encode(json_data) signature = signPayload(self.secret, base64_data, urlsafe=True) data = decodeSignedData( self.merchantkey, Ds_MerchantParameters = base64_data.decode('ascii'), Ds_Signature = signature.decode('ascii'), Ds_SignatureVersion = self.signatureversion.decode('ascii'), ) self.assertEqual(data, dict( Ds_Order = '666', ))
def test_decodeSignedData_realData(self): data = decodeSignedData( config.redsystest['merchantkey'], Ds_Signature = u'k6jn15PV1PyoTOAkiHVIPixOERFT9CeKOERtAJkcsMg=', Ds_MerchantParameters = u'eyJEc19EYXRlIjoiMTklMkYwMSUyRjIwMTYiLCJEc19Ib3VyIjoiMjIlM0EwNCIsIkRzX1NlY3VyZVBheW1lbnQiOiIxIiwiRHNfQ2FyZF9Db3VudHJ5IjoiNzI0IiwiRHNfQW1vdW50IjoiMTAwMDAiLCJEc19DdXJyZW5jeSI6Ijk3OCIsIkRzX09yZGVyIjoiMjAxNjQ5NDU1YjZmIiwiRHNfTWVyY2hhbnRDb2RlIjoiMTQyMDAzNzQ4IiwiRHNfVGVybWluYWwiOiIwMDEiLCJEc19SZXNwb25zZSI6IjAwMDAiLCJEc19NZXJjaGFudERhdGEiOiJDT0JSQU1FTlQrUVVPVEErU09DSSIsIkRzX1RyYW5zYWN0aW9uVHlwZSI6IjAiLCJEc19Db25zdW1lckxhbmd1YWdlIjoiMyIsIkRzX0F1dGhvcmlzYXRpb25Db2RlIjoiMjAxMzg4In0=', Ds_SignatureVersion = u'HMAC_SHA256_V1', ) self.assertEqual({ 'Ds_Amount': u'10000', 'Ds_AuthorisationCode': u'201388', 'Ds_Card_Country': u'724', 'Ds_ConsumerLanguage': u'3', 'Ds_Currency': u'978', 'Ds_Date': u'19%2F01%2F2016', 'Ds_Hour': u'22%3A04', 'Ds_MerchantCode': u'142003748', 'Ds_MerchantData': u'COBRAMENT+QUOTA+SOCI', 'Ds_Order': u'201649455b6f', 'Ds_Response': u'0000', 'Ds_SecurePayment': u'1', 'Ds_Terminal': u'001', 'Ds_TransactionType': u'0', }, data) self.assertTrue('Ds_Order' in data) # TODO failingopdata = { "Ds_Date":"19%2F01%2F2016", "Ds_Hour":"23%3A02", "Ds_SecurePayment":"0", "Ds_Card_Country":"0", "Ds_Amount":"10000", "Ds_Currency":"978", "Ds_Order":"2016b99271e7", "Ds_MerchantCode":"142003748", "Ds_Terminal":"001", "Ds_Response":"0180", "Ds_MerchantData":"COBRAMENT+QUOTA+SOCI", "Ds_TransactionType":"0", "Ds_ConsumerLanguage":"3", "Ds_ErrorCode":"SIS0093", "Ds_AuthorisationCode":"++++++", }