From 743bf7cd043112c846dcf5f6525a87cf4d1e5dbf Mon Sep 17 00:00:00 2001
From: Daniel Wehner <dawehner@googlemail.com>
Date: Fri, 28 Jun 2019 18:51:29 +0100
Subject: [PATCH] Add test coverage for entity query implementation

---
 tests/src/Kernel/EntityQueryTest.php     | 56 ++++++++++++++++++++++++
 tests/src/Kernel/TrashKernelTest.php     | 20 +--------
 tests/src/Kernel/TrashKernelTestBase.php | 25 +++++++++++
 3 files changed, 82 insertions(+), 19 deletions(-)
 create mode 100644 tests/src/Kernel/EntityQueryTest.php
 create mode 100644 tests/src/Kernel/TrashKernelTestBase.php

diff --git a/tests/src/Kernel/EntityQueryTest.php b/tests/src/Kernel/EntityQueryTest.php
new file mode 100644
index 0000000..565dbb3
--- /dev/null
+++ b/tests/src/Kernel/EntityQueryTest.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\Tests\trash\Kernel;
+
+use Drupal\trash_test\Entity\TrashTest;
+
+class EntityQueryTest extends TrashKernelTestBase {
+
+  public function testQueryWithoutDeletedAccess() {
+    $entities = [];
+    $entity_storage = \Drupal::entityTypeManager()->getStorage('trash_test_entity');
+
+    for ($i = 0; $i < 5; $i++) {
+      $entity = TrashTest::create();
+      $entity->save();
+      $entities[] = $entity;
+    }
+    
+    // Test whether they appear in an entity query.
+    $this->assertCount(5, $entity_storage->getQuery()->execute());
+
+    // Delete the first three of them. They should all be individual loadable
+    // but not longer accessible via the entity query.
+    for ($i = 0; $i < 3; $i++) {
+      $entities[$i]->delete();
+
+      $this->assertNotNull(TrashTest::load($entities[$i]->id()));
+    }
+    $this->assertCount(2, $entity_storage->getQuery()->execute());
+  }
+
+  public function testQueryWithDeletedAccess() {
+    $entities = [];
+    $entity_storage = \Drupal::entityTypeManager()->getStorage('trash_test_entity');
+
+    for ($i = 0; $i < 5; $i++) {
+      $entity = TrashTest::create();
+      $entity->save();
+      $entities[] = $entity;
+    }
+
+    // Test whether they appear in an entity query.
+    $this->assertCount(5, $entity_storage->getQuery()->execute());
+
+    // Delete the first three of them. They should all be individual loadable
+    // but not longer accessible via the entity query.
+    for ($i = 0; $i < 3; $i++) {
+      $entities[$i]->delete();
+    }
+    
+    $query = $entity_storage->getQuery()
+      ->addMetaData('_deleted', TRUE);
+    $this->assertCount(5, $query->execute());
+  }
+
+}
diff --git a/tests/src/Kernel/TrashKernelTest.php b/tests/src/Kernel/TrashKernelTest.php
index 7d5c629..54ce567 100644
--- a/tests/src/Kernel/TrashKernelTest.php
+++ b/tests/src/Kernel/TrashKernelTest.php
@@ -3,26 +3,9 @@
 namespace Drupal\Tests\trash\Kernel;
 
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\KernelTests\KernelTestBase;
 use Drupal\trash_test\Entity\TrashTest;
 
-class TrashKernelTest extends KernelTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = ['trash', 'trash_test', 'system'];
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setUp() {
-    parent::setUp();
-
-    $this->installEntitySchema('trash_test_entity');
-  }
+class TrashKernelTest extends TrashKernelTestBase {
 
   public function testDeletion() {
     $entity = TrashTest::create([
@@ -41,5 +24,4 @@ class TrashKernelTest extends KernelTestBase {
     $this->assertTrue($entity->getEntityKey('deleted'));
   }
 
-
 }
diff --git a/tests/src/Kernel/TrashKernelTestBase.php b/tests/src/Kernel/TrashKernelTestBase.php
new file mode 100644
index 0000000..5d29c31
--- /dev/null
+++ b/tests/src/Kernel/TrashKernelTestBase.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\Tests\trash\Kernel;
+
+use Drupal\KernelTests\KernelTestBase;
+
+abstract class TrashKernelTestBase extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['trash', 'trash_test', 'system'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('trash_test_entity');
+  }
+
+}
-- 
GitLab