Ensure tags are unique when adding and deleting them from bookmarks. (#1918)

* Ensure tags are unique when adding and deleting them from bookmarks.

* Fixed PHPCS issues with test script
This commit is contained in:
Keith Carangelo 2022-11-30 20:47:10 -05:00 committed by GitHub
parent e957f8fb23
commit 733b40446e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 2 deletions

View file

@ -524,7 +524,7 @@ class Bookmark
*/
public function addTag(string $tag): self
{
return $this->setTags(array_merge($this->getTags(), [$tag]));
return $this->setTags(array_unique(array_merge($this->getTags(), [$tag])));
}
/**
@ -534,7 +534,7 @@ class Bookmark
*/
public function deleteTag(string $tag): void
{
if (($pos = array_search($tag, $this->tags ?? [])) !== false) {
while (($pos = array_search($tag, $this->tags ?? [])) !== false) {
unset($this->tags[$pos]);
$this->tags = array_values($this->tags);
}

View file

@ -262,6 +262,63 @@ class BookmarkTest extends TestCase
$this->assertEquals($url, $bookmark->getUrl());
}
/**
* Test addTag() and DeleteTag()
*/
public function testAddDeleteTags()
{
$bookmark = new Bookmark();
$bookmark->addTag('tag1');
$this->assertEquals(
[
'tag1',
],
$bookmark->getTags()
);
// Ignore if tag is already present
$bookmark->addTag('tag2');
$bookmark->addTag('tag1');
$this->assertEquals(
[
'tag1',
'tag2',
],
$bookmark->getTags()
);
// Ignore deleting tags not present
$bookmark->deleteTag('tag5');
$this->assertEquals(
[
'tag1',
'tag2',
],
$bookmark->getTags()
);
// Delete multiples
$bookmark->setTags(['tag3', 'tag1', 'tag4', 'tag3', 'tag3', 'tag4']);
$bookmark->deleteTag('tag3');
$this->assertEquals(
[
'tag1',
'tag4',
'tag4',
],
$bookmark->getTags()
);
$bookmark->deleteTag('tag4');
$this->assertEquals(
[
'tag1',
],
$bookmark->getTags()
);
}
/**
* Test setTagsString() with exotic data
*/