Merge pull request #11037 from MrPetovan/bug/11023-api-photo-delete

Fix Api\Friendica\Photo|album\Delete endpoints
This commit is contained in:
Hypolite Petovan 2021-11-29 08:44:33 -05:00 committed by GitHub
commit 2ba3b7f771
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 103 additions and 10 deletions

View file

@ -21,7 +21,6 @@
namespace Friendica\Module\Api\Friendica\Photo;
use Friendica\DI;
use Friendica\Model\Item;
use Friendica\Model\Photo;
use Friendica\Module\BaseApi;
@ -35,11 +34,10 @@ class Delete extends BaseApi
{
protected function rawContent(array $request = [])
{
self::checkAllowedScope(self::SCOPE_WRITE);
$uid = self::getCurrentUserID();
$request = self::getRequest([
'photo_id' => null, // Photo id
'photo_id' => '', // Photo id
], $request);
// do several checks on input parameters
@ -60,7 +58,7 @@ class Delete extends BaseApi
if ($result) {
// function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore
// to the user and the contacts of the users (drop_items() do all the necessary magic to avoid orphans in database and federate deletion)
$condition = ['uid' => $uid, 'resource-id' => $request['photo_id'], 'type' => 'photo'];
$condition = ['uid' => $uid, 'resource-id' => $request['photo_id'], 'post-type' => Item::PT_IMAGE, 'origin' => true];
Item::deleteForUser($condition, $uid);
$result = ['result' => 'deleted', 'message' => 'photo with id `' . $request['photo_id'] . '` has been deleted from server.'];

View file

@ -58,7 +58,7 @@ class Delete extends BaseApi
// function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore
// to the user and the contacts of the users (drop_items() performs the federation of the deletion to other networks
$condition = ['uid' => $uid, 'resource-id' => $resourceIds, 'type' => 'photo'];
$condition = ['uid' => $uid, 'resource-id' => $resourceIds, 'post-type' => Item::PT_IMAGE, 'origin' => true];
Item::deleteForUser($condition, $uid);
// now let's delete all photos from the album

View file

@ -0,0 +1,42 @@
<?php
return [
'storage' => [
[
'id' => 1,
'data' => file_get_contents(__DIR__ . '/test_photo.content'),
],
],
'photo' => [
[
"id" => 1,
"uid" => 42,
"contact-id" => 0,
"guid" => "71361a283a6aa6a2",
"resource-id" => "709057080661a283a6aa598501504178",
"hash" => "fc84f6c0ae79f626e4b7f65f438e60c1",
"created" => "2021-11-27 19:14:47",
"edited" => "2021-11-27 19:14:47",
"title" => "",
"desc" => "",
"album" => "test_album",
"photo-type" => 0,
"filename" => "traffic-signs-g1c8094e4f_1920.jpg",
"type" => "image/jpeg",
"height" => 226,
"width" => 320,
"datasize" => 96968,
"data" => "",
"scale" => 2,
"profile" => 0,
"allow_cid" => "",
"allow_gid" => "",
"deny_cid" => "",
"deny_gid" => "",
"accessible" => 0,
"backend-class" => "Database",
"backend-ref" => "1",
"updated" => "0001-01-01 00:00:00",
],
],
];

File diff suppressed because one or more lines are too long

View file

@ -46,8 +46,37 @@ class DeleteTest extends ApiTest
(new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::POST]))->run(['photo_id' => 1]);
}
public function testWithCorrectPhotoId()
public function testValidWithPost()
{
self::markTestIncomplete('We need to add a dataset for this.');
$this->loadFixture(__DIR__ . '/../../../../../datasets/photo/photo.fixture.php', DI::dba());
$delete = new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::POST]);
$response = $delete->run([], ['photo_id' => '709057080661a283a6aa598501504178']);
$responseText = (string)$response->getBody();
self::assertJson($responseText);
$json = json_decode($responseText);
self::assertEquals('deleted', $json->result);
self::assertEquals('photo with id `709057080661a283a6aa598501504178` has been deleted from server.', $json->message);
}
public function testValidWithDelete()
{
$this->loadFixture(__DIR__ . '/../../../../../datasets/photo/photo.fixture.php', DI::dba());
$delete = new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::DELETE]);
$response = $delete->run([], ['photo_id' => '709057080661a283a6aa598501504178']);
$responseText = (string)$response->getBody();
self::assertJson($responseText);
$json = json_decode($responseText);
self::assertEquals('deleted', $json->result);
self::assertEquals('photo with id `709057080661a283a6aa598501504178` has been deleted from server.', $json->message);
}
}

View file

@ -42,8 +42,20 @@ class DeleteTest extends ApiTest
(new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::POST]))->run(['album' => 'album_name']);
}
public function testValid()
public function testValidWithDelete()
{
self::markTestIncomplete('We need to add a dataset for this.');
$this->loadFixture(__DIR__ . '/../../../../../datasets/photo/photo.fixture.php', DI::dba());
$delete = new Delete(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::DELETE]);
$response = $delete->run([], ['album' => 'test_album']);
$responseText = (string)$response->getBody();
self::assertJson($responseText);
$json = json_decode($responseText);
self::assertEquals('deleted', $json->result);
self::assertEquals('album `test_album` with all containing photos has been deleted.', $json->message);
}
}

View file

@ -54,6 +54,17 @@ class UpdateTest extends ApiTest
public function testValid()
{
self::markTestIncomplete('We need to add a dataset for this.');
$this->loadFixture(__DIR__ . '/../../../../../datasets/photo/photo.fixture.php', DI::dba());
$response = (new Update(DI::app(), DI::l10n(), DI::baseUrl(), DI::args(), DI::logger(), DI::profiler(), DI::apiResponse(), ['REQUEST_METHOD' => Router::POST]))->run([], ['album' => 'test_album', 'album_new' => 'test_album_2']);
$responseBody = (string)$response->getBody();
self::assertJson($responseBody);
$json = json_decode($responseBody);
self::assertEquals('updated', $json->result);
self::assertEquals('album `test_album` with all containing photos has been renamed to `test_album_2`.', $json->message);
}
}