re-implements document lock manager for wopi

This commit is contained in:
2022-06-27 22:44:10 +02:00
parent bf536aab38
commit 03bc94178f
6 changed files with 161 additions and 1 deletions

View File

@@ -0,0 +1,78 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\WopiBundle\Tests\Service\Wopi;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Redis\ChillRedis;
use Chill\WopiBundle\Service\Wopi\ChillDocumentLockManager;
use Prophecy\PhpUnit\ProphecyTrait;
use Psr\Http\Message\RequestInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @internal
* @coversNothing
*/
final class ChillDocumentLockManagerTest extends KernelTestCase
{
use ProphecyTrait;
protected function setUp(): void
{
self::bootKernel();
}
public function testMultipleLoops()
{
$manager = $this->makeManager(1);
$document = new StoredObject();
$request = $this->prophesize(RequestInterface::class);
$i = 0;
while (50 > ++$i) {
$this->assertFalse($manager->hasLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'dummy', $request->reveal()));
$this->assertEquals('dummy', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->deleteLock($document, $request->reveal()));
$this->assertFalse($manager->hasLock($document, $request->reveal()));
}
}
public function testSingleLock()
{
$manager = $this->makeManager(1);
$document = new StoredObject();
$request = $this->prophesize(RequestInterface::class);
$this->assertFalse($manager->hasLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'dummy', $request->reveal()));
$this->assertEquals('dummy', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->deleteLock($document, $request->reveal()));
$this->assertFalse($manager->hasLock($document, $request->reveal()));
}
private function makeManager(int $ttlAfterDeleteSeconds): ChillDocumentLockManager
{
$redis = self::$container->get(ChillRedis::class);
return new ChillDocumentLockManager($redis, $ttlAfterDeleteSeconds);
}
}