Make sure that bookmark sort is consistent, even with equal timestamps
Fixes #1348
This commit is contained in:
parent
1a6d61766a
commit
9f9627059a
2 changed files with 40 additions and 2 deletions
|
@ -102,7 +102,7 @@ public function __construct(
|
||||||
$isLoggedIn,
|
$isLoggedIn,
|
||||||
$hidePublicLinks
|
$hidePublicLinks
|
||||||
) {
|
) {
|
||||||
|
|
||||||
$this->datastore = $datastore;
|
$this->datastore = $datastore;
|
||||||
$this->loggedIn = $isLoggedIn;
|
$this->loggedIn = $isLoggedIn;
|
||||||
$this->hidePublicLinks = $hidePublicLinks;
|
$this->hidePublicLinks = $hidePublicLinks;
|
||||||
|
@ -415,7 +415,7 @@ public function filterSearch(
|
||||||
$visibility = 'all',
|
$visibility = 'all',
|
||||||
$untaggedonly = false
|
$untaggedonly = false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// Filter link database according to parameters.
|
// Filter link database according to parameters.
|
||||||
$searchtags = isset($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : '';
|
$searchtags = isset($filterRequest['searchtags']) ? escape($filterRequest['searchtags']) : '';
|
||||||
$searchterm = isset($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : '';
|
$searchterm = isset($filterRequest['searchterm']) ? escape($filterRequest['searchterm']) : '';
|
||||||
|
@ -533,6 +533,9 @@ public function reorder($order = 'DESC')
|
||||||
if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) {
|
if (isset($a['sticky']) && isset($b['sticky']) && $a['sticky'] !== $b['sticky']) {
|
||||||
return $a['sticky'] ? -1 : 1;
|
return $a['sticky'] ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
if ($a['created'] == $b['created']) {
|
||||||
|
return $a['id'] < $b['id'] ? 1 * $order : -1 * $order;
|
||||||
|
}
|
||||||
return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
|
return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -619,4 +619,39 @@ public function testCountLinkPerTagPrivateWithFilter()
|
||||||
|
|
||||||
$this->assertEquals($expected, $tags, var_export($tags, true));
|
$this->assertEquals($expected, $tags, var_export($tags, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make sure that bookmarks with the same timestamp have a consistent order:
|
||||||
|
* if their creation date is equal, bookmarks are sorted by ID DESC.
|
||||||
|
*/
|
||||||
|
public function testConsistentOrder()
|
||||||
|
{
|
||||||
|
$nextId = 42;
|
||||||
|
$creation = DateTime::createFromFormat('Ymd_His', '20190807_130444');
|
||||||
|
$linkDB = new LinkDB(self::$testDatastore, true, false);
|
||||||
|
for ($i = 0; $i < 4; ++$i) {
|
||||||
|
$linkDB[$nextId + $i] = [
|
||||||
|
'id' => $nextId + $i,
|
||||||
|
'url' => 'http://'. $i,
|
||||||
|
'created' => $creation,
|
||||||
|
'title' => true,
|
||||||
|
'description' => true,
|
||||||
|
'tags' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check 4 new links 4 times
|
||||||
|
for ($i = 0; $i < 4; ++$i) {
|
||||||
|
$linkDB->save('tests');
|
||||||
|
$linkDB = new LinkDB(self::$testDatastore, true, false);
|
||||||
|
$count = 3;
|
||||||
|
foreach ($linkDB as $link) {
|
||||||
|
$this->assertEquals($nextId + $count, $link['id']);
|
||||||
|
$this->assertEquals('http://'. $count, $link['url']);
|
||||||
|
if (--$count < 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue