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
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
namespace Friendica\Module\Api\Friendica\Photo;
|
namespace Friendica\Module\Api\Friendica\Photo;
|
||||||
|
|
||||||
use Friendica\DI;
|
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
use Friendica\Module\BaseApi;
|
use Friendica\Module\BaseApi;
|
||||||
|
@ -35,11 +34,10 @@ class Delete extends BaseApi
|
||||||
{
|
{
|
||||||
protected function rawContent(array $request = [])
|
protected function rawContent(array $request = [])
|
||||||
{
|
{
|
||||||
self::checkAllowedScope(self::SCOPE_WRITE);
|
|
||||||
$uid = self::getCurrentUserID();
|
$uid = self::getCurrentUserID();
|
||||||
|
|
||||||
$request = self::getRequest([
|
$request = self::getRequest([
|
||||||
'photo_id' => null, // Photo id
|
'photo_id' => '', // Photo id
|
||||||
], $request);
|
], $request);
|
||||||
|
|
||||||
// do several checks on input parameters
|
// do several checks on input parameters
|
||||||
|
@ -60,7 +58,7 @@ class Delete extends BaseApi
|
||||||
if ($result) {
|
if ($result) {
|
||||||
// function for setting the items to "deleted = 1" which ensures that comments, likes etc. are not shown anymore
|
// 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)
|
// 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);
|
Item::deleteForUser($condition, $uid);
|
||||||
|
|
||||||
$result = ['result' => 'deleted', 'message' => 'photo with id `' . $request['photo_id'] . '` has been deleted from server.'];
|
$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
|
// 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
|
// 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);
|
Item::deleteForUser($condition, $uid);
|
||||||
|
|
||||||
// now let's delete all photos from the album
|
// 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]);
|
(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']);
|
(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()
|
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