diff --git a/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManager.php b/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManager.php new file mode 100644 index 000000000..52d13b23b --- /dev/null +++ b/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManager.php @@ -0,0 +1,31 @@ +lockManager->hasLock($storedObject)) { + return true; + } + + $lock = $this->lockManager->getLock($storedObject); + + return StoredObjectLockMethodEnum::WOPI === $lockMethodEnum && StoredObjectLockMethodEnum::WOPI === $lock->getMethod(); + } +} diff --git a/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManagerInterface.php b/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManagerInterface.php new file mode 100644 index 000000000..339c9a22a --- /dev/null +++ b/src/Bundle/ChillDocStoreBundle/Service/Lock/StoredObjectEditorDecisionManagerInterface.php @@ -0,0 +1,37 @@ +lockManager = $this->prophesize(StoredObjectLockManager::class); + $this->decisionManager = new StoredObjectEditorDecisionManager($this->lockManager->reveal()); + } + + public function testCanEditReturnsTrueIfNoLock(): void + { + $storedObject = $this->prophesize(StoredObject::class)->reveal(); + $this->lockManager->hasLock($storedObject)->willReturn(false); + + $this->assertTrue($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WEBDAV)); + $this->assertTrue($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WOPI)); + } + + public function testCanEditReturnsFalseIfExistingLockIsWebdav(): void + { + $storedObject = $this->prophesize(StoredObject::class)->reveal(); + $lock = $this->prophesize(StoredObjectLock::class); + $lock->getMethod()->willReturn(StoredObjectLockMethodEnum::WEBDAV); + + $this->lockManager->hasLock($storedObject)->willReturn(true); + $this->lockManager->getLock($storedObject)->willReturn($lock->reveal()); + + // Always false if existing lock is Webdav + $this->assertFalse($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WEBDAV)); + $this->assertFalse($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WOPI)); + } + + public function testCanEditReturnsTrueIfBothAreWopi(): void + { + $storedObject = $this->prophesize(StoredObject::class)->reveal(); + $lock = $this->prophesize(StoredObjectLock::class); + $lock->getMethod()->willReturn(StoredObjectLockMethodEnum::WOPI); + + $this->lockManager->hasLock($storedObject)->willReturn(true); + $this->lockManager->getLock($storedObject)->willReturn($lock->reveal()); + + $this->assertTrue($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WOPI)); + } + + public function testCanEditReturnsFalseIfExistingLockIsWopiButRequestedIsWebdav(): void + { + $storedObject = $this->prophesize(StoredObject::class)->reveal(); + $lock = $this->prophesize(StoredObjectLock::class); + $lock->getMethod()->willReturn(StoredObjectLockMethodEnum::WOPI); + + $this->lockManager->hasLock($storedObject)->willReturn(true); + $this->lockManager->getLock($storedObject)->willReturn($lock->reveal()); + + $this->assertFalse($this->decisionManager->canEdit($storedObject, StoredObjectLockMethodEnum::WEBDAV)); + } +}