233 lines
6.4 KiB
PHP
233 lines
6.4 KiB
PHP
<?php
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* EntityTest Class Doc Comment
|
|
*
|
|
* @package MercadoPago
|
|
*/
|
|
class PaymentTest extends TestCase
|
|
{
|
|
|
|
public static function setUpBeforeClass()
|
|
{
|
|
MercadoPago\SDK::cleanCredentials();
|
|
|
|
if (file_exists(__DIR__ . '/../../.env')) {
|
|
$dotenv = new Dotenv\Dotenv(__DIR__, '../../.env');
|
|
$dotenv->load();
|
|
}
|
|
|
|
MercadoPago\SDK::setAccessToken(getenv('ACCESS_TOKEN'));
|
|
MercadoPago\SDK::setMultipleCredentials(
|
|
array(
|
|
"MLA" => "MLA_ACCESS_TOKEN"
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
public function testCreateApprovedPayment()
|
|
{
|
|
|
|
$payment = new MercadoPago\Payment();
|
|
$payment->transaction_amount = 141;
|
|
$payment->token = $this->SingleUseCardToken('approved');
|
|
$payment->description = "Ergonomic Silk Shirt";
|
|
$payment->installments = 1;
|
|
$payment->payment_method_id = "master";
|
|
$payment->payer = array(
|
|
"email" => getenv('USER_EMAIL')
|
|
);
|
|
$payment->external_reference = "reftest";
|
|
$payment->save();
|
|
|
|
$this->assertEquals($payment->status, 'approved');
|
|
|
|
return $payment;
|
|
|
|
}
|
|
|
|
// /**
|
|
// * @depends testCreateApprovedPayment
|
|
// */
|
|
// public function testRefundPayment(MercadoPago\Payment $payment_created_previously)
|
|
// {
|
|
|
|
// $id = $payment_created_previously->id;
|
|
|
|
// $refund = new MercadoPago\Refund();
|
|
// $refund->payment_id = $id;
|
|
// $refund->save();
|
|
|
|
// sleep(15);
|
|
|
|
// $payment = MercadoPago\Payment::find_by_id($id);
|
|
|
|
// $this->assertEquals("refunded", $payment->status);
|
|
|
|
// }
|
|
|
|
|
|
public function testCreateAnInvalidPayment()
|
|
{
|
|
|
|
$payment = new MercadoPago\Payment();
|
|
$payment->transaction_amount = -200;
|
|
|
|
$payment_status = $payment->save();
|
|
|
|
$this->assertFalse($payment_status);
|
|
$this->assertEquals($payment->error->causes[0]->description, "transaction_amount must be positive");
|
|
|
|
}
|
|
|
|
public function testSearchWithInvalidQueryFilters()
|
|
{
|
|
|
|
$filters = array(
|
|
"incorrect_param" => "000"
|
|
);
|
|
|
|
try {
|
|
$payments = MercadoPago\Payment::search($filters);
|
|
} catch(Exception $e) {
|
|
$this->assertEquals($e->getMessage(), "the attribute incorrect_param is not a possible param");
|
|
}
|
|
|
|
}
|
|
|
|
public function testCreatePendingPayment()
|
|
{
|
|
|
|
$payment = new MercadoPago\Payment();
|
|
$payment->transaction_amount = 141;
|
|
$payment->token = $this->SingleUseCardToken('in_process');
|
|
$payment->description = "Ergonomic Silk Shirt";
|
|
$payment->installments = 1;
|
|
$payment->payment_method_id = "master";
|
|
$payment->payer = array(
|
|
"email" => getenv('USER_EMAIL')
|
|
);
|
|
$payment->external_reference = "reftest";
|
|
$payment->save();
|
|
|
|
$this->assertEquals($payment->status, 'in_process');
|
|
|
|
return $payment;
|
|
|
|
}
|
|
|
|
/**
|
|
* @depends testCreatePendingPayment
|
|
*/
|
|
public function testFindPaymentById(MercadoPago\Payment $payment_created_previously) {
|
|
$payment = MercadoPago\Payment::find_by_id($payment_created_previously->id);
|
|
$this->assertEquals($payment->id, $payment_created_previously->id);
|
|
}
|
|
|
|
/**
|
|
* @depends testCreatePendingPayment
|
|
*/
|
|
public function testFindPaymentByNonExistentId(MercadoPago\Payment $payment_created_previously) {
|
|
$payment = MercadoPago\Payment::find_by_id("123456");
|
|
$this->assertEquals($payment, null);
|
|
}
|
|
|
|
/**
|
|
* @depends testCreatePendingPayment
|
|
*/
|
|
public function testPaymentsSearch(MercadoPago\Payment $payment_created_previously) {
|
|
|
|
$filters = array(
|
|
"external_reference" => $payment_created_previously->external_reference
|
|
);
|
|
|
|
$payments = MercadoPago\Payment::search($filters);
|
|
$payments = $payments->getArrayCopy();
|
|
$payment = end($payments);
|
|
|
|
$this->assertEquals($payment->external_reference, $payment_created_previously->external_reference);
|
|
|
|
}
|
|
|
|
/**
|
|
* @depends testCreatePendingPayment
|
|
*/
|
|
public function testCancelPayment(MercadoPago\Payment $payment_created_previously) {
|
|
$payment_created_previously->status = "cancelled";
|
|
$payment_created_previously->update();
|
|
|
|
sleep(15);
|
|
|
|
$payment = MercadoPago\Payment::find_by_id($payment_created_previously->id);
|
|
$this->assertEquals("cancelled", $payment->status);
|
|
|
|
}
|
|
|
|
public function testPaymentWithCustomAccessToken() {
|
|
$payment = new MercadoPago\Payment();
|
|
|
|
$options = array(
|
|
"custom_access_token" => "MLA"
|
|
);
|
|
|
|
$payment_status = $payment->save($options);
|
|
|
|
$this->assertFalse($payment_status); // Marlformed access token error
|
|
|
|
$payment_status = $payment->save();
|
|
|
|
$this->assertFalse($payment_status);
|
|
|
|
|
|
}
|
|
|
|
|
|
private function SingleUseCardToken($status){
|
|
|
|
$cards_name_for_status = array(
|
|
"approved" => "APRO",
|
|
"in_process" => "CONT",
|
|
"call_for_auth" => "CALL",
|
|
"not_founds" => "FUND",
|
|
"expirated" => "EXPI",
|
|
"form_error" => "FORM",
|
|
"general_error" => "OTHE",
|
|
);
|
|
|
|
$i_current_month = intval(date('m'));
|
|
$i_current_year = intval(date('Y'));
|
|
|
|
$security_code = rand(111, 999);
|
|
$expiration_month = rand($i_current_month, 12);
|
|
$expiration_year = rand($i_current_year + 2, 2999);
|
|
$dni = rand(11111111, 99999999);
|
|
|
|
$payload = array(
|
|
"json_data" => array(
|
|
"card_number" => "5031433215406351",
|
|
"security_code" => (string)$security_code,
|
|
"expiration_month" => str_pad($expiration_month, 2, '0', STR_PAD_LEFT),
|
|
"expiration_year" => str_pad($expiration_year, 4, '0', STR_PAD_LEFT),
|
|
"cardholder" => array(
|
|
"name" => $cards_name_for_status[$status],
|
|
"identification" => array(
|
|
"type" => "DNI",
|
|
"number" => (string)$dni
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
$response = MercadoPago\SDK::post('/v1/card_tokens', $payload);
|
|
|
|
return $response['body']['id'];
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
?>
|