setUpUserTrait(); $this->user = $this->createUser($this->userId, "password"); self::loginAsUser($this->userId); $userFolder = Server::get(IRootFolder::class)->getUserFolder($this->userId); $this->file = $userFolder->newFile("hook-test-file.docx", "content"); $this->versionId = (string)$this->file->getMtime(); } protected function tearDown(): void { FileVersions::deleteAllVersions($this->userId, $this->file); if ($this->file->isReadable()) { $this->file->delete(); } self::logout(); $this->tearDownUserTrait(); parent::tearDown(); } /** * Does nothing when the path param is empty. */ public function testFileVersionDeleteDoesNothingForEmptyPath(): void { Hooks::fileVersionDelete(["path" => ""]); // No exception — passes if we reach this point $this->addToAssertionCount(1); } /** * Does nothing when the path has no version suffix. */ public function testFileVersionDeleteDoesNothingForPathWithoutVersionSuffix(): void { Hooks::fileVersionDelete(["path" => "/hook-test-file.docx"]); $this->addToAssertionCount(1); } /** * Does nothing when the file referenced in the path does not exist. */ public function testFileVersionDeleteDoesNothingForNonExistentFile(): void { Hooks::fileVersionDelete(["path" => "/non-existent-file.docx.v" . $this->versionId]); $this->addToAssertionCount(1); } /** * Deletes the version history and changes when a valid versioned path is given. */ public function testFileVersionDeleteRemovesHistoryAndChanges(): void { FileVersions::saveHistory($this->file, ["key" => "v1"], "changes-data", "prev-key"); Hooks::fileVersionDelete(["path" => "/hook-test-file.docx.v" . $this->versionId]); $this->assertFalse(FileVersions::hasChanges($this->userId, $this->file, $this->versionId)); } /** * Deletes the version author when a valid versioned path is given. */ public function testFileVersionDeleteRemovesAuthor(): void { FileVersions::saveAuthor($this->file, $this->user); Hooks::fileVersionDelete(["path" => "/hook-test-file.docx.v" . $this->versionId]); $this->assertNull(FileVersions::getAuthor($this->userId, $this->file, $this->versionId)); } /** * Deletes both history and author in a single call when both are present. */ public function testFileVersionDeleteRemovesHistoryAndAuthorTogether(): void { FileVersions::saveHistory($this->file, ["key" => "v1"], "changes-data", "prev-key"); FileVersions::saveAuthor($this->file, $this->user); Hooks::fileVersionDelete(["path" => "/hook-test-file.docx.v" . $this->versionId]); $this->assertFalse(FileVersions::hasChanges($this->userId, $this->file, $this->versionId)); $this->assertNull(FileVersions::getAuthor($this->userId, $this->file, $this->versionId)); } }