def test_unmarshal_missing_headers(self):
     helper = self.__create_helper()
     InMemorySecretKeyStore.INSTANCE().store_secret_key(
         self.__KEY_ID, self.__SECRET_KEY)
     body = self.__read_resource("valid-body")
     self.assertRaises(SignatureValidationException, helper.unmarshal, body,
                       ())
 def test_unmarshal_string_invalid_signature(self):
     helper = self.__create_helper()
     InMemorySecretKeyStore.INSTANCE().store_secret_key(self.__KEY_ID,
                                                        self.__SECRET_KEY)
     body = self.__read_resource("valid-body")
     request_headers = [
         RequestHeader(self.__SIGNATURE_HEADER, "1" + self.__SIGNATURE),
         RequestHeader(self.__KEY_ID_HEADER, self.__KEY_ID)]
     self.assertRaises(SignatureValidationException, helper.unmarshal,
                       body, request_headers)
 def test_unmarshal_api_version_mismatch(self):
     marshaller = mock(Marshaller)
     event = WebhooksEvent()
     event.api_version = "v0"
     body = self.__read_resource("valid-body")
     when(marshaller).unmarshal(body, WebhooksEvent).thenReturn(event)
     helper = self.__create_helper(marshaller)
     InMemorySecretKeyStore.INSTANCE().store_secret_key(
         self.__KEY_ID, self.__SECRET_KEY)
     request_headers = [
         RequestHeader(self.__SIGNATURE_HEADER, self.__SIGNATURE),
         RequestHeader(self.__KEY_ID_HEADER, self.__KEY_ID)
     ]
     self.assertRaises(ApiVersionMismatchException, helper.unmarshal, body,
                       request_headers)
    def test_unmarshal_string_success(self):
        helper = self.__create_helper()
        InMemorySecretKeyStore.INSTANCE().store_secret_key(
            self.__KEY_ID, self.__SECRET_KEY)
        body_stream = self.__read_resource("valid-body")
        request_headers = [
            RequestHeader(self.__SIGNATURE_HEADER, self.__SIGNATURE),
            RequestHeader(self.__KEY_ID_HEADER, self.__KEY_ID)
        ]
        event = helper.unmarshal(body_stream, request_headers)
        self.assertEqual("v1", event.api_version)
        self.assertEqual("8ee793f6-4553-4749-85dc-f2ef095c5ab0", event.id)
        self.assertEqual("2017-02-02T11:24:14.040+0100", event.created)
        self.assertEqual("20000", event.merchant_id)
        self.assertEqual("payment.paid", event.type)

        self.assertIsNone(event.refund)
        self.assertIsNone(event.payout)
        self.assertIsNone(event.token)

        self.assertIsNotNone(event.payment)
        self.assertEqual("00000200000143570012", event.payment.id)
        self.assertIsNotNone(event.payment.payment_output)
        self.assertIsNotNone(event.payment.payment_output.amount_of_money)
        self.assertEqual(1000,
                         event.payment.payment_output.amount_of_money.amount)
        self.assertEqual(
            "EUR", event.payment.payment_output.amount_of_money.currency_code)
        self.assertIsNotNone(
            event.payment.payment_output.amount_of_money.currency_code)
        self.assertIsNotNone(event.payment.payment_output.references)
        self.assertEqual(
            "200001681810",
            event.payment.payment_output.references.payment_reference)
        self.assertEqual("bankTransfer",
                         event.payment.payment_output.payment_method)

        self.assertIsNone(
            event.payment.payment_output.card_payment_method_specific_output)
        self.assertIsNone(
            event.payment.payment_output.cash_payment_method_specific_output)
        self.assertIsNone(event.payment.payment_output.
                          direct_debit_payment_method_specific_output)
        self.assertIsNone(event.payment.payment_output.
                          invoice_payment_method_specific_output)
        self.assertIsNone(event.payment.payment_output.
                          redirect_payment_method_specific_output)
        self.assertIsNone(event.payment.payment_output.
                          sepa_direct_debit_payment_method_specific_output)
        self.assertIsNotNone(event.payment.payment_output.
                             bank_transfer_payment_method_specific_output)
        self.assertEqual(
            11, event.payment.payment_output.
            bank_transfer_payment_method_specific_output.payment_product_id)

        self.assertEqual("PAID", event.payment.status)
        self.assertIsNotNone(event.payment.status_output)
        self.assertEqual(False, event.payment.status_output.is_cancellable)
        self.assertEqual("COMPLETED",
                         event.payment.status_output.status_category)
        self.assertEqual(1000, event.payment.status_output.status_code)
        self.assertEqual(
            "20170202112414",
            event.payment.status_output.status_code_change_date_time)
        self.assertEqual(True, event.payment.status_output.is_authorized)
 def clear_public_key_cache(self):
     InMemorySecretKeyStore.INSTANCE().clear()
 def __create_helper(self, marshaller=DefaultMarshaller.INSTANCE()):
     return WebhooksHelper(marshaller, InMemorySecretKeyStore.INSTANCE())
 def test_create_helper(self):
     helper = Webhooks.create_helper(InMemorySecretKeyStore.INSTANCE())
     self.assertIs(DefaultMarshaller.INSTANCE(), helper.marshaller)
     self.assertIs(InMemorySecretKeyStore.INSTANCE(),
                   helper.secret_key_store)