Skip to content

Commit a514941

Browse files
authored
Stub EntityTypeManagerInterface::getDefinition for conditional null return (#883)
1 parent 361eb2f commit a514941

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Drupal\Core\Entity;
4+
5+
interface EntityTypeManagerInterface {
6+
/**
7+
* @return ($exception_on_invalid is true ? EntityTypeInterface : EntityTypeInterface|null)
8+
*/
9+
public function getDefinition(string $entity_type_id, bool $exception_on_invalid = TRUE);
10+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace mglaman\PHPStanDrupal\Tests\Type;
4+
5+
use mglaman\PHPStanDrupal\Tests\AdditionalConfigFilesTrait;
6+
use PHPStan\Testing\TypeInferenceTestCase;
7+
8+
final class EntityTypeManagerGetDefinitionTypeTest extends TypeInferenceTestCase
9+
{
10+
use AdditionalConfigFilesTrait;
11+
12+
public static function dataFileAsserts(): iterable
13+
{
14+
yield from self::gatherAssertTypes(__DIR__ . '/data/entity-type-manager-definition.php');
15+
}
16+
17+
/**
18+
* @dataProvider dataFileAsserts
19+
* @param string $assertType
20+
* @param string $file
21+
* @param mixed ...$args
22+
*/
23+
public function testFileAsserts(
24+
string $assertType,
25+
string $file,
26+
...$args
27+
): void
28+
{
29+
$this->assertFileAsserts($assertType, $file, ...$args);
30+
}
31+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace EntityTypeManagerGetDefinition;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
$etm = \Drupal::entityTypeManager();
8+
9+
// When $exception_on_invalid is true (default), it should always return EntityTypeInterface
10+
assertType('Drupal\Core\Entity\EntityTypeInterface', $etm->getDefinition('node'));
11+
assertType('Drupal\Core\Entity\EntityTypeInterface', $etm->getDefinition('node', TRUE));
12+
13+
// When $exception_on_invalid is false, it may return EntityTypeInterface or null
14+
assertType('Drupal\Core\Entity\EntityTypeInterface|null', $etm->getDefinition('non_existent_entity_type', FALSE));
15+
16+
// Test with variable parameter
17+
$exception_on_invalid = false;
18+
assertType('Drupal\Core\Entity\EntityTypeInterface|null', $etm->getDefinition('some_entity_type', $exception_on_invalid));
19+
20+
$exception_on_invalid = true;
21+
assertType('Drupal\Core\Entity\EntityTypeInterface', $etm->getDefinition('some_entity_type', $exception_on_invalid));

0 commit comments

Comments
 (0)