1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM;
use Doctrine\ORM\ORMInvalidArgumentException;
use PHPUnit\Framework\TestCase;
use stdClass;
use Stringable;
use function spl_object_id;
use function uniqid;
/** @covers \Doctrine\ORM\ORMInvalidArgumentException */
class ORMInvalidArgumentExceptionTest extends TestCase
{
/**
* @param mixed $value
*
* @dataProvider invalidEntityNames
*/
public function testInvalidEntityName($value, string $expectedMessage): void
{
$exception = ORMInvalidArgumentException::invalidEntityName($value);
self::assertInstanceOf(ORMInvalidArgumentException::class, $exception);
self::assertSame($expectedMessage, $exception->getMessage());
}
/** @psalm-return list<array{mixed, string}> */
public function invalidEntityNames(): array
{
return [
[null, 'Entity name must be a string, null given'],
[true, 'Entity name must be a string, bool given'],
[123, 'Entity name must be a string, int given'],
[123.45, 'Entity name must be a string, float given'],
[new stdClass(), 'Entity name must be a string, stdClass given'],
];
}
/** @dataProvider newEntitiesFoundThroughRelationshipsErrorMessages */
public function testNewEntitiesFoundThroughRelationships(array $newEntities, string $expectedMessage): void
{
$exception = ORMInvalidArgumentException::newEntitiesFoundThroughRelationships($newEntities);
self::assertInstanceOf(ORMInvalidArgumentException::class, $exception);
self::assertSame($expectedMessage, $exception->getMessage());
}
public function newEntitiesFoundThroughRelationshipsErrorMessages(): array
{
$stringEntity3 = uniqid('entity3', true);
$entity1 = new stdClass();
$entity2 = new stdClass();
$entity3 = $this->createMock(Stringable::class);
$association1 = [
'sourceEntity' => 'foo1',
'fieldName' => 'bar1',
'targetEntity' => 'baz1',
];
$association2 = [
'sourceEntity' => 'foo2',
'fieldName' => 'bar2',
'targetEntity' => 'baz2',
];
$association3 = [
'sourceEntity' => 'foo3',
'fieldName' => 'bar3',
'targetEntity' => 'baz3',
];
$entity3->method('__toString')->willReturn($stringEntity3);
return [
'one entity found' => [
[
[
$association1,
$entity1,
],
],
'A new entity was found through the relationship \'foo1#bar1\' that was not configured to cascade '
. 'persist operations for entity: stdClass@' . spl_object_id($entity1)
. '. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity '
. 'or configure cascade persist this association in the mapping for example '
. '@ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem '
. 'implement \'baz1#__toString()\' to get a clue.',
],
'two entities found' => [
[
[
$association1,
$entity1,
],
[
$association2,
$entity2,
],
],
'Multiple non-persisted new entities were found through the given association graph:' . "\n\n"
. ' * A new entity was found through the relationship \'foo1#bar1\' that was not configured to '
. 'cascade persist operations for entity: stdClass@' . spl_object_id($entity1) . '. '
. 'To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity '
. 'or configure cascade persist this association in the mapping for example '
. '@ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem '
. 'implement \'baz1#__toString()\' to get a clue.' . "\n"
. ' * A new entity was found through the relationship \'foo2#bar2\' that was not configured to '
. 'cascade persist operations for entity: stdClass@' . spl_object_id($entity2) . '. To solve '
. 'this issue: Either explicitly call EntityManager#persist() on this unknown entity or '
. 'configure cascade persist this association in the mapping for example '
. '@ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem '
. 'implement \'baz2#__toString()\' to get a clue.',
],
'two entities found, one is stringable' => [
[
[
$association3,
$entity3,
],
],
'A new entity was found through the relationship \'foo3#bar3\' that was not configured to cascade '
. 'persist operations for entity: ' . $stringEntity3
. '. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity '
. 'or configure cascade persist this association in the mapping for example '
. '@ManyToOne(..,cascade={"persist"}).',
],
];
}
}
|