Add failing tests for #6531
Tests are based on examples from "Composite and Foreign Keys as Primary Key" tutorial: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html
This commit is contained in:
parent
a912fc09be
commit
23f4f03575
190
tests/Doctrine/Tests/ORM/Functional/Ticket/GH6531Test.php
Normal file
190
tests/Doctrine/Tests/ORM/Functional/Ticket/GH6531Test.php
Normal file
@ -0,0 +1,190 @@
|
||||
<?php
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
final class GH6531Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
protected function setUp() : void
|
||||
{
|
||||
parent::setup();
|
||||
|
||||
$this->setUpEntitySchema(
|
||||
[
|
||||
GH6531User::class,
|
||||
GH6531Address::class,
|
||||
GH6531Article::class,
|
||||
GH6531ArticleAttribute::class,
|
||||
GH6531Order::class,
|
||||
GH6531OrderItem::class,
|
||||
GH6531Product::class,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group 6531
|
||||
*/
|
||||
public function testSimpleDerivedIdentity() : void
|
||||
{
|
||||
$user = new GH6531User();
|
||||
$address = new GH6531Address();
|
||||
$address->user = $user;
|
||||
|
||||
$this->_em->persist($user);
|
||||
$this->_em->persist($address);
|
||||
$this->_em->flush();
|
||||
|
||||
self::assertSame($user, $this->_em->find(GH6531User::class, $user->id));
|
||||
self::assertSame($address, $this->_em->find(GH6531Address::class, $user));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group 6531
|
||||
*/
|
||||
public function testDynamicAttributes() : void
|
||||
{
|
||||
$article = new GH6531Article();
|
||||
$article->addAttribute('name', 'value');
|
||||
|
||||
$this->_em->persist($article);
|
||||
$this->_em->flush();
|
||||
|
||||
self::assertSame(
|
||||
$article->attributes['name'],
|
||||
$this->_em->find(GH6531ArticleAttribute::class, ['article' => $article, 'attribute' => 'name'])
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group 6531
|
||||
*/
|
||||
public function testJoinTableWithMetadata() : void
|
||||
{
|
||||
$product = new GH6531Product();
|
||||
$this->_em->persist($product);
|
||||
$this->_em->flush();
|
||||
|
||||
$order = new GH6531Order();
|
||||
$order->addItem($product, 2);
|
||||
|
||||
$this->_em->persist($order);
|
||||
$this->_em->flush();
|
||||
|
||||
self::assertSame(
|
||||
$order->items->first(),
|
||||
$this->_em->find(GH6531OrderItem::class, ['product' => $product, 'order' => $order])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531User
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531Address
|
||||
{
|
||||
/** @Id @OneToOne(targetEntity=GH6531User::class) */
|
||||
public $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531Article
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @OneToMany(targetEntity=GH6531ArticleAttribute::class, mappedBy="article", cascade={"ALL"}, indexBy="attribute") */
|
||||
public $attributes;
|
||||
|
||||
public function addAttribute(string $name, string $value)
|
||||
{
|
||||
$this->attributes[$name] = new GH6531ArticleAttribute($name, $value, $this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531ArticleAttribute
|
||||
{
|
||||
/** @Id @ManyToOne(targetEntity=GH6531Article::class, inversedBy="attributes") */
|
||||
public $article;
|
||||
|
||||
/** @Id @Column(type="string") */
|
||||
public $attribute;
|
||||
|
||||
/** @Column(type="string") */
|
||||
public $value;
|
||||
|
||||
public function __construct(string $name, string $value, GH6531Article $article)
|
||||
{
|
||||
$this->attribute = $name;
|
||||
$this->value = $value;
|
||||
$this->article = $article;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531Order
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
|
||||
/** @OneToMany(targetEntity=GH6531OrderItem::class, mappedBy="order", cascade={"ALL"}) */
|
||||
public $items;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->items = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function addItem(GH6531Product $product, int $amount) : void
|
||||
{
|
||||
$this->items->add(new GH6531OrderItem($this, $product, $amount));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531Product
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
*/
|
||||
class GH6531OrderItem
|
||||
{
|
||||
/** @Id @ManyToOne(targetEntity=GH6531Order::class) */
|
||||
public $order;
|
||||
|
||||
/** @Id @ManyToOne(targetEntity=GH6531Product::class) */
|
||||
public $product;
|
||||
|
||||
/** @Column(type="integer") */
|
||||
public $amount = 1;
|
||||
|
||||
public function __construct(GH6531Order $order, GH6531Product $product, int $amount = 1)
|
||||
{
|
||||
$this->order = $order;
|
||||
$this->product = $product;
|
||||
$this->amount = $amount;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user