Merge pull request #11037 from MrPetovan/bug/11023-api-photo-delete
Fix Api\Friendica\Photo|album\Delete endpoints
This commit is contained in:
commit
2ba3b7f771
7 changed files with 103 additions and 10 deletions
|
@ -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.'];
|
||||
|
|
|
@ -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
|
||||
|
|
42
tests/datasets/photo/photo.fixture.php
Normal file
42
tests/datasets/photo/photo.fixture.php
Normal 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",
|
||||
],
|
||||
],
|
||||
];
|
1
tests/datasets/photo/test_photo.content
Normal file
1
tests/datasets/photo/test_photo.content
Normal file
File diff suppressed because one or more lines are too long
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue