diff --git a/tests/src/Functional/EntityResource/TaskJsonAnonTest.php b/tests/src/Functional/EntityResource/TaskJsonAnonTest.php
new file mode 100644
index 00000000..77d47121
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskJsonAnonTest.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
+
+/**
+ * Rest test for json, anonymous, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskJsonAnonTest extends TaskResourceTestBase {
+
+  use AnonResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskJsonBasicAuthTest.php b/tests/src/Functional/EntityResource/TaskJsonBasicAuthTest.php
new file mode 100644
index 00000000..db8851a7
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskJsonBasicAuthTest.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
+
+/**
+ * Rest test for json, basic auth, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskJsonBasicAuthTest extends TaskResourceTestBase {
+
+  use BasicAuthResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['basic_auth'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'basic_auth';
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskJsonCookieTest.php b/tests/src/Functional/EntityResource/TaskJsonCookieTest.php
new file mode 100644
index 00000000..62518bbd
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskJsonCookieTest.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
+
+/**
+ * Rest test for json, cookie, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskJsonCookieTest extends TaskResourceTestBase {
+
+  use CookieResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'cookie';
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskResourceTestBase.php b/tests/src/Functional/EntityResource/TaskResourceTestBase.php
new file mode 100644
index 00000000..c472984a
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskResourceTestBase.php
@@ -0,0 +1,132 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\search_api\Entity\Task;
+use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\EntityResourceTestBase;
+
+/**
+ * Class TaskResourceTestBase.
+ */
+abstract class TaskResourceTestBase extends EntityResourceTestBase {
+
+  use BcTimestampNormalizerUnixTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['search_api'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $entityTypeId = 'search_api_task';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $patchProtectedFieldNames = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $uniqueFieldNames = ['url'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUpAuthorization($method) {
+    $this->grantPermissionsToTestedRole(['administer search_api']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createEntity() {
+    $task = Task::create();
+    $task->set('id', 1)
+      ->set('server_id', 'animals')
+      ->set('index_id', 'birds')
+      ->set('type', 'barn_owl')
+      ->save();
+
+    return $task;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedNormalizedEntity() {
+    return [
+      'fid' => [
+        [
+          'value' => 1
+        ]
+      ],
+      'server_id' => [
+        [
+          'value' => 'animals'
+        ]
+      ],
+      'index_id' => [
+        [
+          'value' => 'birds'
+        ]
+      ],
+      'type' => [
+        [
+          'value' => 'barn_owl'
+        ]
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getNormalizedPostEntity() {
+    return [
+      'title' => [
+        [
+          'value' => 'Feed Resource Post Test',
+        ],
+      ],
+      'url' => [
+        [
+          'value' => 'http://example.com/feed',
+        ],
+      ],
+      'refresh' => [
+        [
+          'value' => 900,
+        ],
+      ],
+      'description' => [
+        [
+          'value' => 'Feed Resource Post Test Description',
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedUnauthorizedAccessMessage($method) {
+    if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) {
+      return parent::getExpectedUnauthorizedAccessMessage($method);
+    }
+
+    switch ($method) {
+      case 'GET':
+      case 'POST':
+      case 'PATCH':
+      case 'DELETE':
+        return "You are not authorized to view this search_api_task entity.";
+      default:
+        return parent::getExpectedUnauthorizedAccessMessage($method);
+    }
+  }
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskXmlAnonTest.php b/tests/src/Functional/EntityResource/TaskXmlAnonTest.php
new file mode 100644
index 00000000..f163fca2
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskXmlAnonTest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\XmlEntityNormalizationQuirksTrait;
+
+/**
+ * Rest test for xml, anonymous, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskXmlAnonTest extends TaskResourceTestBase {
+
+  use AnonResourceTestTrait;
+  use XmlEntityNormalizationQuirksTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'xml';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'text/xml; charset=UTF-8';
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskXmlBasicAuthTest.php b/tests/src/Functional/EntityResource/TaskXmlBasicAuthTest.php
new file mode 100644
index 00000000..cc2c863b
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskXmlBasicAuthTest.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\BasicAuthResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\XmlEntityNormalizationQuirksTrait;
+
+/**
+ * Rest test for xml, basic auth, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskXmlBasicAuthTest extends TaskResourceTestBase {
+
+  use BasicAuthResourceTestTrait;
+  use XmlEntityNormalizationQuirksTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['basic_auth'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'xml';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'text/xml; charset=UTF-8';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'basic_auth';
+
+}
diff --git a/tests/src/Functional/EntityResource/TaskXmlCookieTest.php b/tests/src/Functional/EntityResource/TaskXmlCookieTest.php
new file mode 100644
index 00000000..aa095b0d
--- /dev/null
+++ b/tests/src/Functional/EntityResource/TaskXmlCookieTest.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\Tests\search_api\Functional\EntityResource;
+
+use Drupal\Tests\rest\Functional\CookieResourceTestTrait;
+use Drupal\Tests\rest\Functional\EntityResource\XmlEntityNormalizationQuirksTrait;
+
+/**
+ * Rest test for xml, cookie, task entity.
+ *
+ * @group search_api
+ * @group rest
+ */
+class TaskXmlCookieTest extends TaskResourceTestBase {
+
+  use CookieResourceTestTrait;
+  use XmlEntityNormalizationQuirksTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'xml';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'text/xml; charset=UTF-8';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $auth = 'cookie';
+
+}
