public function testRun() { $app = new Application(self::$kernel); $app->addCommands([new LoadFixturesCommand()]); $command = $app->find('amstaffix:fixtures:load'); $commandTester = new CommandTester($command); $commandTester->execute(['command' => $command->getName(), 'dir-with-fixtures' => $this->dirWithFixtures], ['interactive' => false]); $this->assertEquals(4, EntityHelper::getCountOfEntities($this->em, 'CoreTestFixture\\TestBundle\\Entity\\Article')); $this->assertEquals(3, EntityHelper::getCountOfEntities($this->em, 'CoreTestFixture\\TestBundle\\Entity\\Author')); $this->assertEquals(8, EntityHelper::getCountOfEntities($this->em, 'CoreTestFixture\\TestBundle\\Entity\\Book')); }
/** * Метод осуществляет выборку сущностей из менеджера сущностей, создает контент и записывает в файл * * @param \Doctrine\ORM\EntityManager $em * @param string $dirForGeneratedFixtures директория, в которой будут созданы файлы с фикстурами * @param string $className полное имя класса для создания фикстур * @param int $entitiesPerClass кол-во сущностей на один класс * @param int $entitiesPerFile кол-во сущностей в одном файле */ private function generateFixtureForEntityClass(EntityManager $em, $dirForGeneratedFixtures, $className, $entitiesPerClass = self::DEFAULT_MAX_ENTITIES_COUNT, $entitiesPerFile = self::DEFAULT_ENTITIES_PER_FILE) { $metadata = $em->getClassMetadata($className); $countEntitiesInDB = EntityHelper::getCountOfEntities($em, $className); $howManyEntitiesShouldBe = min($entitiesPerClass, $countEntitiesInDB); $countOfFiles = ceil($howManyEntitiesShouldBe / $entitiesPerFile); $shortClassName = Helper::getClassNameWithoutNamespace($className); for ($fileNo = 0; $fileNo < $countOfFiles; $fileNo++) { $entities = $em->getRepository($className)->findBy([], null, $entitiesPerFile, $entitiesPerFile * $fileNo); $content = "{$className}:\n"; foreach ($entities as &$entity) { $id = $metadata->getSingleIdReflectionProperty()->getValue($entity); $content .= " entity_{$id}:\n"; $fieldNames = $metadata->getFieldNames(); foreach ($fieldNames as $fieldName) { $fieldValue = $metadata->getFieldValue($entity, $fieldName); if ($fieldValue instanceof \DateTime) { $fieldValue = "'" . $fieldValue->format(self::DATETIME_FORMAT) . "'"; } elseif (is_string($fieldValue)) { $fieldValue = str_replace("\n", '', $fieldValue); /* * Этот кусок написан из-за того, что кавычки (" и ') являются частью YAML, и неожиданное их появление * в строковых значение рушит парсер, так что там где встречаются кавычки, мы их обрамляем на "противоположенные", т.е. * если есть ", то обрамим в '; * если есть ', то обрамим в "; * * насчет появления обоих этих кавычек пока ничего сказать не могу... */ if (strpos($fieldValue, '"') !== false) { $fieldValue = "'{$fieldValue}'"; } elseif (strpos($fieldValue, "'") !== false) { $fieldValue = sprintf('"%s"', $fieldValue); } /* * Вот я не знаю что это за знак такой ... но вроде так работает... */ $fieldValue = str_replace("\n", ' ', $fieldValue); } /* * Т.к. true и false не записываются в текстовой файл, то для них сделаем такую штуку. */ if (is_bool($fieldValue)) { $fieldValue = $fieldValue ? 'true' : 'false'; } $content .= " {$fieldName}: {$fieldValue}\n"; } } $filePath = $dirForGeneratedFixtures . "/{$shortClassName}_{$fileNo}." . self::FILE_EXTENSION; file_put_contents($filePath, $content); $em->clear(); } }
public function testGetAllWithSimpleNeqFilter() { $id = EntityHelper::getOneRandomEntityId($this->em, self::$shortEntityName); $requestCreator = (new ExtJSGetAllRequestCreator())->addFilter(new Filter($this->getEntityPKFieldName(), $id, Filter::OP_NEQ))->setLimit(999)->setPage(1)->setStart(0); $responseDataAsserter = function ($responseData) use($id) { $this->assertResponseData($responseData); $this->assertResponseObjectForSuccess($responseData, true); /* Приходится проверять именно так, ибо когда в БД всего одна запись, то и придет пустой ответ */ if (isset($responseData->data)) { $this->assertTrue(is_array($responseData->data), "Данные в свойства 'data' должны являться массивом "); $founded = false; foreach ($responseData->data as $entityAsObj) { if ($entityAsObj->{$this->getEntityPKFieldName()} == $id) { $founded = true; break; } } $this->assertFalse($founded, "Выбраной заренее сущности, не должно было быть найдено"); } else { $this->assertCount(1, EntityHelper::getCountOfEntities($this->em, self::$shortEntityName), "Если уж и пришел пустой ответ, то только в случае, когда кол-во записей в БД = 1"); } }; $action = (new GetAllAction())->setRequestParams($requestCreator->asArray())->addResponseDataAsserterCallback($responseDataAsserter); $this->initAction($action); $action->run(); }
public function testGetCountOfEntities() { $this->assertEquals(4, EntityHelper::getCountOfEntities($this->em, $this->clientFullClassName)); $this->assertEquals(0, EntityHelper::getCountOfEntities($this->em, $this->authorFullClassName)); }
private function getCountOfEntities($className) { return EntityHelper::getCountOfEntities($this->em, $className); }