View source
<?php
namespace Drupal\Tests\commerce_payment\Unit;
use Drupal\commerce_payment\CreditCard;
use Drupal\commerce_payment\CreditCardType;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Tests\UnitTestCase;
class CreditCardTest extends UnitTestCase {
public function testGetTypes() {
$types = CreditCard::getTypes();
$this
->assertIsArray($types);
foreach ($types as $key => $type) {
$this
->assertInstanceOf(CreditCardType::class, $type);
$this
->assertEquals($key, $type
->getId());
}
}
public function testGetInvalidType() {
$this
->expectException(\InvalidArgumentException::class);
$this
->expectExceptionMessage('Invalid credit card type "monkey"');
CreditCard::getType("monkey");
}
public function testGetType() {
$visa = CreditCard::getType('visa');
$this
->assertInstanceOf(CreditCardType::class, $visa);
$this
->assertEquals('visa', $visa
->getId());
}
public function testValidateNumber($number, $type, $valid) {
$detected_type = CreditCard::detectType($number);
if ($detected_type) {
$this
->assertEquals($detected_type
->getId(), $type);
$result = CreditCard::validateNumber($number, $detected_type);
$this
->assertEquals($valid, $result);
}
else {
$this
->assertEquals(NULL, $type);
}
}
public function testValidateExpirationDate($month, $year, $valid) {
$result = CreditCard::validateExpirationDate($month, $year);
$this
->assertEquals($valid, $result);
}
public function testCalculateExpirationTimestamp() {
$timestamp = CreditCard::calculateExpirationTimestamp(12, 2012);
$date = date('Y-m-d H:i:s', $timestamp);
$expected_date = date('2012-12-31 23:59:59');
$this
->assertEquals($expected_date, $date);
}
public function testsValidateSecurityCode($security_code, $type, $valid) {
$type = CreditCard::getType($type);
$result = CreditCard::validateSecurityCode($security_code, $type);
$this
->assertEquals($valid, $result);
}
public function cardsProvider() {
return [
[
'invalid',
NULL,
FALSE,
],
[
41111111111111111,
'visa',
FALSE,
],
[
41111111111111112,
'visa',
FALSE,
],
[
4111111111111111,
'visa',
TRUE,
],
[
6759649826438453,
'maestro',
TRUE,
],
[
3528000700000000,
'jcb',
TRUE,
],
[
5555555555554444,
'mastercard',
TRUE,
],
[
36700102000000,
'dinersclub',
TRUE,
],
[
6011000400000000,
'discover',
TRUE,
],
[
6208205838887174,
'unionpay',
TRUE,
],
[
374251018720018,
'amex',
TRUE,
],
];
}
public function expirationDateProvider() {
return [
[
0,
2020,
FALSE,
],
[
13,
2020,
FALSE,
],
[
10,
2012,
FALSE,
],
[
date('n'),
date('Y'),
TRUE,
],
];
}
public function securityCodeProvider() {
return [
[
1,
'visa',
FALSE,
],
[
1111,
'visa',
FALSE,
],
[
'llama',
'visa',
FALSE,
],
[
'12.4',
'visa',
FALSE,
],
[
111,
'visa',
TRUE,
],
];
}
public function testGetAvsResponseCodeMeanings() {
$response_meanings = CreditCard::getAvsResponseCodeMeanings();
$types = CreditCard::getTypes();
$this
->assertIsArray($response_meanings);
foreach ($response_meanings as $credit_card_type => $mapping) {
$this
->assertInstanceOf(CreditCardType::class, $types[$credit_card_type]);
$this
->assertIsArray($mapping);
foreach ($mapping as $code => $meaning) {
$this
->assertInstanceOf(TranslatableMarkup::class, $meaning);
}
}
}
}