allow vendord
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s

This commit is contained in:
2026-03-30 14:54:57 +07:00
parent 66aed7c4e8
commit b5e3a778ce
21316 changed files with 2777892 additions and 13 deletions

View File

@@ -0,0 +1,272 @@
<?php
namespace Omnipay\Stripe\Message;
use Omnipay\Common\CreditCard;
use Omnipay\Common\ItemBag;
use Omnipay\Tests\TestCase;
class AuthorizeRequestTest extends TestCase
{
/**
* @var AuthorizeRequest
*/
private $request;
public function setUp()
{
$this->request = new AuthorizeRequest($this->getHttpClient(), $this->getHttpRequest());
$this->request->initialize(
array(
'amount' => '12.00',
'currency' => 'USD',
'card' => $this->getValidCard(),
'description' => 'Order #42',
'metadata' => array(
'foo' => 'bar',
),
'applicationFee' => '1.00'
)
);
}
public function testGetData()
{
$data = $this->request->getData();
$this->assertSame(1200, $data['amount']);
$this->assertSame('usd', $data['currency']);
$this->assertSame('Order #42', $data['description']);
$this->assertSame('false', $data['capture']);
$this->assertSame(array('foo' => 'bar'), $data['metadata']);
$this->assertSame(100, $data['application_fee']);
}
public function testDataWithLevel3()
{
$this->request->setItems([
[
'name' => 'Cupcakes',
'description' => 'Yummy Cupcakes',
'price' => 4,
'quantity' => 2,
'taxes' => 0.4
],
[
'name' => 'Donuts',
'description' => 'A dozen donuts',
'price' => 1.5,
'quantity' => 12,
'discount' => 1.8,
'taxes' => 0.81
]
]);
$this->request->setTransactionId('ORD42-P1');
$this->request->setAmount(25.41);
$data = $this->request->getData();
$this->assertSame('Order #42', $data['description']);
$expectedLevel3 = [
'merchant_reference' => 'ORD42-P1',
'line_items' => [
[
'product_code' => 'Cupcakes',
'product_description' => 'Yummy Cupcakes',
'unit_cost' => 400,
'quantity' => 2,
'tax_amount' => 40,
],
[
'product_code' => 'Donuts',
'product_description' => 'A dozen donuts',
'unit_cost' => 150,
'quantity' => 12,
'discount_amount' => 180,
'tax_amount' => 81,
]
]
];
$this->assertEquals($expectedLevel3, $data['level3']);
}
public function testDataWithInvalidLevel3()
{
$this->request->setItems([
[
'name' => 'Cupcakes',
'description' => 'Yummy Cupcakes',
'price' => 4,
'quantity' => 2,
'taxes' => 0.4
],
[
'name' => 'Donuts',
'description' => 'A dozen donuts',
'price' => 1.5,
'quantity' => 12,
'discount' => 1.8,
'taxes' => 0.8
]
]);
$this->request->setTransactionId('ORD42-P1');
$this->request->setAmount(25.41);
$data = $this->request->getData();
$this->assertArrayNotHasKey('level3', $data,
'should not include level 3 data if the line items do not add up to the amount');
}
/**
* @expectedException \Omnipay\Common\Exception\InvalidRequestException
* @expectedExceptionMessage The source parameter is required
*/
public function testCardRequired()
{
$this->request->setCard(null);
$this->request->getData();
}
public function testDataWithCustomerReference()
{
$this->request->setCard(null);
$this->request->setCustomerReference('abc');
$data = $this->request->getData();
$this->assertSame('abc', $data['customer']);
}
public function testDataWithCardReference()
{
$this->request->setCustomerReference('abc');
$this->request->setCardReference('xyz');
$data = $this->request->getData();
$this->assertSame('abc', $data['customer']);
$this->assertSame('xyz', $data['source']);
}
public function testDataWithStatementDescriptor()
{
$this->request->setStatementDescriptor('OMNIPAY');
$data = $this->request->getData();
$this->assertSame('OMNIPAY', $data['statement_descriptor']);
}
public function testDataWithSourceAndDestination()
{
$this->request->setSource('abc');
$this->request->setDestination('xyz');
$data = $this->request->getData();
$this->assertSame('abc', $data['source']);
$this->assertSame('xyz', $data['destination']);
}
public function testDataWithToken()
{
$this->request->setCustomerReference('abc');
$this->request->setToken('xyz');
$data = $this->request->getData();
$this->assertSame('abc', $data['customer']);
$this->assertSame('xyz', $data['source']);
}
public function testDataWithCard()
{
$card = $this->getValidCard();
$this->request->setCard($card);
$data = $this->request->getData();
$this->assertSame($card['number'], $data['source']['number']);
}
public function testDataWithTracks()
{
$cardData = $this->getValidCard();
$tracks = "%25B4242424242424242%5ETESTLAST%2FTESTFIRST%5E1505201425400714000000%3F";
$cardData['tracks'] = $tracks;
unset($cardData['cvv']);
unset($cardData['billingPostcode']);
$this->request->setCard(new CreditCard($cardData));
$data = $this->request->getData();
$this->assertSame($tracks, $data['source']['swipe_data']);
$this->assertCount(2, $data['source'], "Swipe data should be present. All other fields are not required");
// If there is any mismatch between the track data and the parsed data, Stripe rejects the transaction, so it's
// best to suppress fields that is already present in the track data.
$this->assertArrayNotHasKey('number', $data, 'Should not send card number for card present charge');
$this->assertArrayNotHasKey('exp_month', $data, 'Should not send expiry month for card present charge');
$this->assertArrayNotHasKey('exp_year', $data, 'Should not send expiry year for card present charge');
$this->assertArrayNotHasKey('name', $data, 'Should not send name for card present charge');
// Billing address is not accepted for card present transactions.
$this->assertArrayNotHasKey('address_line1', $data, 'Should not send billing address for card present charge');
$this->assertArrayNotHasKey('address_line2', $data, 'Should not send billing address for card present charge');
$this->assertArrayNotHasKey('address_city', $data, 'Should not send billing address for card present charge');
$this->assertArrayNotHasKey('address_state', $data, 'Should not send billing address for card present charge');
}
public function testDataWithTracksAndZipCVVManuallyEntered()
{
$cardData = $this->getValidCard();
$tracks = "%25B4242424242424242%5ETESTLAST%2FTESTFIRST%5E1505201425400714000000%3F";
$cardData['tracks'] = $tracks;
$this->request->setCard(new CreditCard($cardData));
$data = $this->request->getData();
$this->assertSame($tracks, $data['source']['swipe_data']);
$this->assertSame($cardData['cvv'], $data['source']['cvc']);
$this->assertSame($cardData['billingPostcode'], $data['source']['address_zip']);
$this->assertCount(4, $data['source'], "Swipe data, cvv and zip code should be present");
}
public function testSendSuccess()
{
$this->setMockHttpResponse('PurchaseSuccess.txt');
$response = $this->request->send();
$this->assertTrue($response->isSuccessful());
$this->assertFalse($response->isRedirect());
$this->assertSame('ch_1IU9gcUiNASROd', $response->getTransactionReference());
$this->assertSame('card_16n3EU2baUhq7QENSrstkoN0', $response->getCardReference());
$this->assertSame('req_8PDHeZazN2LwML', $response->getRequestId());
$this->assertNull($response->getMessage());
}
public function testSendError()
{
$this->setMockHttpResponse('PurchaseFailure.txt');
$response = $this->request->send();
$this->assertFalse($response->isSuccessful());
$this->assertFalse($response->isRedirect());
$this->assertSame('ch_1IUAZQWFYrPooM', $response->getTransactionReference());
$this->assertNull($response->getCardReference());
$this->assertSame('Your card was declined', $response->getMessage());
}
public function testSetItems()
{
$items = new ItemBag([
[
'amount' => '120.00',
'currency' => 'USD',
'card' => $this->getValidCard(),
'description' => 'Order #42',
'metadata' => [
'foo' => 'bar',
],
'applicationFee' => '2.00'
]
]);
$this->request->setItems($items);
$this->assertEquals($items, $this->request->getItems());
}
}