pastebin

Paste Search Dynamic
Recent pastes
entity relationships
  1. <?php declare(strict_types = 1);
  2.  
  3. /**
  4.  * @testCase
  5.  * @dataProvider ../../../sections.ini
  6.  */
  7.  
  8. namespace NextrasTestsOrmIntegrationRelationships;
  9.  
  10. use NextrasDbalConnection;
  11. use NextrasDbalIConnection;
  12. use NextrasOrmRelationshipsManyHasMany;
  13. use NextrasTestsOrmAuthor;
  14. use NextrasTestsOrmBook;
  15. use NextrasTestsOrmDataTestCase;
  16. use NextrasTestsOrmHelper;
  17. use NextrasTestsOrmPublisher;
  18. use NextrasTestsOrmTag;
  19. use TesterAssert;
  20. use TesterEnvironment;
  21.  
  22.  
  23. $dic = require_once __DIR__ . '/../../../bootstrap.php';
  24.  
  25.  
  26. class EntityRelationshipsTest extends DataTestCase
  27. {
  28.         public function testBasics()
  29.         {
  30.                 $author = new Author();
  31.                 $author->name = 'Jon Snow';
  32.  
  33.                 $publisher = new Publisher();
  34.                 $publisher->name = '7K';
  35.  
  36.                 $book = new Book();
  37.                 $book->title = 'A new book';
  38.                 $book->author = $author;
  39.                 $book->publisher = $publisher;
  40.                 $book->tags->set([new Tag('Awesome')]);
  41.  
  42.                 $this->orm->books->persistAndFlush($book);
  43.  
  44.                 assert::true($author->isAttached());
  45.                 assert::true($author->isPersisted());
  46.                 assert::false($author->isModified());
  47.                 assert::same(3, $author->id);
  48.  
  49.                 assert::true($book->isAttached());
  50.                 assert::true($book->isPersisted());
  51.                 assert::false($book->isModified());
  52.                 assert::same(5, $book->id);
  53.  
  54.                 assert::same(1, $book->tags->count());
  55.                 assert::same(1, $book->tags->countStored());
  56.                 assert::same('Awesome', $book->tags->get()->fetch()->name);
  57.  
  58.                 $book->tags = [];
  59.                 assert::type(ManyHasMany::class, $book->tags);
  60.                 assert::same(0, $book->tags->count());
  61.         }
  62.  
  63.  
  64.         public function testDeepTraversalHasOne()
  65.         {
  66.                 if ($this->section === Helper::SECTION_ARRAY) {
  67.                         Environment::skip();
  68.                 }
  69.  
  70.                 $queries = [];
  71.                 $connection = $this->container->getByType(Connection::class);
  72.                 $connection->onQuery[] = function ($_, $query) use (& $queries) {
  73.                         $queries[$query] = $queries[$query] ?? 1;
  74.                 };
  75.  
  76.                 $authors = [];
  77.                 foreach ($this->orm->tags->findAll() as $tag) {
  78.                         foreach ($tag->books as $book) {
  79.                                 $authors[] = $book->author->id;
  80.                         }
  81.                 }
  82.  
  83.                 assert::same([1, 1, 1, 1, 2], $authors);
  84.                 assert::equal([], array_filter($queries, function ($count) {
  85.                         return $count != 1;
  86.                 }));
  87.         }
  88.  
  89.  
  90.         public function testDeepTraversalManyHasMany()
  91.         {
  92.                 if ($this->section === Helper::SECTION_ARRAY) {
  93.                         Environment::skip();
  94.                 }
  95.  
  96.                 $queries = [];
  97.                 $connection = $this->container->getByType(IConnection::class);
  98.                 $connection->onQuery[] = function ($_, $query) use (& $queries) {
  99.                         $queries[$query] = isset($queries[$query]) ? $queries[$query] : 1;
  100.                 };
  101.  
  102.                 $tags = [];
  103.                 foreach ($this->orm->authors->findAll() as $author) {
  104.                         foreach ($author->books as $book) {
  105.                                 foreach ($book->tags as $tag) {
  106.                                         $tags[] = $tag->id;
  107.                                 }
  108.                         }
  109.                 }
  110.  
  111.                 assert::same([2, 3, 1, 2, 3], $tags);
  112.                 assert::equal([], array_filter($queries, function ($count) {
  113.                         return $count != 1;
  114.                 }));
  115.         }
  116. }
  117.  
  118.  
  119. $test = new EntityRelationshipsTest($dic);
  120. $test->run();
  121. ?>
Parsed in 0.101 seconds