class SendTransactionPaymentTestCase(TestCase):

    def setUp(self):
        self.id = "BB55ED929FF749E6BE5A835E4C811B77"
        self.client = TransactionClient(api_store="teststore",
                                        api_key="testkey",
                                        api_token="testtoken")
        self.url = "https://teststore.vtexpayments.com.br/api/pvt/"\
                   "transactions/{}/payments".format(self.id)
        self.data = [
            {
                "paymentSystem": 2,
                "paymentSystemName": "Visa",
                "groupName": "creditCard",
                "currencyCode": "BRL",
                "installments": 1,
                "value": 100,
                "installmentsInterestRate": 0,
                "installmentsValue": 100,
                "referenceValue": 100,
                "fields": {
                    "accountId": "AJA4CF6058ED44BD9A3637F43C0BAA5Y",
                    "validationCode": "123"
                },
                "transaction": {
                    "id": self.id,
                    "merchantName": "test"
                }
            }
        ]

    @responses.activate
    def test_ok(self):
        responses.add(responses.POST,
                      self.url,
                      body="",
                      status=200,
                      content_type='text/json')

        result = self.client.send_payment(self.id, self.data)
        self.assertEqual(result, {})

    @responses.activate
    def test_invalid_data(self):
        body, response_data = mockup.send_payment_invalid_data_error(
            self.id)
        responses.add(responses.POST,
                      self.url,
                      body=body,
                      status=400,
                      content_type='text/json')

        with self.assertRaises(faults.InvalidDataError) as context:
            self.client.send_payment(self.id, self.data)

        self.assertIn("Error when receiving payments for transaction",
                      context.exception.message)
        self.assertEqual(context.exception.code, "1414")