1
0
mirror of https://github.com/php/web-php.git synced 2026-03-24 15:22:19 +01:00
Files
archived-web-php/tests/Unit/UserNotes/SorterTest.php
2024-02-13 16:16:24 +03:00

410 lines
11 KiB
PHP

<?php
declare(strict_types=1);
namespace phpweb\Test\Unit\UserNotes;
use PHPUnit\Framework;
use phpweb\UserNotes\Sorter;
use phpweb\UserNotes\UserNote;
#[Framework\Attributes\CoversClass(Sorter::class)]
#[Framework\Attributes\UsesClass(UserNote::class)]
final class SorterTest extends Framework\TestCase
{
public function testSortSortsNotesWhenNotesAreEmpty(): void
{
$notes = [];
$sorter = new Sorter();
$sorter->sort($notes);
self::assertSame([], $notes);
}
public function testSortSortsSingleNoteWithNoVotes(): void
{
$notes = [
new UserNote('1', '', '', '1613487094', '', '', 0, 0),
];
$sorter = new Sorter();
$sorter->sort($notes);
$normalized = array_map(static function (UserNote $note): array {
return self::normalize($note);
}, $notes);
$expected = [
0 => [
'downvotes' => 0,
'id' => '1',
'ts' => '1613487094',
'upvotes' => 0,
],
];
self::assertSame($expected, $normalized);
}
public function testSortSortsSomeNotes(): void
{
$notes = [
new UserNote('1', '', '', '1613487094', '', '', 0, 2),
new UserNote('2', '', '', '1508180150', '', '', 0, 0),
new UserNote('3', '', '', '1508179844', '', '', 14, 3),
new UserNote('4', '', '', '1508179844', '', '', 14, 3),
];
$sorter = new Sorter();
$sorter->sort($notes);
$normalized = array_map(static function (UserNote $note): array {
return self::normalize($note);
}, $notes);
$expected = [
2 => [
'downvotes' => 3,
'id' => '3',
'ts' => '1508179844',
'upvotes' => 14,
],
3 => [
'downvotes' => 3,
'id' => '4',
'ts' => '1508179844',
'upvotes' => 14,
],
1 => [
'downvotes' => 0,
'id' => '2',
'ts' => '1508180150',
'upvotes' => 0,
],
0 => [
'downvotes' => 2,
'id' => '1',
'ts' => '1613487094',
'upvotes' => 0,
],
];
self::assertSame($expected, $normalized);
}
public function testSortSortsFullNotes(): void
{
$file = file(__DIR__ . '/../../../backend/notes/d7/d7742c269d23ea86');
$notes = [];
foreach ($file as $line) {
@list($id, $sect, $rate, $ts, $user, $note, $up, $down) = explode('|', $line);
$notes[$id] = new UserNote($id, $sect, $rate, $ts, $user, base64_decode($note, true), (int) $up, (int) $down);
}
$sorter = new Sorter();
$sorter->sort($notes);
$normalized = array_map(static function (UserNote $note): array {
return self::normalize($note);
}, $notes);
$expected = [
110464 => [
'downvotes' => 2,
'id' => '110464',
'ts' => '1351105628',
'upvotes' => 10,
],
93816 => [
'downvotes' => 1,
'id' => '93816',
'ts' => '1254343074',
'upvotes' => 4,
],
92849 => [
'downvotes' => 1,
'id' => '92849',
'ts' => '1249997359',
'upvotes' => 4,
],
70394 => [
'downvotes' => 3,
'id' => '70394',
'ts' => '1160823504',
'upvotes' => 7,
],
106407 => [
'downvotes' => 2,
'id' => '106407',
'ts' => '1320695958',
'upvotes' => 5,
],
87868 => [
'downvotes' => 2,
'id' => '87868',
'ts' => '1230396484',
'upvotes' => 5,
],
82229 => [
'downvotes' => 1,
'id' => '82229',
'ts' => '1207066654',
'upvotes' => 3,
],
80363 => [
'downvotes' => 1,
'id' => '80363',
'ts' => '1200066332',
'upvotes' => 3,
],
75146 => [
'downvotes' => 1,
'id' => '75146',
'ts' => '1179195708',
'upvotes' => 3,
],
102773 => [
'downvotes' => 3,
'id' => '102773',
'ts' => '1299300266',
'upvotes' => 6,
],
111422 => [
'downvotes' => 2,
'id' => '111422',
'ts' => '1361224553',
'upvotes' => 4,
],
94469 => [
'downvotes' => 2,
'id' => '94469',
'ts' => '1257516214',
'upvotes' => 4,
],
99476 => [
'downvotes' => 1,
'id' => '99476',
'ts' => '1282186230',
'upvotes' => 2,
],
99332 => [
'downvotes' => 1,
'id' => '99332',
'ts' => '1281503061',
'upvotes' => 2,
],
96926 => [
'downvotes' => 1,
'id' => '96926',
'ts' => '1269330508',
'upvotes' => 2,
],
93887 => [
'downvotes' => 1,
'id' => '93887',
'ts' => '1254733546',
'upvotes' => 2,
],
87061 => [
'downvotes' => 1,
'id' => '87061',
'ts' => '1226944352',
'upvotes' => 2,
],
85835 => [
'downvotes' => 1,
'id' => '85835',
'ts' => '1221823065',
'upvotes' => 2,
],
72466 => [
'downvotes' => 1,
'id' => '72466',
'ts' => '1169208947',
'upvotes' => 2,
],
69927 => [
'downvotes' => 1,
'id' => '69927',
'ts' => '1159299208',
'upvotes' => 2,
],
41762 => [
'downvotes' => 1,
'id' => '41762',
'ts' => '1082561916',
'upvotes' => 2,
],
107678 => [
'downvotes' => 2,
'id' => '107678',
'ts' => '1330185500',
'upvotes' => 3,
],
89788 => [
'downvotes' => 2,
'id' => '89788',
'ts' => '1237801686',
'upvotes' => 3,
],
74286 => [
'downvotes' => 2,
'id' => '74286',
'ts' => '1175594279',
'upvotes' => 3,
],
58688 => [
'downvotes' => 2,
'id' => '58688',
'ts' => '1131719326',
'upvotes' => 3,
],
45088 => [
'downvotes' => 2,
'id' => '45088',
'ts' => '1093449145',
'upvotes' => 3,
],
49739 => [
'downvotes' => 0,
'id' => '49739',
'ts' => '1107758025',
'upvotes' => 2,
],
108426 => [
'downvotes' => 2,
'id' => '108426',
'ts' => '1335372412',
'upvotes' => 2,
],
107240 => [
'downvotes' => 2,
'id' => '107240',
'ts' => '1327390683',
'upvotes' => 2,
],
105984 => [
'downvotes' => 2,
'id' => '105984',
'ts' => '1317340435',
'upvotes' => 2,
],
99440 => [
'downvotes' => 4,
'id' => '99440',
'ts' => '1282058725',
'upvotes' => 4,
],
93566 => [
'downvotes' => 2,
'id' => '93566',
'ts' => '1253094436',
'upvotes' => 2,
],
88798 => [
'downvotes' => 1,
'id' => '88798',
'ts' => '1234090865',
'upvotes' => 1,
],
84910 => [
'downvotes' => 2,
'id' => '84910',
'ts' => '1217938595',
'upvotes' => 2,
],
83914 => [
'downvotes' => 1,
'id' => '83914',
'ts' => '1213760931',
'upvotes' => 1,
],
78483 => [
'downvotes' => 1,
'id' => '78483',
'ts' => '1192337362',
'upvotes' => 1,
],
74763 => [
'downvotes' => 1,
'id' => '74763',
'ts' => '1177577911',
'upvotes' => 1,
],
74432 => [
'downvotes' => 1,
'id' => '74432',
'ts' => '1176269720',
'upvotes' => 1,
],
47879 => [
'downvotes' => 1,
'id' => '47879',
'ts' => '1102066114',
'upvotes' => 1,
],
40617 => [
'downvotes' => 0,
'id' => '40617',
'ts' => '1078853206',
'upvotes' => 0,
],
38375 => [
'downvotes' => 1,
'id' => '38375',
'ts' => '1071743640',
'upvotes' => 1,
],
106295 => [
'downvotes' => 3,
'id' => '106295',
'ts' => '1319574977',
'upvotes' => 2,
],
95875 => [
'downvotes' => 3,
'id' => '95875',
'ts' => '1264517173',
'upvotes' => 2,
],
102336 => [
'downvotes' => 2,
'id' => '102336',
'ts' => '1297217360',
'upvotes' => 1,
],
93781 => [
'downvotes' => 2,
'id' => '93781',
'ts' => '1254189367',
'upvotes' => 1,
],
90065 => [
'downvotes' => 2,
'id' => '90065',
'ts' => '1238827503',
'upvotes' => 1,
],
];
self::assertSame($expected, $normalized);
}
private static function normalize(UserNote $note): array
{
return [
'downvotes' => $note->downvotes,
'id' => $note->id,
'ts' => $note->ts,
'upvotes' => $note->upvotes,
];
}
}