aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2021-01-19 14:31:15 +0100
committerGitHub <noreply@github.com>2021-01-19 14:31:15 +0100
commitbaac4388b1696fb39f1b0bd621d215bba2da2ca8 (patch)
treefd671680c22f25d1b821b98cc307ae64d0ff2382
parent5b5d22a3df1ba948d39524b997ea4c82ee70e646 (diff)
parent93175b6e9d5cfa4d4319bd58b9de01824d596288 (diff)
downloadShaarli-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
-rw-r--r--application/front/controller/admin/ShaareManageController.php4
-rw-r--r--assets/common/js/shaare-batch.js4
-rw-r--r--tests/front/controller/admin/ShaareManageControllerTest/DeleteBookmarkTest.php45
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) => {
30const sendBookmarkDelete = (buttonElement, formElement) => ( 30const 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}