mirror of
https://github.com/php/web-php.git
synced 2026-03-23 23:02:13 +01:00
Enhancement: Turn PHPT tests into PHPUnit test cases (#943)
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"phpweb\\Test\\EndToEnd\\": "tests/EndToEnd/"
|
||||
"phpweb\\Test\\": "tests/"
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
|
||||
54
tests/Unit/CleanAntiSpamTest.php
Normal file
54
tests/Unit/CleanAntiSpamTest.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace phpweb\Test\Unit;
|
||||
|
||||
use PHPUnit\Framework;
|
||||
|
||||
#[Framework\Attributes\CoversFunction('clean_AntiSPAM')]
|
||||
final class CleanAntiSpamTest extends Framework\TestCase
|
||||
{
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
require_once __DIR__ . '/../../include/email-validation.inc';
|
||||
}
|
||||
|
||||
#[Framework\Attributes\DataProvider('provideEmailAndExpectedEmail')]
|
||||
public function testCleanAntiSpamReturnsCleanedEmail(
|
||||
string $email,
|
||||
string $expectedEmail,
|
||||
): void
|
||||
{
|
||||
$cleanedEmail = clean_AntiSPAM($email);
|
||||
|
||||
self::assertSame($expectedEmail, $cleanedEmail);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Generator<string, array{0: string, 1: string}>
|
||||
*/
|
||||
public static function provideEmailAndExpectedEmail(): \Generator
|
||||
{
|
||||
$values = [
|
||||
'asasasd324324@php.net' => 'asasasd324324@php.net',
|
||||
'jcastagnetto-delete-this-@yahoo.com' => 'jcastagnetto@yahoo.com',
|
||||
'jcastagnetto-i-hate-spam@NOSPAMyahoo.com' => 'jcastagnetto@yahoo.com',
|
||||
'jcastagnetto-NO-SPAM@yahoo.com' => 'jcastagnetto@yahoo.com',
|
||||
'jcastagnetto@NoSpam-yahoo.com' => 'jcastagnetto@yahoo.com',
|
||||
'jesusmc@scripps.edu' => 'jesusmc@scripps.edu',
|
||||
'jmcastagnetto@chek2.com' => 'jmcastagnetto@chek2.com',
|
||||
'jmcastagnetto@yahoo.com' => 'jmcastagnetto@yahoo.com',
|
||||
'some-wrong@asdas.com' => 'some-wrong@asdas.com',
|
||||
'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff' => 'wrong-address-with@@@@and-somestuff',
|
||||
'wrong-email-address@lists.php.net' => 'wrong-email-address@lists.php.net',
|
||||
];
|
||||
|
||||
foreach ($values as $email => $expectedEmail) {
|
||||
yield $email => [
|
||||
$email,
|
||||
$expectedEmail,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
160
tests/Unit/GenChallengeTest.php
Normal file
160
tests/Unit/GenChallengeTest.php
Normal file
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace phpweb\Test\Unit;
|
||||
|
||||
use PHPUnit\Framework;
|
||||
|
||||
#[Framework\Attributes\CoversFunction('gen_challenge')]
|
||||
#[Framework\Attributes\UsesFunction('gen_minus')]
|
||||
#[Framework\Attributes\UsesFunction('gen_plus')]
|
||||
#[Framework\Attributes\UsesFunction('print_infix')]
|
||||
#[Framework\Attributes\UsesFunction('print_prefix')]
|
||||
final class GenChallengeTest extends Framework\TestCase
|
||||
{
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
require_once __DIR__ . '/../../manual/spam_challenge.php';
|
||||
|
||||
mt_srand(9001);
|
||||
}
|
||||
|
||||
public function testGenChallengeReturnsChallenge(): void {
|
||||
$challenges = array_map(static function (): array {
|
||||
[$function, $argumentOne, $argumentTwo, $question] = gen_challenge();
|
||||
|
||||
return [
|
||||
'function' => $function,
|
||||
'argumentOne' => $argumentOne,
|
||||
'argumentTwo' => $argumentTwo,
|
||||
'question' => $question,
|
||||
];
|
||||
}, range(1, 20));
|
||||
|
||||
$expected = [
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'min(two, one)',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'five',
|
||||
'argumentTwo' => 'five',
|
||||
'question' => 'five minus five',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'four',
|
||||
'argumentTwo' => 'four',
|
||||
'question' => 'four minus four',
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'nine',
|
||||
'argumentTwo' => 'seven',
|
||||
'question' => 'min(nine, seven)',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'seven',
|
||||
'argumentTwo' => 'six',
|
||||
'question' => 'seven minus six',
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'six',
|
||||
'question' => 'max(three, six)',
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'six',
|
||||
'argumentTwo' => 'five',
|
||||
'question' => 'max(six, five)',
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'four',
|
||||
'argumentTwo' => 'three',
|
||||
'question' => 'max(four, three)',
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'nine',
|
||||
'question' => 'min(two, nine)',
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'eight plus one',
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'five',
|
||||
'question' => 'three plus five',
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'three',
|
||||
'question' => 'min(eight, three)',
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'zero',
|
||||
'argumentTwo' => 'nine',
|
||||
'question' => 'max(zero, nine)',
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'five',
|
||||
'argumentTwo' => 'nine',
|
||||
'question' => 'min(five, nine)',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'six',
|
||||
'argumentTwo' => 'four',
|
||||
'question' => 'six minus four',
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'one',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'max(one, one)',
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'five',
|
||||
'argumentTwo' => 'zero',
|
||||
'question' => 'five plus zero',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'nine',
|
||||
'argumentTwo' => 'eight',
|
||||
'question' => 'nine minus eight',
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'three minus one',
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'min(three, one)',
|
||||
],
|
||||
];
|
||||
|
||||
self::assertSame($expected, $challenges);
|
||||
}
|
||||
}
|
||||
73
tests/Unit/IsEmailableAddressTest.php
Normal file
73
tests/Unit/IsEmailableAddressTest.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace phpweb\Test\Unit;
|
||||
|
||||
use PHPUnit\Framework;
|
||||
|
||||
#[Framework\Attributes\CoversFunction('is_emailable_address')]
|
||||
final class IsEmailableAddressTest extends Framework\TestCase
|
||||
{
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
require_once __DIR__ . '/../../include/email-validation.inc';
|
||||
}
|
||||
|
||||
#[Framework\Attributes\DataProvider('provideInvalidEmail')]
|
||||
public function testIsEmailableAddressReturnsFalseWhenEmailIsInvalid(string $email): void
|
||||
{
|
||||
$isEmailableAddress = is_emailable_address($email);
|
||||
|
||||
self::assertFalse($isEmailableAddress);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Generator<string, array{0: string}>
|
||||
*/
|
||||
public static function provideInvalidEmail(): \Generator
|
||||
{
|
||||
$values = [
|
||||
'jcastagnetto-i-hate-spam@NOSPAMyahoo.test',
|
||||
'jcastagnetto@NoSpam-yahoo.com',
|
||||
'jmcastagnetto@chek2.com',
|
||||
'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff',
|
||||
'wrong-email-address@lists.php.net',
|
||||
];
|
||||
|
||||
foreach ($values as $value) {
|
||||
yield $value => [
|
||||
$value,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
#[Framework\Attributes\DataProvider('provideValidEmail')]
|
||||
public function testIsEmailableAddressReturnsTrueWhenEmailIsValid(string $email): void
|
||||
{
|
||||
$isEmailableAddress = is_emailable_address($email);
|
||||
|
||||
self::assertTrue($isEmailableAddress);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Generator<string, array{0: string}>
|
||||
*/
|
||||
public static function provideValidEmail(): \Generator
|
||||
{
|
||||
$values = [
|
||||
'asasasd324324@php.net',
|
||||
'jcastagnetto-delete-this-@yahoo.com',
|
||||
'jcastagnetto-NO-SPAM@yahoo.com',
|
||||
'jesusmc@scripps.edu',
|
||||
'jmcastagnetto@yahoo.com',
|
||||
'some-wrong@asdas.com',
|
||||
];
|
||||
|
||||
foreach ($values as $value) {
|
||||
yield $value => [
|
||||
$value,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
101
tests/Unit/TestAnswerTest.php
Normal file
101
tests/Unit/TestAnswerTest.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace phpweb\Test\Unit;
|
||||
|
||||
use PHPUnit\Framework;
|
||||
|
||||
#[Framework\Attributes\CoversFunction('test_answer')]
|
||||
#[Framework\Attributes\UsesFunction('minus')]
|
||||
#[Framework\Attributes\UsesFunction('plus')]
|
||||
final class TestAnswerTest extends Framework\TestCase
|
||||
{
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
require_once __DIR__ . '/../../manual/spam_challenge.php';
|
||||
}
|
||||
|
||||
#[Framework\Attributes\DataProvider('provideFunctionArgumentsAnswerAndExpectedIsValid')]
|
||||
public function testAnswerReturnsIsValid(
|
||||
string $function,
|
||||
string $argumentOne,
|
||||
string $argumentTwo,
|
||||
string $answer,
|
||||
bool $expectedIsValid,
|
||||
): void {
|
||||
$isValid = test_answer(
|
||||
$function,
|
||||
$argumentOne,
|
||||
$argumentTwo,
|
||||
$answer,
|
||||
);
|
||||
|
||||
self::assertSame($expectedIsValid, $isValid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int, array{function: string, argumentOne: string, argumentTwo: string, answer: string, expectedIsValid: bool}>
|
||||
*/
|
||||
public static function provideFunctionArgumentsAnswerAndExpectedIsValid(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'one',
|
||||
'answer' => 'two',
|
||||
'expectedIsValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'one',
|
||||
'answer' => 'one',
|
||||
'expectedIsValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'five',
|
||||
'argumentTwo' => 'five',
|
||||
'answer' => 'zero',
|
||||
'expectedIsValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'one',
|
||||
'answer' => 'nine',
|
||||
'expectedIsValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'six',
|
||||
'answer' => 'nine',
|
||||
'expectedIsValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'nine',
|
||||
'answer' => 'seven',
|
||||
'expectedIsValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'seven',
|
||||
'argumentTwo' => 'six',
|
||||
'answer' => 'four',
|
||||
'expectedIsValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'one',
|
||||
'answer' => 'seven',
|
||||
'expectedIsValid' => false,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
--TEST--
|
||||
sort no notes
|
||||
--INI--
|
||||
precision=-1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
use phpweb\UserNotes\Sorter;
|
||||
use phpweb\UserNotes\UserNote;
|
||||
|
||||
require_once __DIR__ . "/../../../../src/autoload.php";
|
||||
|
||||
$notes = [];
|
||||
|
||||
$sorter = new Sorter();
|
||||
$sorter->sort($notes);
|
||||
var_dump(array_map(function (UserNote $note): array {
|
||||
return [
|
||||
"id" => $note->id,
|
||||
"ts" => $note->ts,
|
||||
"upvotes" => $note->upvotes,
|
||||
"downvotes" => $note->downvotes,
|
||||
];
|
||||
}, $notes));
|
||||
?>
|
||||
--EXPECT--
|
||||
array(0) {
|
||||
}
|
||||
@@ -1,540 +0,0 @@
|
||||
--TEST--
|
||||
sort sample notes from strpos notes
|
||||
--INI--
|
||||
precision=-1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
use phpweb\UserNotes\Sorter;
|
||||
use phpweb\UserNotes\UserNote;
|
||||
|
||||
require_once __DIR__ . "/../../../../src/autoload.php";
|
||||
|
||||
$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);
|
||||
var_dump(array_map(function (UserNote $note): array {
|
||||
return [
|
||||
"id" => $note->id,
|
||||
"ts" => $note->ts,
|
||||
"upvotes" => $note->upvotes,
|
||||
"downvotes" => $note->downvotes,
|
||||
];
|
||||
}, $notes));
|
||||
?>
|
||||
--EXPECT--
|
||||
array(46) {
|
||||
[110464]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "110464"
|
||||
["ts"]=>
|
||||
string(10) "1351105628"
|
||||
["upvotes"]=>
|
||||
int(10)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[93816]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "93816"
|
||||
["ts"]=>
|
||||
string(10) "1254343074"
|
||||
["upvotes"]=>
|
||||
int(4)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[92849]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "92849"
|
||||
["ts"]=>
|
||||
string(10) "1249997359"
|
||||
["upvotes"]=>
|
||||
int(4)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[70394]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "70394"
|
||||
["ts"]=>
|
||||
string(10) "1160823504"
|
||||
["upvotes"]=>
|
||||
int(7)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[106407]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "106407"
|
||||
["ts"]=>
|
||||
string(10) "1320695958"
|
||||
["upvotes"]=>
|
||||
int(5)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[87868]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "87868"
|
||||
["ts"]=>
|
||||
string(10) "1230396484"
|
||||
["upvotes"]=>
|
||||
int(5)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[82229]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "82229"
|
||||
["ts"]=>
|
||||
string(10) "1207066654"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[80363]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "80363"
|
||||
["ts"]=>
|
||||
string(10) "1200066332"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[75146]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "75146"
|
||||
["ts"]=>
|
||||
string(10) "1179195708"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[102773]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "102773"
|
||||
["ts"]=>
|
||||
string(10) "1299300266"
|
||||
["upvotes"]=>
|
||||
int(6)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[111422]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "111422"
|
||||
["ts"]=>
|
||||
string(10) "1361224553"
|
||||
["upvotes"]=>
|
||||
int(4)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[94469]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "94469"
|
||||
["ts"]=>
|
||||
string(10) "1257516214"
|
||||
["upvotes"]=>
|
||||
int(4)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[99476]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "99476"
|
||||
["ts"]=>
|
||||
string(10) "1282186230"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[99332]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "99332"
|
||||
["ts"]=>
|
||||
string(10) "1281503061"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[96926]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "96926"
|
||||
["ts"]=>
|
||||
string(10) "1269330508"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[93887]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "93887"
|
||||
["ts"]=>
|
||||
string(10) "1254733546"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[87061]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "87061"
|
||||
["ts"]=>
|
||||
string(10) "1226944352"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[85835]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "85835"
|
||||
["ts"]=>
|
||||
string(10) "1221823065"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[72466]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "72466"
|
||||
["ts"]=>
|
||||
string(10) "1169208947"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[69927]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "69927"
|
||||
["ts"]=>
|
||||
string(10) "1159299208"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[41762]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "41762"
|
||||
["ts"]=>
|
||||
string(10) "1082561916"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[107678]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "107678"
|
||||
["ts"]=>
|
||||
string(10) "1330185500"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[89788]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "89788"
|
||||
["ts"]=>
|
||||
string(10) "1237801686"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[74286]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "74286"
|
||||
["ts"]=>
|
||||
string(10) "1175594279"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[58688]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "58688"
|
||||
["ts"]=>
|
||||
string(10) "1131719326"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[45088]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "45088"
|
||||
["ts"]=>
|
||||
string(10) "1093449145"
|
||||
["upvotes"]=>
|
||||
int(3)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[49739]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "49739"
|
||||
["ts"]=>
|
||||
string(10) "1107758025"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(0)
|
||||
}
|
||||
[108426]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "108426"
|
||||
["ts"]=>
|
||||
string(10) "1335372412"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[107240]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "107240"
|
||||
["ts"]=>
|
||||
string(10) "1327390683"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[105984]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "105984"
|
||||
["ts"]=>
|
||||
string(10) "1317340435"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[99440]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "99440"
|
||||
["ts"]=>
|
||||
string(10) "1282058725"
|
||||
["upvotes"]=>
|
||||
int(4)
|
||||
["downvotes"]=>
|
||||
int(4)
|
||||
}
|
||||
[93566]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "93566"
|
||||
["ts"]=>
|
||||
string(10) "1253094436"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[88798]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "88798"
|
||||
["ts"]=>
|
||||
string(10) "1234090865"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[84910]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "84910"
|
||||
["ts"]=>
|
||||
string(10) "1217938595"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[83914]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "83914"
|
||||
["ts"]=>
|
||||
string(10) "1213760931"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[78483]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "78483"
|
||||
["ts"]=>
|
||||
string(10) "1192337362"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[74763]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "74763"
|
||||
["ts"]=>
|
||||
string(10) "1177577911"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[74432]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "74432"
|
||||
["ts"]=>
|
||||
string(10) "1176269720"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[47879]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "47879"
|
||||
["ts"]=>
|
||||
string(10) "1102066114"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[40617]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "40617"
|
||||
["ts"]=>
|
||||
string(10) "1078853206"
|
||||
["upvotes"]=>
|
||||
int(0)
|
||||
["downvotes"]=>
|
||||
int(0)
|
||||
}
|
||||
[38375]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "38375"
|
||||
["ts"]=>
|
||||
string(10) "1071743640"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(1)
|
||||
}
|
||||
[106295]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "106295"
|
||||
["ts"]=>
|
||||
string(10) "1319574977"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[95875]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "95875"
|
||||
["ts"]=>
|
||||
string(10) "1264517173"
|
||||
["upvotes"]=>
|
||||
int(2)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[102336]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(6) "102336"
|
||||
["ts"]=>
|
||||
string(10) "1297217360"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[93781]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "93781"
|
||||
["ts"]=>
|
||||
string(10) "1254189367"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
[90065]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(5) "90065"
|
||||
["ts"]=>
|
||||
string(10) "1238827503"
|
||||
["upvotes"]=>
|
||||
int(1)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
--TEST--
|
||||
sort a single note with no votes
|
||||
--INI--
|
||||
precision=-1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
use phpweb\UserNotes\Sorter;
|
||||
use phpweb\UserNotes\UserNote;
|
||||
|
||||
require_once __DIR__ . "/../../../../src/autoload.php";
|
||||
|
||||
$notes = [
|
||||
new UserNote('1', '', '', '1613487094', '', '', 0, 0),
|
||||
];
|
||||
|
||||
$sorter = new Sorter();
|
||||
$sorter->sort($notes);
|
||||
var_dump(array_map(function (UserNote $note): array {
|
||||
return [
|
||||
"id" => $note->id,
|
||||
"ts" => $note->ts,
|
||||
"upvotes" => $note->upvotes,
|
||||
"downvotes" => $note->downvotes,
|
||||
];
|
||||
}, $notes));
|
||||
?>
|
||||
--EXPECT--
|
||||
array(1) {
|
||||
[0]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(1) "1"
|
||||
["ts"]=>
|
||||
string(10) "1613487094"
|
||||
["upvotes"]=>
|
||||
int(0)
|
||||
["downvotes"]=>
|
||||
int(0)
|
||||
}
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
--TEST--
|
||||
sort some notes
|
||||
--INI--
|
||||
precision=-1
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
use phpweb\UserNotes\Sorter;
|
||||
use phpweb\UserNotes\UserNote;
|
||||
|
||||
require_once __DIR__ . "/../../../../src/autoload.php";
|
||||
|
||||
$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);
|
||||
var_dump(array_map(function (UserNote $note): array {
|
||||
return [
|
||||
"id" => $note->id,
|
||||
"ts" => $note->ts,
|
||||
"upvotes" => $note->upvotes,
|
||||
"downvotes" => $note->downvotes,
|
||||
];
|
||||
}, $notes));
|
||||
?>
|
||||
--EXPECT--
|
||||
array(4) {
|
||||
[2]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(1) "3"
|
||||
["ts"]=>
|
||||
string(10) "1508179844"
|
||||
["upvotes"]=>
|
||||
int(14)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[3]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(1) "4"
|
||||
["ts"]=>
|
||||
string(10) "1508179844"
|
||||
["upvotes"]=>
|
||||
int(14)
|
||||
["downvotes"]=>
|
||||
int(3)
|
||||
}
|
||||
[1]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(1) "2"
|
||||
["ts"]=>
|
||||
string(10) "1508180150"
|
||||
["upvotes"]=>
|
||||
int(0)
|
||||
["downvotes"]=>
|
||||
int(0)
|
||||
}
|
||||
[0]=>
|
||||
array(4) {
|
||||
["id"]=>
|
||||
string(1) "1"
|
||||
["ts"]=>
|
||||
string(10) "1613487094"
|
||||
["upvotes"]=>
|
||||
int(0)
|
||||
["downvotes"]=>
|
||||
int(2)
|
||||
}
|
||||
}
|
||||
409
tests/Unit/UserNotes/SorterTest.php
Normal file
409
tests/Unit/UserNotes/SorterTest.php
Normal file
@@ -0,0 +1,409 @@
|
||||
<?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,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
--TEST--
|
||||
clean_AntiSPAM() removes spam terms
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../include/email-validation.inc';
|
||||
|
||||
$emails = array (
|
||||
'asasasd324324@php.net',
|
||||
'jcastagnetto-delete-this-@yahoo.com',
|
||||
'jcastagnetto-i-hate-spam@NOSPAMyahoo.com',
|
||||
'jcastagnetto-NO-SPAM@yahoo.com',
|
||||
'jcastagnetto@NoSpam-yahoo.com',
|
||||
'jesusmc@scripps.edu',
|
||||
'jmcastagnetto@chek2.com',
|
||||
'jmcastagnetto@yahoo.com',
|
||||
'some-wrong@asdas.com',
|
||||
'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff',
|
||||
'wrong-email-address@lists.php.net',
|
||||
);
|
||||
|
||||
$cleanedEmails = array_map(static function (string $email): string {
|
||||
return clean_AntiSPAM($email);
|
||||
}, $emails);
|
||||
|
||||
var_dump($cleanedEmails);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
array(11) {
|
||||
[0]=>
|
||||
string(21) "asasasd324324@php.net"
|
||||
[1]=>
|
||||
string(22) "jcastagnetto@yahoo.com"
|
||||
[2]=>
|
||||
string(22) "jcastagnetto@yahoo.com"
|
||||
[3]=>
|
||||
string(22) "jcastagnetto@yahoo.com"
|
||||
[4]=>
|
||||
string(22) "jcastagnetto@yahoo.com"
|
||||
[5]=>
|
||||
string(19) "jesusmc@scripps.edu"
|
||||
[6]=>
|
||||
string(23) "jmcastagnetto@chek2.com"
|
||||
[7]=>
|
||||
string(23) "jmcastagnetto@yahoo.com"
|
||||
[8]=>
|
||||
string(20) "some-wrong@asdas.com"
|
||||
[9]=>
|
||||
string(35) "wrong-address-with@@@@and-somestuff"
|
||||
[10]=>
|
||||
string(33) "wrong-email-address@lists.php.net"
|
||||
}
|
||||
@@ -1,246 +0,0 @@
|
||||
--TEST--
|
||||
gen_challenge() generates a spam challenge
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../manual/spam_challenge.php';
|
||||
|
||||
mt_srand(9001);
|
||||
|
||||
$challenges = array_map(static function (): array {
|
||||
[$function, $argumentOne, $argumentTwo, $question] = gen_challenge();
|
||||
|
||||
return [
|
||||
'function' => $function,
|
||||
'argumentOne' => $argumentOne,
|
||||
'argumentTwo' => $argumentTwo,
|
||||
'question' => $question,
|
||||
];
|
||||
}, range(1, 20));
|
||||
|
||||
var_dump($challenges);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
array(20) {
|
||||
[0]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(3) "two"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(13) "min(two, one)"
|
||||
}
|
||||
[1]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(4) "five"
|
||||
["argumentTwo"]=>
|
||||
string(4) "five"
|
||||
["question"]=>
|
||||
string(15) "five minus five"
|
||||
}
|
||||
[2]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(4) "four"
|
||||
["argumentTwo"]=>
|
||||
string(4) "four"
|
||||
["question"]=>
|
||||
string(15) "four minus four"
|
||||
}
|
||||
[3]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(4) "nine"
|
||||
["argumentTwo"]=>
|
||||
string(5) "seven"
|
||||
["question"]=>
|
||||
string(16) "min(nine, seven)"
|
||||
}
|
||||
[4]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(5) "seven"
|
||||
["argumentTwo"]=>
|
||||
string(3) "six"
|
||||
["question"]=>
|
||||
string(15) "seven minus six"
|
||||
}
|
||||
[5]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(5) "three"
|
||||
["argumentTwo"]=>
|
||||
string(3) "six"
|
||||
["question"]=>
|
||||
string(15) "max(three, six)"
|
||||
}
|
||||
[6]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(3) "six"
|
||||
["argumentTwo"]=>
|
||||
string(4) "five"
|
||||
["question"]=>
|
||||
string(14) "max(six, five)"
|
||||
}
|
||||
[7]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(4) "four"
|
||||
["argumentTwo"]=>
|
||||
string(5) "three"
|
||||
["question"]=>
|
||||
string(16) "max(four, three)"
|
||||
}
|
||||
[8]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(3) "two"
|
||||
["argumentTwo"]=>
|
||||
string(4) "nine"
|
||||
["question"]=>
|
||||
string(14) "min(two, nine)"
|
||||
}
|
||||
[9]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(4) "plus"
|
||||
["argumentOne"]=>
|
||||
string(5) "eight"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(14) "eight plus one"
|
||||
}
|
||||
[10]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(4) "plus"
|
||||
["argumentOne"]=>
|
||||
string(5) "three"
|
||||
["argumentTwo"]=>
|
||||
string(4) "five"
|
||||
["question"]=>
|
||||
string(15) "three plus five"
|
||||
}
|
||||
[11]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(5) "eight"
|
||||
["argumentTwo"]=>
|
||||
string(5) "three"
|
||||
["question"]=>
|
||||
string(17) "min(eight, three)"
|
||||
}
|
||||
[12]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(4) "zero"
|
||||
["argumentTwo"]=>
|
||||
string(4) "nine"
|
||||
["question"]=>
|
||||
string(15) "max(zero, nine)"
|
||||
}
|
||||
[13]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(4) "five"
|
||||
["argumentTwo"]=>
|
||||
string(4) "nine"
|
||||
["question"]=>
|
||||
string(15) "min(five, nine)"
|
||||
}
|
||||
[14]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(3) "six"
|
||||
["argumentTwo"]=>
|
||||
string(4) "four"
|
||||
["question"]=>
|
||||
string(14) "six minus four"
|
||||
}
|
||||
[15]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(3) "one"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(13) "max(one, one)"
|
||||
}
|
||||
[16]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(4) "plus"
|
||||
["argumentOne"]=>
|
||||
string(4) "five"
|
||||
["argumentTwo"]=>
|
||||
string(4) "zero"
|
||||
["question"]=>
|
||||
string(14) "five plus zero"
|
||||
}
|
||||
[17]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(4) "nine"
|
||||
["argumentTwo"]=>
|
||||
string(5) "eight"
|
||||
["question"]=>
|
||||
string(16) "nine minus eight"
|
||||
}
|
||||
[18]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(5) "three"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(15) "three minus one"
|
||||
}
|
||||
[19]=>
|
||||
array(4) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(5) "three"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(15) "min(three, one)"
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
--TEST--
|
||||
is_emailable_address() returns whether email is emailable
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../include/email-validation.inc';
|
||||
|
||||
$emails = array(
|
||||
'asasasd324324@php.net',
|
||||
'jcastagnetto-delete-this-@yahoo.com',
|
||||
'jcastagnetto-i-hate-spam@NOSPAMyahoo.test',
|
||||
'jcastagnetto-NO-SPAM@yahoo.com',
|
||||
'jcastagnetto@NoSpam-yahoo.com',
|
||||
'jesusmc@scripps.edu',
|
||||
'jmcastagnetto@chek2.com',
|
||||
'jmcastagnetto@yahoo.com',
|
||||
'some-wrong@asdas.com',
|
||||
'wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff',
|
||||
'wrong-email-address@lists.php.net',
|
||||
);
|
||||
|
||||
$emailsThatAreEmailableAddresses = array_filter($emails, static function (string $email): bool {
|
||||
return is_emailable_address($email);
|
||||
});
|
||||
|
||||
var_dump($emailsThatAreEmailableAddresses);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
array(6) {
|
||||
[0]=>
|
||||
string(21) "asasasd324324@php.net"
|
||||
[1]=>
|
||||
string(35) "jcastagnetto-delete-this-@yahoo.com"
|
||||
[3]=>
|
||||
string(30) "jcastagnetto-NO-SPAM@yahoo.com"
|
||||
[5]=>
|
||||
string(19) "jesusmc@scripps.edu"
|
||||
[7]=>
|
||||
string(23) "jmcastagnetto@yahoo.com"
|
||||
[8]=>
|
||||
string(20) "some-wrong@asdas.com"
|
||||
}
|
||||
@@ -1,211 +0,0 @@
|
||||
--TEST--
|
||||
test_answer() returns true when answer to spam challenge is valid
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../../manual/spam_challenge.php';
|
||||
|
||||
$answers = [
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'max(two, one)',
|
||||
'answer' => 'two',
|
||||
'isValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'min(two, one)',
|
||||
'answer' => 'one',
|
||||
'isValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'five',
|
||||
'argumentTwo' => 'five',
|
||||
'question' => 'minus(five, five)',
|
||||
'answer' => 'zero',
|
||||
'isValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'plus(eight, one)',
|
||||
'answer' => 'nine',
|
||||
'isValid' => true,
|
||||
],
|
||||
[
|
||||
'function' => 'max',
|
||||
'argumentOne' => 'three',
|
||||
'argumentTwo' => 'six',
|
||||
'question' => 'max(three, six)',
|
||||
'answer' => 'nine',
|
||||
'isValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'min',
|
||||
'argumentOne' => 'two',
|
||||
'argumentTwo' => 'nine',
|
||||
'question' => 'min(two, nine)',
|
||||
'answer' => 'seven',
|
||||
'isValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'minus',
|
||||
'argumentOne' => 'seven',
|
||||
'argumentTwo' => 'six',
|
||||
'question' => 'minus(seven, six)',
|
||||
'answer' => 'four',
|
||||
'isValid' => false,
|
||||
],
|
||||
[
|
||||
'function' => 'plus',
|
||||
'argumentOne' => 'eight',
|
||||
'argumentTwo' => 'one',
|
||||
'question' => 'plus(eight, one)',
|
||||
'answer' => 'seven',
|
||||
'isValid' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$results = array_map(static function (array $answer): array {
|
||||
$answer['isValid'] = test_answer(
|
||||
$answer['function'],
|
||||
$answer['argumentOne'],
|
||||
$answer['argumentTwo'],
|
||||
$answer['answer']
|
||||
);
|
||||
|
||||
return $answer;
|
||||
}, $answers);
|
||||
|
||||
var_dump($results);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
array(8) {
|
||||
[0]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(3) "two"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(13) "max(two, one)"
|
||||
["answer"]=>
|
||||
string(3) "two"
|
||||
["isValid"]=>
|
||||
bool(true)
|
||||
}
|
||||
[1]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(3) "two"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(13) "min(two, one)"
|
||||
["answer"]=>
|
||||
string(3) "one"
|
||||
["isValid"]=>
|
||||
bool(true)
|
||||
}
|
||||
[2]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(4) "five"
|
||||
["argumentTwo"]=>
|
||||
string(4) "five"
|
||||
["question"]=>
|
||||
string(17) "minus(five, five)"
|
||||
["answer"]=>
|
||||
string(4) "zero"
|
||||
["isValid"]=>
|
||||
bool(true)
|
||||
}
|
||||
[3]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(4) "plus"
|
||||
["argumentOne"]=>
|
||||
string(5) "eight"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(16) "plus(eight, one)"
|
||||
["answer"]=>
|
||||
string(4) "nine"
|
||||
["isValid"]=>
|
||||
bool(true)
|
||||
}
|
||||
[4]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(3) "max"
|
||||
["argumentOne"]=>
|
||||
string(5) "three"
|
||||
["argumentTwo"]=>
|
||||
string(3) "six"
|
||||
["question"]=>
|
||||
string(15) "max(three, six)"
|
||||
["answer"]=>
|
||||
string(4) "nine"
|
||||
["isValid"]=>
|
||||
bool(false)
|
||||
}
|
||||
[5]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(3) "min"
|
||||
["argumentOne"]=>
|
||||
string(3) "two"
|
||||
["argumentTwo"]=>
|
||||
string(4) "nine"
|
||||
["question"]=>
|
||||
string(14) "min(two, nine)"
|
||||
["answer"]=>
|
||||
string(5) "seven"
|
||||
["isValid"]=>
|
||||
bool(false)
|
||||
}
|
||||
[6]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(5) "minus"
|
||||
["argumentOne"]=>
|
||||
string(5) "seven"
|
||||
["argumentTwo"]=>
|
||||
string(3) "six"
|
||||
["question"]=>
|
||||
string(17) "minus(seven, six)"
|
||||
["answer"]=>
|
||||
string(4) "four"
|
||||
["isValid"]=>
|
||||
bool(false)
|
||||
}
|
||||
[7]=>
|
||||
array(6) {
|
||||
["function"]=>
|
||||
string(4) "plus"
|
||||
["argumentOne"]=>
|
||||
string(5) "eight"
|
||||
["argumentTwo"]=>
|
||||
string(3) "one"
|
||||
["question"]=>
|
||||
string(16) "plus(eight, one)"
|
||||
["answer"]=>
|
||||
string(5) "seven"
|
||||
["isValid"]=>
|
||||
bool(false)
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,8 @@
|
||||
<coverage includeUncoveredFiles="true"/>
|
||||
<source>
|
||||
<include>
|
||||
<directory suffix=".php">../manual/</directory>
|
||||
<directory suffix=".inc">../include/</directory>
|
||||
<directory suffix=".php">../src/</directory>
|
||||
</include>
|
||||
</source>
|
||||
@@ -35,7 +37,7 @@
|
||||
<directory suffix=".php">EndToEnd/</directory>
|
||||
</testsuite>
|
||||
<testsuite name="unit">
|
||||
<directory suffix=".phpt">Unit/</directory>
|
||||
<directory suffix=".php">Unit/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
|
||||
Reference in New Issue
Block a user