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(); }