fakeLockerPlugin = new FakeLockerPlugin(); } public function testInitialize(): void { /** @var Server $server */ $server = $this->createMock(Server::class); $calls = [ ['method:LOCK', [$this->fakeLockerPlugin, 'fakeLockProvider'], 1], ['method:UNLOCK', [$this->fakeLockerPlugin, 'fakeUnlockProvider'], 1], ['propFind', [$this->fakeLockerPlugin, 'propFind'], 100], ['validateTokens', [$this->fakeLockerPlugin, 'validateTokens'], 100], ]; $server->expects($this->exactly(count($calls))) ->method('on') ->willReturnCallback(function () use (&$calls): void { $expected = array_shift($calls); $this->assertEquals($expected, func_get_args()); }); $this->fakeLockerPlugin->initialize($server); } public function testGetHTTPMethods(): void { $expected = [ 'LOCK', 'UNLOCK', ]; $this->assertSame($expected, $this->fakeLockerPlugin->getHTTPMethods('Test')); } public function testGetFeatures(): void { $expected = [ 2, ]; $this->assertSame($expected, $this->fakeLockerPlugin->getFeatures()); } public function testPropFind(): void { $propFind = $this->createMock(PropFind::class); $node = $this->createMock(INode::class); $calls = [ '{DAV:}supportedlock', '{DAV:}lockdiscovery', ]; $propFind->expects($this->exactly(count($calls))) ->method('handle') ->willReturnCallback(function ($propertyName) use (&$calls): void { $expected = array_shift($calls); $this->assertEquals($expected, $propertyName); }); $this->fakeLockerPlugin->propFind($propFind, $node); } public static function tokenDataProvider(): array { return [ [ [ [ 'tokens' => [ [ 'token' => 'aToken', 'validToken' => false, ], [], [ 'token' => 'opaquelocktoken:asdf', 'validToken' => false, ] ], ] ], [ [ 'tokens' => [ [ 'token' => 'aToken', 'validToken' => false, ], [], [ 'token' => 'opaquelocktoken:asdf', 'validToken' => true, ] ], ] ], ] ]; } #[\PHPUnit\Framework\Attributes\DataProvider('tokenDataProvider')] public function testValidateTokens(array $input, array $expected): void { $request = $this->createMock(RequestInterface::class); $this->fakeLockerPlugin->validateTokens($request, $input); $this->assertSame($expected, $input); } public function testFakeLockProvider(): void { $request = $this->createMock(RequestInterface::class); $response = new Response(); $server = $this->getMockBuilder(Server::class) ->getMock(); $this->fakeLockerPlugin->initialize($server); $request->expects($this->exactly(2)) ->method('getPath') ->willReturn('MyPath'); $this->assertSame(false, $this->fakeLockerPlugin->fakeLockProvider($request, $response)); $expectedXml = 'MyPathinfinitySecond-1800opaquelocktoken:fe4f7f2437b151fbcb4e9f5c8118c6b1'; $this->assertXmlStringEqualsXmlString($expectedXml, $response->getBody()); } public function testFakeUnlockProvider(): void { $request = $this->createMock(RequestInterface::class); $response = $this->createMock(ResponseInterface::class); $response->expects($this->once()) ->method('setStatus') ->with('204'); $response->expects($this->once()) ->method('setHeader') ->with('Content-Length', '0'); $this->assertSame(false, $this->fakeLockerPlugin->fakeUnlockProvider($request, $response)); } }