public function testFindNextFreeEntityIdWithCompositeKey()
 {
     $this->assertEquals(4, EntityHelper::findNextFreeEntityId($this->em, $this->bookFullClassName, 'id'));
 }
 /**
  * Метод, который проверяет возможность изменения первичного ключа (обычно 'id')
  * P.S.
  * Сделал без префикса test, т.к. данная возможность необходима не всем сущностям
  * P.P.S.
  * Метод получился довольно большой, но разобраться вроде возможно. В переносе в другой класс пока нет необходимости
  */
 public function patchWithNewPKValue()
 {
     $oldEntity = $this->getOneRandomEntity();
     $oldEntityAsObj = $this->convertEntityToObj($oldEntity, [\Amstaffix\RestActions\Action::GROUP_GET]);
     // пришлось сделать тут, т.к. иначе не "инициализируется" TZone
     $oldPKValue = $this->getEntityPKValue($oldEntity);
     $newPKValue = EntityHelper::findNextFreeEntityId($this->em, self::$shortEntityName);
     $pkFieldName = $this->em->getClassMetadata(self::$shortEntityName)->getSingleIdentifierFieldName();
     $newPKFieldName = 'new_' . $pkFieldName;
     $requestDataAlterer = function ($object) use($newPKValue, $newPKFieldName) {
         $object->{$newPKFieldName} = $newPKValue;
         return $object;
     };
     $responseDataAsserter = function ($responseData) use($oldPKValue, $oldEntity, $newPKValue, $pkFieldName, $oldEntityAsObj) {
         $this->assertResponseData($responseData);
         $this->assertResponseObjectForSuccess($responseData, true);
         $this->assertResponseObjectForDataAttribute($responseData);
         $this->em->clear();
         /* Теперь по старому идентификатору нельзя найти сущность */
         $entityWithOldId = $this->em->getRepository(self::$shortEntityName)->find($oldPKValue);
         $this->assertNull($entityWithOldId);
         /* А вот по новому - можно */
         $entityWithNewId = $this->em->getRepository(self::$shortEntityName)->find($newPKValue);
         $this->assertNotNull($entityWithNewId);
         $newEntityAsObj = $this->convertEntityToObj($entityWithNewId, [\Amstaffix\RestActions\Action::GROUP_GET]);
         /* т.к. первичные ключи теперь отличаются, уберем их из обоих объектов. */
         unset($oldEntityAsObj->{$pkFieldName});
         unset($newEntityAsObj->{$pkFieldName});
         $this->assertTwoObjects($oldEntityAsObj, $newEntityAsObj);
         $this->assertTwoObjects($newEntityAsObj, $responseData->data);
     };
     $action = (new PatchAction())->setDataAltererCallback($requestDataAlterer)->setEntityPKValue($oldPKValue)->addResponseDataAsserterCallback($responseDataAsserter);
     $this->initAction($action);
     $action->run();
 }