From 0e7b21c0d86fbed9e8f64ed8bfb66a342407b4d9 Mon Sep 17 00:00:00 2001 From: Walther Lalk Date: Thu, 23 Apr 2020 09:57:36 +0200 Subject: [PATCH] Fix issue with single entity when ResultSetDecorators are used --- src/Listener/JsonApiListener.php | 2 +- tests/TestCase/Listener/JsonApiListenerTest.php | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Listener/JsonApiListener.php b/src/Listener/JsonApiListener.php index 85e1936f..30c2b5c3 100644 --- a/src/Listener/JsonApiListener.php +++ b/src/Listener/JsonApiListener.php @@ -874,7 +874,7 @@ protected function _getSingleEntity(Subject $subject): ?EntityInterface return (clone $subject->entities)->first(); } - if (!empty($subject->entities) && $subject->entities instanceof ResultSet) { + if (!empty($subject->entities) && $subject->entities instanceof ResultSetInterface) { if ($subject->entities->first() === null) { $repository = $subject->query->getRepository(); $entity = $repository->getEntityClass(); diff --git a/tests/TestCase/Listener/JsonApiListenerTest.php b/tests/TestCase/Listener/JsonApiListenerTest.php index e4ad80cc..71bd70db 100644 --- a/tests/TestCase/Listener/JsonApiListenerTest.php +++ b/tests/TestCase/Listener/JsonApiListenerTest.php @@ -5,6 +5,7 @@ use Cake\Controller\Controller; use Cake\Core\Plugin; +use Cake\Datasource\ResultSetDecorator; use Cake\Event\Event; use Cake\Filesystem\File; use Cake\Http\Exception\BadRequestException; @@ -848,6 +849,18 @@ public function testGetSingleEntity() $result = $this->callProtectedMethod('_getSingleEntity', [$subject], $listener); $this->assertSame($entity, $result); + $subject->entities = $this->getMockBuilder(ResultSetDecorator::class) + ->disableOriginalConstructor() + ->onlyMethods(['first']) + ->getMock(); + + $subject->entities->method('first') + ->willReturn($entity); + + $this->setReflectionClassInstance($listener); + $result = $this->callProtectedMethod('_getSingleEntity', [$subject], $listener); + $this->assertSame($entity, $result); + unset($subject->entities); $subject->entity = $entity;