Fix: bulk add - delete existing link
Do not send redirect response in bookmark delete controller if the request comes from bulk creation page. Fixes #1683
This commit is contained in:
parent
ffa39719a1
commit
93175b6e9d
3 changed files with 50 additions and 3 deletions
|
@ -66,6 +66,10 @@ public function deleteBookmark(Request $request, Response $response): Response
|
||||||
return $response->write('<script>self.close();</script>');
|
return $response->write('<script>self.close();</script>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($request->getParam('source') === 'batch') {
|
||||||
|
return $response->withStatus(204);
|
||||||
|
}
|
||||||
|
|
||||||
// Don't redirect to permalink after deletion.
|
// Don't redirect to permalink after deletion.
|
||||||
return $this->redirectFromReferer($request, $response, ['shaare/']);
|
return $this->redirectFromReferer($request, $response, ['shaare/']);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,9 +26,9 @@ const sendBookmarkForm = (basePath, formElement) => {
|
||||||
const sendBookmarkDelete = (buttonElement, formElement) => (
|
const sendBookmarkDelete = (buttonElement, formElement) => (
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
const xhr = new XMLHttpRequest();
|
const xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', buttonElement.href);
|
xhr.open('GET', `${buttonElement.href}&source=batch`);
|
||||||
xhr.onload = () => {
|
xhr.onload = () => {
|
||||||
if (xhr.status !== 200) {
|
if (xhr.status !== 204) {
|
||||||
alert(`An error occurred. Return code: ${xhr.status}`);
|
alert(`An error occurred. Return code: ${xhr.status}`);
|
||||||
reject();
|
reject();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -363,6 +363,7 @@ public function testDeleteBookmarkFromBookmarklet(): void
|
||||||
$this->container->bookmarkService->method('get')->with('123')->willReturn(
|
$this->container->bookmarkService->method('get')->with('123')->willReturn(
|
||||||
(new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123')
|
(new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123')
|
||||||
);
|
);
|
||||||
|
$this->container->bookmarkService->expects(static::once())->method('remove');
|
||||||
|
|
||||||
$this->container->formatterFactory = $this->createMock(FormatterFactory::class);
|
$this->container->formatterFactory = $this->createMock(FormatterFactory::class);
|
||||||
$this->container->formatterFactory
|
$this->container->formatterFactory
|
||||||
|
@ -379,6 +380,48 @@ public function testDeleteBookmarkFromBookmarklet(): void
|
||||||
$result = $this->controller->deleteBookmark($request, $response);
|
$result = $this->controller->deleteBookmark($request, $response);
|
||||||
|
|
||||||
static::assertSame(200, $result->getStatusCode());
|
static::assertSame(200, $result->getStatusCode());
|
||||||
static::assertSame('<script>self.close();</script>', (string) $result->getBody('location'));
|
static::assertSame('<script>self.close();</script>', (string) $result->getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete bookmark - from batch view
|
||||||
|
*/
|
||||||
|
public function testDeleteBookmarkFromBatch(): void
|
||||||
|
{
|
||||||
|
$parameters = [
|
||||||
|
'id' => '123',
|
||||||
|
'source' => 'batch',
|
||||||
|
];
|
||||||
|
|
||||||
|
$request = $this->createMock(Request::class);
|
||||||
|
$request
|
||||||
|
->method('getParam')
|
||||||
|
->willReturnCallback(function (string $key) use ($parameters): ?string {
|
||||||
|
return $parameters[$key] ?? null;
|
||||||
|
})
|
||||||
|
;
|
||||||
|
$response = new Response();
|
||||||
|
|
||||||
|
$this->container->bookmarkService->method('get')->with('123')->willReturn(
|
||||||
|
(new Bookmark())->setId(123)->setUrl('http://domain.tld')->setTitle('Title 123')
|
||||||
|
);
|
||||||
|
$this->container->bookmarkService->expects(static::once())->method('remove');
|
||||||
|
|
||||||
|
$this->container->formatterFactory = $this->createMock(FormatterFactory::class);
|
||||||
|
$this->container->formatterFactory
|
||||||
|
->expects(static::once())
|
||||||
|
->method('getFormatter')
|
||||||
|
->willReturnCallback(function (): BookmarkFormatter {
|
||||||
|
$formatter = $this->createMock(BookmarkFormatter::class);
|
||||||
|
$formatter->method('format')->willReturn(['formatted']);
|
||||||
|
|
||||||
|
return $formatter;
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
|
$result = $this->controller->deleteBookmark($request, $response);
|
||||||
|
|
||||||
|
static::assertSame(204, $result->getStatusCode());
|
||||||
|
static::assertEmpty((string) $result->getBody());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue