/**
  * @test
  */
 public function embeddablesInsideClonedProxiedEntitiesAreCorrectlyLoaded()
 {
     $this->markTestSkipped('This is possibly a bug of Doctrine');
     $entity = new Fixtures\TestEntity();
     $entity->setName('Andi');
     $relatedEntity = new Fixtures\TestEntity();
     $relatedEntity->setName('Robert');
     $embedded = new Fixtures\TestEmbeddable('Foo');
     $relatedEntity->setEmbedded($embedded);
     $valueObject = new Fixtures\TestValueObject('Bar');
     $relatedEntity->setRelatedValueObject($valueObject);
     $entity->setRelatedEntity($relatedEntity);
     $clonedRelatedEntity = clone $entity->getRelatedEntity();
     $this->assertNotNull($clonedRelatedEntity->getEmbedded(), 'Unproxied clone embedded is null');
     $this->testEntityRepository->add($entity);
     $this->testEntityRepository->add($relatedEntity);
     $this->persistenceManager->persistAll();
     $this->persistenceManager->clearState();
     $entityIdentifier = $this->persistenceManager->getIdentifierByObject($entity);
     $loadedEntity = $this->testEntityRepository->findByIdentifier($entityIdentifier);
     $clonedRelatedEntity = clone $loadedEntity->getRelatedEntity();
     $this->assertNotNull($clonedRelatedEntity->getRelatedValueObject(), 'Proxied clone value object is null');
     $this->assertNotNull($clonedRelatedEntity->getEmbedded(), 'Proxied clone embedded is null');
     $this->assertEquals('Foo', $clonedRelatedEntity->getEmbedded()->getValue());
 }
 /**
  * @test
  */
 public function aopIsCorrectlyInitializedEvenIfADoctrineProxyGetsInitializedOnTheFlyFromTheOutside()
 {
     $entity = new Fixtures\TestEntity();
     $entity->setName('Andi');
     $relatedEntity = new Fixtures\TestEntity();
     $relatedEntity->setName('Robert');
     $entity->setRelatedEntity($relatedEntity);
     $this->testEntityRepository->add($entity);
     $this->testEntityRepository->add($relatedEntity);
     $this->persistenceManager->persistAll();
     $this->persistenceManager->clearState();
     $entityIdentifier = $this->persistenceManager->getIdentifierByObject($entity);
     $loadedEntity = $this->testEntityRepository->findByIdentifier($entityIdentifier);
     $this->testEntityRepository->findOneByName('Robert');
     $loadedRelatedEntity = $loadedEntity->getRelatedEntity();
     $this->assertEquals($loadedRelatedEntity->sayHello(), 'Hello Andi!');
 }
 /**
  * @param TestEntity $entity
  * @return string
  */
 public function showAction(TestEntity $entity)
 {
     return $entity->getName();
 }
 /**
  * @test
  */
 public function distinctQueryOnlyReturnsDistinctEntities()
 {
     $testEntityRepository = new Fixtures\TestEntityRepository();
     $testEntityRepository->removeAll();
     $testEntity = new Fixtures\TestEntity();
     $testEntity->setName('Flow');
     $subEntity1 = new Fixtures\SubEntity();
     $subEntity1->setContent('value');
     $subEntity1->setParentEntity($testEntity);
     $testEntity->addSubEntity($subEntity1);
     $this->persistenceManager->add($subEntity1);
     $subEntity2 = new Fixtures\SubEntity();
     $subEntity2->setContent('value');
     $subEntity2->setParentEntity($testEntity);
     $testEntity->addSubEntity($subEntity2);
     $this->persistenceManager->add($subEntity2);
     $testEntityRepository->add($testEntity);
     $testEntity2 = new Fixtures\TestEntity();
     $testEntity2->setName('Flow');
     $subEntity3 = new Fixtures\SubEntity();
     $subEntity3->setContent('value');
     $subEntity3->setParentEntity($testEntity2);
     $testEntity2->addSubEntity($subEntity3);
     $this->persistenceManager->add($subEntity3);
     $testEntityRepository->add($testEntity2);
     $this->persistenceManager->persistAll();
     $query = new Query(Fixtures\TestEntity::class);
     $entities = $query->matching($query->equals('subEntities.content', 'value'))->setDistinct()->setLimit(2)->execute()->toArray();
     $this->assertEquals(2, count($entities));
 }
 /**
  * @test
  */
 public function validationIsStoppedAtAggregateBoundaries()
 {
     $relatedEntity = new TestEntity();
     $relatedEntity->setName('Spy');
     $this->testEntityRepository->add($relatedEntity);
     $entity = new TestEntity();
     $entity->setName('Some Name');
     $entity->setRelatedEntity($relatedEntity);
     $this->testEntityRepository->add($entity);
     $this->persistenceManager->persistAll();
     $entityIdentifier = $this->persistenceManager->getIdentifierByObject($relatedEntity);
     /* @var $entityManager \Doctrine\ORM\EntityManagerInterface */
     $entityManager = ObjectAccess::getProperty($this->persistenceManager, 'entityManager', true);
     $dql = 'UPDATE ' . TestEntity::class . " e SET e.name = 'xx' WHERE e.Persistence_Object_Identifier = '{$entityIdentifier}'";
     $query = $entityManager->createQuery($dql);
     $query->getScalarResult();
     $this->persistenceManager->clearState();
     $entityIdentifier = $this->persistenceManager->getIdentifierByObject($entity);
     $invalidArguments = array('entity' => array('__identity' => $entityIdentifier, 'name' => 'Some other Name'));
     $response = $this->browser->request('http://localhost/test/validation/entity/update', 'POST', $invalidArguments);
     $this->assertNotSame('An error occurred while trying to call Neos\\Flow\\Tests\\Functional\\Mvc\\Fixtures\\Controller\\EntityController->updateAction().' . PHP_EOL . 'Error for entity.relatedEntity.name:  This field must contain at least 3 characters.' . PHP_EOL, $response->getContent());
     $this->assertSame(200, $response->getStatusCode());
 }
 /**
  * @test
  */
 public function doctrineEmbeddablesAreActuallyEmbedded()
 {
     /* @var $entityManager ObjectManager */
     $entityManager = $this->objectManager->get(ObjectManager::class);
     $schemaTool = new SchemaTool($entityManager);
     $metaData = $entityManager->getClassMetadata(Fixtures\TestEntity::class);
     $this->assertTrue($metaData->hasField('embedded.value'), 'ClassMetadata does not contain embedded value');
     $schema = $schemaTool->getSchemaFromMetadata(array($metaData));
     $this->assertTrue($schema->getTable('persistence_testentity')->hasColumn('embedded_value'), 'Database schema does not contain embedded value field');
     $embeddable = new Fixtures\TestEmbeddable('someValue');
     $testEntity = new Fixtures\TestEntity();
     $testEntity->setEmbedded($embeddable);
     $this->testEntityRepository->add($testEntity);
     $this->persistenceManager->persistAll();
     $this->persistenceManager->clearState();
     /* @var $testEntity Fixtures\TestEntity */
     $testEntity = $this->testEntityRepository->findAll()->getFirst();
     $this->assertEquals('someValue', $testEntity->getEmbedded()->getValue());
 }
 /**
  * @test
  */
 public function trustedPropertiesConfigurationDoesNotIgnoreWildcardConfigurationInController()
 {
     $entity = new TestEntity();
     $entity->setName('Foo');
     $this->persistenceManager->add($entity);
     $identifier = $this->persistenceManager->getIdentifierByObject($entity);
     $trustedPropertiesService = new MvcPropertyMappingConfigurationService();
     $trustedProperties = $trustedPropertiesService->generateTrustedPropertiesToken(['entity[__identity]', 'entity[subEntities][0][content]', 'entity[subEntities][0][date]', 'entity[subEntities][1][content]', 'entity[subEntities][1][date]']);
     $form = ['entity' => ['__identity' => $identifier, 'subEntities' => [['content' => 'Bar', 'date' => '1.1.2016'], ['content' => 'Baz', 'date' => '30.12.2016']]], '__trustedProperties' => $trustedProperties];
     $request = Request::create(new Uri('http://localhost/test/mvc/actioncontrollertestc/' . $identifier . '/update'), 'POST', $form);
     $response = $this->browser->sendRequest($request);
     $this->assertSame('Entity "Foo" updated', $response->getContent());
 }