commerce-8.x-2.8/modules/payment/tests/src/Unit/CreditCardTest.php
modules/payment/tests/src/Unit/CreditCardTest.php
<?php namespace Drupal\Tests\commerce_payment\Unit; use Drupal\commerce_payment\CreditCard; use Drupal\commerce_payment\CreditCardType; use Drupal\Tests\UnitTestCase; /** * @coversDefaultClass \Drupal\commerce_payment\CreditCard * @group commerce */ class CreditCardTest extends UnitTestCase { /** * @covers ::getTypes */ public function testGetTypes() { $types = CreditCard::getTypes(); $this->assertInternalType('array', $types); foreach ($types as $key => $type) { $this->assertInstanceOf(CreditCardType::class, $type); $this->assertEquals($key, $type->getId()); } } /** * @covers ::getType */ public function testGetInvalidType() { $this->setExpectedException(\InvalidArgumentException::class, 'Invalid credit card type "monkey"'); CreditCard::getType("monkey"); } /** * @covers ::getType */ public function testGetType() { $visa = CreditCard::getType('visa'); $this->assertInstanceOf(CreditCardType::class, $visa); $this->assertEquals('visa', $visa->getId()); } /** * @covers ::detectType * @covers ::matchPrefix * @covers ::validateNumber * @covers ::validateLuhn * @dataProvider cardsProvider */ 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); } } /** * @covers ::validateExpirationDate * @dataProvider expirationDateProvider */ public function testValidateExpirationDate($month, $year, $valid) { $result = CreditCard::validateExpirationDate($month, $year); $this->assertEquals($valid, $result); } /** * @covers ::calculateExpirationTimestamp */ public function testCalculateExpirationTimestamp() { $timestamp = CreditCard::calculateExpirationTimestamp(12, 2012); $date = date('Y-m-d H:i:s', $timestamp); $expected_date = date('2012-12-31 00:00:00'); $this->assertEquals($expected_date, $date); } /** * @covers ::validateSecurityCode * @dataProvider securityCodeProvider */ public function testsValidateSecurityCode($security_code, $type, $valid) { $type = CreditCard::getType($type); $result = CreditCard::validateSecurityCode($security_code, $type); $this->assertEquals($valid, $result); } /** * Data provider for ::testValidateNumber. * * @return array * A list of testValidateNumber function arguments. */ public function cardsProvider() { return [ // Non-numeric value. ['invalid', NULL, FALSE], // Invalid length. [41111111111111111, 'visa', FALSE], // Fails luhn check. [41111111111111112, 'visa', FALSE], // Valid numbers. [4111111111111111, 'visa', TRUE], [6759649826438453, 'maestro', TRUE], [3528000700000000, 'jcb', TRUE], [5555555555554444, 'mastercard', TRUE], [36700102000000, 'dinersclub', TRUE], [6011000400000000, 'discover', TRUE], [6208205838887174, 'unionpay', TRUE], [374251018720018, 'amex', TRUE], ]; } /** * Data provider for ::testValidateExpirationDate. * * @return array * A list of testValidateExpirationDate function arguments. */ public function expirationDateProvider() { return [ // Invalid month. [0, 2020, FALSE], [13, 2020, FALSE], // Invalid year. [10, 2012, FALSE], // Valid month and year. [date('n'), date('Y'), TRUE], ]; } /** * Data provider for ::testValidateSecurityCode. * * @return array * A list of testValidateSecurityCode function arguments. */ public function securityCodeProvider() { return [ // Invalid lengths. [1, 'visa', FALSE], [1111, 'visa', FALSE], // Non-numeric inputs. ['llama', 'visa', FALSE], ['12.4', 'visa', FALSE], // Valid number. [111, 'visa', TRUE], ]; } }