object = $this->getMockBuilder(PaymentDataBankCard::class)->getMockForAbstractClass(); $this->assertTrue(class_exists(PaymentDataBankCard::class)); $this->assertInstanceOf(PaymentDataBankCard::class, $this->object); } /** * Test property "card" * @dataProvider validCardDataProvider * @param mixed $value * * @return void * @throws Exception */ public function testCard(mixed $value): void { $instance = $this->getTestInstance(); self::assertEmpty($instance->getCard()); self::assertEmpty($instance->card); $instance->setCard($value); if (!empty($value)) { self::assertNotNull($instance->getCard()); self::assertNotNull($instance->card); } else { self::assertEquals($value, is_array($value) ? $instance->getCard()->toArray() : $instance->getCard()); self::assertEquals($value, is_array($value) ? $instance->card->toArray() : $instance->card); } } /** * Test invalid property "card" * @dataProvider invalidCardDataProvider * @param mixed $value * @param string $exceptionClass * * @return void */ public function testInvalidCard(mixed $value, string $exceptionClass): void { $instance = $this->getTestInstance(); $this->expectException($exceptionClass); $instance->setCard($value); } /** * @return array[] * @throws Exception */ public function validCardDataProvider(): array { return [ [null], [new PaymentDataBankCardCard([ 'number' => Random::str(16, '0123456789'), 'expiry_year' => (string) Random::int(2023, 2045), 'expiry_month' => str_pad((string) Random::int(1, 12), 2, '0', STR_PAD_LEFT), 'cardholder' => Random::str(1, 26, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ \'-'), ])], [''], [[ 'number' => Random::str(16, '0123456789'), 'expiry_year' => (string) Random::int(2023, 2030), 'expiry_month' => str_pad((string) Random::int(1, 12), 2, '0', STR_PAD_LEFT), 'cardholder' => Random::str(1, 26, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ \'-'), ]], ]; } /** * @return array[] * @throws Exception */ public function invalidCardDataProvider(): array { $instance = $this->getTestInstance(); return $this->getInvalidDataProviderByType($instance->getValidator()->getRulesByPropName('_card')); } }