getTestInstance(); self::assertEquals($this->getExpectedType(), $instance->getType()); } /** * @dataProvider invalidTypeDataProvider */ public function testInvalidType(mixed $value): void { $this->expectException(InvalidArgumentException::class); new TestPaymentData($value); } /** * @dataProvider validSavedDataProvider */ public function testGetSetSaved(mixed $value): void { $instance = $this->getTestInstance(); self::assertFalse($instance->getSaved()); self::assertFalse($instance->saved); $instance->setSaved($value); if ($value) { self::assertTrue($instance->getSaved()); self::assertTrue($instance->saved); } else { self::assertFalse($instance->getSaved()); self::assertFalse($instance->saved); } $instance = $this->getTestInstance(); $instance->saved = $value; if ($value) { self::assertTrue($instance->getSaved()); self::assertTrue($instance->saved); } else { self::assertFalse($instance->getSaved()); self::assertFalse($instance->saved); } } /** * Test property "status" * @dataProvider validStatusDataProvider * @param mixed $value * * @return void * @throws Exception */ public function testStatus(mixed $value): void { $instance = $this->getTestInstance(); $instance->setStatus($value); self::assertNotNull($instance->getStatus()); self::assertNotNull($instance->status); self::assertEquals($value, $instance->getStatus()); self::assertEquals($value, $instance->status); } /** * Test invalid property "status" * @dataProvider invalidStatusDataProvider * @param mixed $value * @param string $exceptionClass * * @return void */ public function testInvalidStatus(mixed $value, string $exceptionClass): void { $instance = $this->getTestInstance(); $this->expectException($exceptionClass); $instance->setStatus($value); } /** * @return array[] * @throws Exception */ public function validStatusDataProvider(): array { $instance = $this->getTestInstance(); return $this->getValidDataProviderByType($instance->getValidator()->getRulesByPropName('_status')); } /** * @return array[] * @throws Exception */ public function invalidStatusDataProvider(): array { $instance = $this->getTestInstance(); return $this->getInvalidDataProviderByType($instance->getValidator()->getRulesByPropName('_status')); } /** * @dataProvider validIdDataProvider */ public function testGetSetId(mixed $value): void { $instance = $this->getTestInstance(); $instance->setId($value); if (empty($value)) { self::assertNull($instance->getId()); self::assertNull($instance->id); } else { self::assertEquals($value, $instance->getId()); self::assertEquals($value, $instance->id); } $instance = $this->getTestInstance(); $instance->id = $value; if (empty($value)) { self::assertNull($instance->getId()); self::assertNull($instance->id); } else { self::assertEquals($value, $instance->getId()); self::assertEquals($value, $instance->id); } } /** * @dataProvider validTitleDataProvider */ public function testGetSetTitle(mixed $value): void { $instance = $this->getTestInstance(); $instance->setTitle($value); if (empty($value)) { self::assertNull($instance->getTitle()); self::assertNull($instance->title); } else { self::assertEquals($value, $instance->getTitle()); self::assertEquals($value, $instance->title); } $instance = $this->getTestInstance(); $instance->title = $value; if (empty($value)) { self::assertNull($instance->getTitle()); self::assertNull($instance->title); } else { self::assertEquals($value, $instance->getTitle()); self::assertEquals($value, $instance->title); } } public static function invalidTypeDataProvider(): array { return [ [''], [null], [Random::str(40)], [0], ]; } public static function validSavedDataProvider(): array { return [ [true], [false], ]; } public static function validIdDataProvider(): array { return [ [null], [Random::str(2)], [Random::str(10)], [Random::str(100)], ]; } public static function validTitleDataProvider(): array { return [ [null], [Random::str(2, 2, '123456789ABCDEF')], [Random::str(2)], [Random::str(10)], [Random::str(100)], ]; } abstract protected function getTestInstance(): AbstractPaymentMethod; abstract protected function getExpectedType(): string; } class TestPaymentData extends AbstractPaymentMethod { public function __construct($type) { parent::__construct([]); $this->setType($type); } }