/**
* Testing race conditions of new entities, without a flush between persist calls
*
* @see: docs/RaceConditions.md
* @dataProvider entityManagerDataProvider
* @param EntityManager $em
*/
public function testOneToManyRaceNoFlush(EntityManager $em)
{
$time = new \DateTime();
$article1 = new Article();
$article1->setId(201)->setTitle('Article 201')->setTimeCreated($time)->setLastModified($time);
$category1 = new Category();
$category1->setId(201)->setName('Category 201');
$category1->addArticle($article1);
$em->persist($category1)->persist($article1)->flush();
/** @var Article|OrmProxyInterface $r_article */
$r_article = $em->retrieve(Article::class, 201);
$this->assertEquals('Article 201', $r_article->getTitle());
// Should make DB query here
$r_category = $r_article->getCanonicalCategory();
$this->assertTrue($r_category instanceof Category);
// Check inverse side too -
/** @var Category|OrmProxyInterface $ir_category */
$ir_category = $em->retrieve(Category::class, 201);
$this->assertEquals('Category 201', $ir_category->getName());
// Should make DB query here
$ir_articles = $ir_category->getArticles();
$this->assertCount(1, $ir_articles);
$ir_article = $ir_articles[0];
$this->assertTrue($ir_article instanceof Article);
}