29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
44 protected function setUp():
void
46 $this->mockObjectManager = $this->createMock(ObjectManagerInterface::class);
56 $objectStorage->attach($entity2);
57 $mockBackend = $this->createMock(BackendInterface::class);
58 $mockBackend->expects($this->once())->method(
'setAggregateRootObjects')->with($objectStorage);
61 $manager = $this->getAccessibleMock(
62 PersistenceManager::class,
65 $manager->_set(
'backend', $mockBackend);
66 $manager->add($entity2);
68 $manager->persistAll();
78 $objectStorage->attach($entity2);
79 $mockBackend = $this->createMock(BackendInterface::class);
80 $mockBackend->expects($this->once())->method(
'setDeletedEntities')->with($objectStorage);
83 $manager = $this->getAccessibleMock(
84 PersistenceManager::class,
87 $manager->_set(
'backend', $mockBackend);
88 $manager->remove($entity2);
90 $manager->persistAll();
98 $fakeUuid =
'fakeUuid';
99 $object = new \stdClass();
101 $mockBackend = $this->createMock(BackendInterface::class);
102 $mockBackend->expects($this->once())->method(
'getIdentifierByObject')->with($object)->will($this->returnValue($fakeUuid));
105 $manager = $this->getAccessibleMock(
106 PersistenceManager::class,
109 $manager->_set(
'backend', $mockBackend);
111 $this->assertEquals($manager->getIdentifierByObject($object), $fakeUuid);
119 $fakeUuid =
'fakeUuid';
120 $object = new \stdClass();
122 $mockSession = $this->createMock(Session::class);
123 $mockSession->expects($this->once())->method(
'hasIdentifier')->with($fakeUuid)->will($this->returnValue(
true));
124 $mockSession->expects($this->once())->method(
'getObjectByIdentifier')->with($fakeUuid)->will($this->returnValue($object));
127 $manager = $this->getAccessibleMock(
128 PersistenceManager::class,
131 $manager->_set(
'persistenceSession', $mockSession);
133 $this->assertEquals($manager->getObjectByIdentifier($fakeUuid), $object);
142 $object = new \stdClass();
143 $fakeEntityType = get_class($object);
145 $mockSession = $this->createMock(Session::class);
146 $mockSession->expects($this->once())->method(
'hasIdentifier')->with($fakeUuid)->will($this->returnValue(
false));
148 $mockBackend = $this->createMock(BackendInterface::class);
149 $mockBackend->expects($this->once())->method(
'getObjectByIdentifier')->with(
152 )->will($this->returnValue($object));
155 $manager = $this->getAccessibleMock(
156 PersistenceManager::class,
159 $manager->_set(
'persistenceSession', $mockSession);
160 $manager->_set(
'backend', $mockBackend);
162 $this->assertEquals($manager->getObjectByIdentifier($fakeUuid, $fakeEntityType), $object);
171 $fakeEntityType =
'foobar';
173 $mockSession = $this->createMock(Session::class);
174 $mockSession->expects($this->once())->method(
'hasIdentifier')->with(
177 )->will($this->returnValue(
false));
179 $mockBackend = $this->createMock(BackendInterface::class);
180 $mockBackend->expects($this->once())->method(
'getObjectByIdentifier')->with(
183 )->will($this->returnValue(
null));
186 $manager = $this->getAccessibleMock(
187 PersistenceManager::class,
190 $manager->_set(
'persistenceSession', $mockSession);
191 $manager->_set(
'backend', $mockBackend);
193 $this->assertNull($manager->getObjectByIdentifier($fakeUuid, $fakeEntityType));
201 $someObject = new \stdClass();
203 $persistenceManager->add($someObject);
205 $this->assertAttributeContains($someObject,
'addedObjects', $persistenceManager);
213 $object1 = new \stdClass();
214 $object2 = new \stdClass();
215 $object3 = new \stdClass();
218 $persistenceManager->add($object1);
219 $persistenceManager->add($object2);
220 $persistenceManager->add($object3);
222 $persistenceManager->remove($object2);
224 $this->assertAttributeContains($object1,
'addedObjects', $persistenceManager);
225 $this->assertAttributeNotContains($object2,
'addedObjects', $persistenceManager);
226 $this->assertAttributeContains($object3,
'addedObjects', $persistenceManager);
234 $object1 = new \ArrayObject([
'val' =>
'1']);
235 $object2 = new \ArrayObject([
'val' =>
'2']);
236 $object3 = new \ArrayObject([
'val' =>
'3']);
239 $persistenceManager->add($object1);
240 $persistenceManager->add($object2);
241 $persistenceManager->add($object3);
243 $object2[
'foo'] =
'bar';
244 $object3[
'val'] =
'2';
246 $persistenceManager->remove($object2);
248 $this->assertAttributeContains($object1,
'addedObjects', $persistenceManager);
249 $this->assertAttributeNotContains($object2,
'addedObjects', $persistenceManager);
250 $this->assertAttributeContains($object3,
'addedObjects', $persistenceManager);
261 $object = new \ArrayObject([
'val' =>
'1']);
263 $persistenceManager->remove($object);
265 $this->assertAttributeContains($object,
'removedObjects', $persistenceManager);
273 $className = $this->getUniqueId(
'BazFixture');
275 namespace ' . __NAMESPACE__ .
'\\Domain\\Model;
276 class ' . $className .
' extends \\' . AbstractEntity::class .
' {
281 namespace ' . __NAMESPACE__ .
'\\Domain\\Repository;
282 class ' . $className .
'Repository extends \\TYPO3\\CMS\\Extbase\\Persistence\\Repository {}
284 $classNameWithNamespace = __NAMESPACE__ .
'\\Domain\\Model\\' . $className;
285 $repositorClassNameWithNamespace = __NAMESPACE__ .
'\\Domain\\Repository\\' . $className .
'Repository';
288 $persistenceManager = $this->getAccessibleMock(
289 PersistenceManager::class,
294 $entity1 =
new $classNameWithNamespace();
296 $repository = $this->getAccessibleMock($repositorClassNameWithNamespace, [
'dummy'], [$this->mockObjectManager]);
297 $repository->_set(
'objectType', get_class($entity1));
298 $mockBackend = $this->getMockBuilder($this->buildAccessibleProxy(Backend::class))
299 ->setMethods([
'commit',
'setChangedEntities'])
300 ->disableOriginalConstructor()
302 $mockBackend->expects($this->once())
303 ->method(
'setChangedEntities')
304 ->with($this->equalTo($changedEntities));
306 $persistenceManager->_set(
'backend', $mockBackend);
307 $persistenceManager->_set(
'persistenceSession', $session);
309 $repository->_set(
'persistenceManager', $persistenceManager);
310 $session->registerObject($entity1, 42);
311 $changedEntities->attach($entity1);
312 $repository->update($entity1);
313 $persistenceManager->persistAll();
322 $mockObject = $this->createMock(PersistenceManagerInterface::class);
323 $mockObject->Persistence_Object_Identifier =
'abcdefg';
325 $mockSession = $this->createMock(Session::class);
326 $mockSession->expects($this->any())->method(
'hasIdentifier')->will($this->returnValue(
false));
327 $mockBackend = $this->createMock(BackendInterface::class);
330 $persistenceManager = $this->getAccessibleMock(
331 PersistenceManager::class,
334 $persistenceManager->_set(
'persistenceSession', $mockSession);
335 $persistenceManager->_set(
'backend', $mockBackend);
337 $persistenceManager->registerNewObject($mockObject);
338 $persistenceManager->clearState();
340 $object = $persistenceManager->getObjectByIdentifier(
'abcdefg');
341 $this->assertNull($object);
349 $methods = array_merge(
350 get_class_methods(BackendInterface::class),
353 $mockBackend = $this->getMockBuilder(BackendInterface::class)
354 ->setMethods($methods)
356 $mockBackend->expects($this->once())->method(
'tearDown');
359 $persistenceManager = $this->getAccessibleMock(
360 PersistenceManager::class,
363 $persistenceManager->_set(
'backend', $mockBackend);
365 $persistenceManager->tearDown();
377 $className = $this->getUniqueId(
'BazFixture');
379 class Foo_Bar_Domain_Model_' . $className .
' extends \\' . AbstractEntity::class .
' {}
382 class Foo_Bar_Domain_Repository_' . $className .
'Repository {}
385 $persistenceManager = $this->getAccessibleMock(
386 PersistenceManager::class,
390 $fullClassName =
'Foo_Bar_Domain_Model_' . $className;
391 $entity1 =
new $fullClassName();
392 $aggregateRootObjects->attach($entity1);
393 $mockBackend = $this->getMockBuilder($this->buildAccessibleProxy(Backend::class))
394 ->setMethods([
'commit',
'setAggregateRootObjects',
'setDeletedEntities'])
395 ->disableOriginalConstructor()
397 $mockBackend->expects($this->once())
398 ->method(
'setAggregateRootObjects')
399 ->with($this->equalTo($aggregateRootObjects));
400 $persistenceManager->_set(
'backend', $mockBackend);
401 $persistenceManager->add($entity1);
402 $persistenceManager->persistAll();
410 $className = $this->getUniqueId(
'BazFixture');
412 namespace ' . __NAMESPACE__ .
'\\Domain\\Model;
413 class ' . $className .
' extends \\' . AbstractEntity::class .
' {}
416 namespace ' . __NAMESPACE__ .
'\\Domain\\Repository;
417 class ' . $className .
'Repository {}
420 $persistenceManager = $this->getAccessibleMock(
421 PersistenceManager::class,
425 $classNameWithNamespace = __NAMESPACE__ .
'\\Domain\\Model\\' . $className;
426 $entity1 =
new $classNameWithNamespace();
427 $aggregateRootObjects->attach($entity1);
428 $mockBackend = $this->getMockBuilder($this->buildAccessibleProxy(Backend::class))
429 ->setMethods([
'commit',
'setAggregateRootObjects',
'setDeletedEntities'])
430 ->disableOriginalConstructor()
432 $mockBackend->expects($this->once())
433 ->method(
'setAggregateRootObjects')
434 ->with($this->equalTo($aggregateRootObjects));
435 $persistenceManager->_set(
'backend', $mockBackend);
436 $persistenceManager->add($entity1);
437 $persistenceManager->persistAll();