diff options
author | ArthurHoaro <arthur@hoa.ro> | 2021-01-19 14:31:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-19 14:31:15 +0100 |
commit | baac4388b1696fb39f1b0bd621d215bba2da2ca8 (patch) | |
tree | fd671680c22f25d1b821b98cc307ae64d0ff2382 | |
parent | 5b5d22a3df1ba948d39524b997ea4c82ee70e646 (diff) | |
parent | 93175b6e9d5cfa4d4319bd58b9de01824d596288 (diff) | |
download | Shaarli-baac4388b1696fb39f1b0bd621d215bba2da2ca8.tar.gz Shaarli-baac4388b1696fb39f1b0bd621d215bba2da2ca8.tar.zst Shaarli-baac4388b1696fb39f1b0bd621d215bba2da2ca8.zip |
Merge pull request #1693 from ArthurHoaro/fix/bulk-add-delete
Fix: bulk add - delete existing link
3 files changed, 50 insertions, 3 deletions
diff --git a/application/front/controller/admin/ShaareManageController.php b/application/front/controller/admin/ShaareManageController.php index 35837baa..9633cd51 100644 --- a/application/front/controller/admin/ShaareManageController.php +++ b/application/front/controller/admin/ShaareManageController.php | |||
@@ -66,6 +66,10 @@ class ShaareManageController extends ShaarliAdminController | |||
66 | return $response->write('<script>self.close();</script>'); | 66 | return $response->write('<script>self.close();</script>'); |
67 | } | 67 | } |
68 | 68 | ||
69 | if ($request->getParam('source') === 'batch') { | ||
70 | return $response->withStatus(204); | ||
71 | } | ||
72 | |||
69 | // Don't redirect to permalink after deletion. | 73 | // Don't redirect to permalink after deletion. |
70 | return $this->redirectFromReferer($request, $response, ['shaare/']); | 74 | return $this->redirectFromReferer($request, $response, ['shaare/']); |
71 | } | 75 | } |
diff --git a/assets/common/js/shaare-batch.js b/assets/common/js/shaare-batch.js index 9753137d..4a1fdb2e 100644 --- a/assets/common/js/shaare-batch.js +++ b/assets/common/js/shaare-batch.js | |||
@@ -30,9 +30,9 @@ const sendBookmarkForm = (basePath, formElement) => { | |||
30 | const sendBookmarkDelete = (buttonElement, formElement) => ( | 30 | const sendBookmarkDelete = (buttonElement, formElement) => ( |
31 | new Promise((resolve, reject) => { | 31 | new Promise((resolve, reject) => { |
32 | const xhr = new XMLHttpRequest(); | 32 | const xhr = new XMLHttpRequest(); |
33 | xhr.open('GET', buttonElement.href); | 33 | xhr.open('GET', `${buttonElement.href}&source=batch`); |
34 | xhr.onload = () => { | 34 | xhr.onload = () => { |
35 | if (xhr.status !== 200) { | 35 | if (xhr.status !== 204) { |
36 | alert(`An error occurred. Return code: ${xhr.status}`); | 36 | alert(`An error occurred. Return code: ${xhr.status}`); |
37 | reject(); | 37 | reject(); |
38 | } else { | 38 | } else { |
diff --git a/tests/front/controller/admin/ShaareManageControllerTest/DeleteBookmarkTest.php b/tests/front/controller/admin/ShaareManageControllerTest/DeleteBookmarkTest.php index a276d988..42d0c0d6 100644 --- a/tests/front/controller/admin/ShaareManageControllerTest/DeleteBookmarkTest.php +++ b/tests/front/controller/admin/ShaareManageControllerTest/DeleteBookmarkTest.php | |||
@@ -363,6 +363,7 @@ class DeleteBookmarkTest extends TestCase | |||
363 | $this->container->bookmarkService->method('get')->with('123')->willReturn( | 363 | $this->container->bookmarkService->method('get')->with('123')->willReturn( |
364 | (new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123') | 364 | (new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123') |
365 | ); | 365 | ); |
366 | $this->container->bookmarkService->expects(static::once())->method('remove'); | ||
366 | 367 | ||
367 | $this->container->formatterFactory = $this->createMock(FormatterFactory::class); | 368 | $this->container->formatterFactory = $this->createMock(FormatterFactory::class); |
368 | $this->container->formatterFactory | 369 | $this->container->formatterFactory |
@@ -379,6 +380,48 @@ class DeleteBookmarkTest extends TestCase | |||
379 | $result = $this->controller->deleteBookmark($request, $response); | 380 | $result = $this->controller->deleteBookmark($request, $response); |
380 | 381 | ||
381 | static::assertSame(200, $result->getStatusCode()); | 382 | static::assertSame(200, $result->getStatusCode()); |
382 | static::assertSame('<script>self.close();</script>', (string) $result->getBody('location')); | 383 | static::assertSame('<script>self.close();</script>', (string) $result->getBody()); |
384 | } | ||
385 | |||
386 | /** | ||
387 | * Delete bookmark - from batch view | ||
388 | */ | ||
389 | public function testDeleteBookmarkFromBatch(): void | ||
390 | { | ||
391 | $parameters = [ | ||
392 | 'id' => '123', | ||
393 | 'source' => 'batch', | ||
394 | ]; | ||
395 | |||
396 | $request = $this->createMock(Request::class); | ||
397 | $request | ||
398 | ->method('getParam') | ||
399 | ->willReturnCallback(function (string $key) use ($parameters): ?string { | ||
400 | return $parameters[$key] ?? null; | ||
401 | }) | ||
402 | ; | ||
403 | $response = new Response(); | ||
404 | |||
405 | $this->container->bookmarkService->method('get')->with('123')->willReturn( | ||
406 | (new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123') | ||
407 | ); | ||
408 | $this->container->bookmarkService->expects(static::once())->method('remove'); | ||
409 | |||
410 | $this->container->formatterFactory = $this->createMock(FormatterFactory::class); | ||
411 | $this->container->formatterFactory | ||
412 | ->expects(static::once()) | ||
413 | ->method('getFormatter') | ||
414 | ->willReturnCallback(function (): BookmarkFormatter { | ||
415 | $formatter = $this->createMock(BookmarkFormatter::class); | ||
416 | $formatter->method('format')->willReturn(['formatted']); | ||
417 | |||
418 | return $formatter; | ||
419 | }) | ||
420 | ; | ||
421 | |||
422 | $result = $this->controller->deleteBookmark($request, $response); | ||
423 | |||
424 | static::assertSame(204, $result->getStatusCode()); | ||
425 | static::assertEmpty((string) $result->getBody()); | ||
383 | } | 426 | } |
384 | } | 427 | } |