Remove all cache avatars on avatar deletion

Fixes #21513

Since we cache the generated avatars. We should also delete the
generated sizes when we remove the avatar.
This commit is contained in:
Roeland Jago Douma 2016-01-07 20:51:18 +01:00
parent 9ca670f94f
commit 4e6f6518ff
2 changed files with 31 additions and 13 deletions

View File

@ -124,12 +124,14 @@ class Avatar implements \OCP\IAvatar {
* @return void
*/
public function remove () {
try {
$this->folder->get('avatar.jpg')->delete();
} catch (\OCP\Files\NotFoundException $e) {}
try {
$this->folder->get('avatar.png')->delete();
} catch (\OCP\Files\NotFoundException $e) {}
$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
$avatars = $this->folder->search('avatar');
foreach ($avatars as $avatar) {
if (preg_match($regex, $avatar->getName())) {
$avatar->delete();
}
}
}
/**

View File

@ -110,13 +110,29 @@ class AvatarTest extends \Test\TestCase {
}
public function testSetAvatar() {
$oldFile = $this->getMock('\OCP\Files\File');
$this->folder->method('get')
->will($this->returnValueMap([
['avatar.jpg', $oldFile],
['avatar.png', $oldFile],
]));
$oldFile->expects($this->exactly(2))->method('delete');
$avatarFileJPG = $this->getMock('\OCP\Files\File');
$avatarFileJPG->method('getName')
->willReturn('avatar.jpg');
$avatarFileJPG->expects($this->once())->method('delete');
$avatarFilePNG = $this->getMock('\OCP\Files\File');
$avatarFilePNG->method('getName')
->willReturn('avatar.png');
$avatarFilePNG->expects($this->once())->method('delete');
$resizedAvatarFile = $this->getMock('\OCP\Files\File');
$resizedAvatarFile->method('getName')
->willReturn('avatar.32.jpg');
$resizedAvatarFile->expects($this->once())->method('delete');
$nonAvatarFile = $this->getMock('\OCP\Files\File');
$nonAvatarFile->method('getName')
->willReturn('avatarX');
$nonAvatarFile->expects($this->never())->method('delete');
$this->folder->method('search')
->with('avatar')
->willReturn([$avatarFileJPG, $avatarFilePNG, $resizedAvatarFile, $nonAvatarFile]);
$newFile = $this->getMock('\OCP\Files\File');
$this->folder->expects($this->once())