createMock(IVersionBackend::class); $backend->method('useBackendForStorage') ->willReturn($shouldUse); return $backend; } private function getStorage(string $class): IStorage&MockObject { return $this->getMockBuilder($class) ->disableOriginalConstructor() ->onlyMethods(array_diff(get_class_methods($class), ['instanceOfStorage'])) ->getMock(); } public function testGetBackendSingle(): void { $dispatcher = $this->createMock(IEventDispatcher::class); $manager = new VersionManager($dispatcher); $backend = $this->getBackend(); $manager->registerBackend(IStorage::class, $backend); $this->assertEquals($backend, $manager->getBackendForStorage($this->getStorage(Local::class))); } public function testGetBackendMoreSpecific(): void { $dispatcher = $this->createMock(IEventDispatcher::class); $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(); $manager->registerBackend(IStorage::class, $backend1); $manager->registerBackend(Local::class, $backend2); $this->assertEquals($backend2, $manager->getBackendForStorage($this->getStorage(Local::class))); } public function testGetBackendNoUse(): void { $dispatcher = $this->createMock(IEventDispatcher::class); $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(false); $manager->registerBackend(IStorage::class, $backend1); $manager->registerBackend(Local::class, $backend2); $this->assertEquals($backend1, $manager->getBackendForStorage($this->getStorage(Local::class))); } public function testGetBackendMultiple(): void { $dispatcher = $this->createMock(IEventDispatcher::class); $manager = new VersionManager($dispatcher); $backend1 = $this->getBackend(); $backend2 = $this->getBackend(false); $backend3 = $this->getBackend(); $manager->registerBackend(IStorage::class, $backend1); $manager->registerBackend(Local::class, $backend2); $manager->registerBackend(Local::class, $backend3); $this->assertEquals($backend3, $manager->getBackendForStorage($this->getStorage(Local::class))); } public function testRollbackSuccess(): void { $versionMock = $this->createMock(IVersion::class); $backendMock = $this->createMock(IVersionBackend::class); $backendMock->expects($this->once()) ->method('rollback') ->with($versionMock) ->willReturn(true); $versionMock->method('getBackend')->willReturn($backendMock); $dispatcherMock = $this->createMock(IEventDispatcher::class); $dispatcherMock->expects($this->once()) ->method('dispatchTyped') ->with($this->isInstanceOf(VersionRestoredEvent::class)); $manager = new VersionManager($dispatcherMock); $this->assertTrue($manager->rollback($versionMock)); } public function testRollbackNull(): void { $versionMock = $this->createMock(IVersion::class); $backendMock = $this->createMock(IVersionBackend::class); $backendMock->expects($this->once()) ->method('rollback') ->with($versionMock) ->willReturn(null); $versionMock->method('getBackend')->willReturn($backendMock); $dispatcherMock = $this->createMock(IEventDispatcher::class); $dispatcherMock->expects($this->once()) ->method('dispatchTyped') ->with($this->isInstanceOf(VersionRestoredEvent::class)); $manager = new VersionManager($dispatcherMock); $this->assertNull($manager->rollback($versionMock)); } public function testRollbackFailure(): void { $versionMock = $this->createMock(IVersion::class); $backendMock = $this->createMock(IVersionBackend::class); $backendMock->expects($this->once()) ->method('rollback') ->with($versionMock) ->willReturn(false); $versionMock->method('getBackend')->willReturn($backendMock); $dispatcherMock = $this->createMock(IEventDispatcher::class); $dispatcherMock->expects($this->never())->method('dispatchTyped'); $manager = new VersionManager($dispatcherMock); $this->assertFalse($manager->rollback($versionMock)); } } n24'>24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116