def test_successful_payment_creation(self):
        response = requests.Response()
        response._content = """{
  "orderNumber": "12345",
  "token": "secret_token",
  "url": "https://payment.verkkomaksut.fi/payment/load/token/secret_token"
}"""
        response.status_code = requests.codes.created

        client = Client()
        flexmock(client.session)
        client.session \
            .should_receive('post') \
            .with_args(
                'https://payment.verkkomaksut.fi/api-payment/create',
                data='{"orderNumber": "12345"}',
            ) \
            .and_return(response)

        payment = MockPayment(order_number='12345')
        assert client.create_payment(payment) == {
            'order_number':
            '12345',
            'token':
            'secret_token',
            'url':
            'https://payment.verkkomaksut.fi/payment/load/token/'
            'secret_token'
        }
 def test_validate_payment_receipt_parameters_fail(self):
     client = Client()
     flexmock(client) \
         .should_receive('_calculate_payment_receipt_hash') \
         .with_args('order_number', 'timestamp', 'paid', 'method') \
         .and_return('not_ok')
     assert not client._validate_payment_receipt_parameters(
         'authcode', 'order_number', 'timestamp', 'paid', 'method')
 def test_validate_payment_receipt_parameters_fail(self):
     client = Client()
     flexmock(client).should_receive("_calculate_payment_receipt_hash").with_args(
         "order_number", "timestamp", "paid", "method"
     ).and_return("not_ok")
     assert not client._validate_payment_receipt_parameters(
         "authcode", "order_number", "timestamp", "paid", "method"
     )
    def test_payment_creation_failure(self):
        response = requests.Response()
        response._content = """{
  "errorCode": "invalid-order-number",
  "errorMessage": "Missing or invalid order number"
}"""
        response.status_code = requests.codes.bad_request

        client = Client()
        flexmock(client.session)
        client.session.should_receive("post").with_args(
            "https://payment.verkkomaksut.fi/api-payment/create", data='{"orderNumber": "12345"}'
        ).and_return(response)

        payment = MockPayment()
        with raises(VerkkomaksutException) as exc_info:
            client.create_payment(payment)

        assert exc_info.value.code == "invalid-order-number"
        assert exc_info.value.message == "Missing or invalid order number"
    def test_successful_payment_creation(self):
        response = requests.Response()
        response._content = """{
  "orderNumber": "12345",
  "token": "secret_token",
  "url": "https://payment.verkkomaksut.fi/payment/load/token/secret_token"
}"""
        response.status_code = requests.codes.created

        client = Client()
        flexmock(client.session)
        client.session.should_receive("post").with_args(
            "https://payment.verkkomaksut.fi/api-payment/create", data='{"orderNumber": "12345"}'
        ).and_return(response)

        payment = MockPayment(order_number="12345")
        assert client.create_payment(payment) == {
            "order_number": "12345",
            "token": "secret_token",
            "url": "https://payment.verkkomaksut.fi/payment/load/token/" "secret_token",
        }
    def test_payment_creation_failure(self):
        response = requests.Response()
        response._content = """{
  "errorCode": "invalid-order-number",
  "errorMessage": "Missing or invalid order number"
}"""
        response.status_code = requests.codes.bad_request

        client = Client()
        flexmock(client.session)
        client.session \
            .should_receive('post') \
            .with_args(
                'https://payment.verkkomaksut.fi/api-payment/create',
                data='{"orderNumber": "12345"}',
            ) \
            .and_return(response)

        payment = MockPayment()
        with raises(VerkkomaksutException) as exc_info:
            client.create_payment(payment)

        assert exc_info.value.code == 'invalid-order-number'
        assert exc_info.value.message == 'Missing or invalid order number'
 def test_calculate_payment_receipt_hash(self):
     client = Client()
     hash_ = client._calculate_payment_receipt_hash('15153', '1176557554',
                                                    '012345ABCDE', '1')
     assert hash_ == '555E0C0DE304938AACA5D594DB72F315'
 def test_request_defines_api_version(self):
     client = Client()
     assert client.session.headers['X-Verkkomaksut-Api-Version'] == '1'
 def test_request_accepts_json(self):
     client = Client()
     assert client.session.headers['Accept'] == 'application/json'
 def test_request_content_type_is_json(self):
     client = Client()
     assert client.session.headers['Content-Type'] == 'application/json'
 def test_custom_merchant_credentials(self):
     client = Client(merchant_id='12345', merchant_secret='secret')
     assert client.session.auth == ('12345', 'secret')
 def test_defaults_to_merchant_test_account(self):
     client = Client()
     assert client.session.auth == \
         ('13466', '6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ')
 def test_calculate_payment_receipt_hash(self):
     client = Client()
     hash_ = client._calculate_payment_receipt_hash("15153", "1176557554", "012345ABCDE", "1")
     assert hash_ == "555E0C0DE304938AACA5D594DB72F315"