diff options
| author | 2023-03-27 00:36:21 +0200 | |
|---|---|---|
| committer | 2023-03-27 00:36:21 +0200 | |
| commit | 0317683155a3966830f3972fde1562087f65cf94 (patch) | |
| tree | d2806e337c54d449704e6a8f3f8d1887d6c174f2 | |
| parent | f3af3f0f3d4da8023c5e918545d47a51afc4b6c1 (diff) | |
Add test and type hinting (#5087)
* - Add test and type hinting
- pass PhpStan Level 9
* fix dump
* fix style
* fix visibility
* fix style
* add test
* add test
* add test
* add test
* add test
* Simplify
* cleaning after test
* remove space
* fix style
* use specific log file for test
* Remarque's from Alkarex
* A few more details
---------
Co-authored-by: Luc <sanchezluc+freshrss@gmail.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
| -rw-r--r-- | app/Models/Log.php | 15 | ||||
| -rw-r--r-- | app/Models/LogDAO.php | 22 | ||||
| -rw-r--r-- | lib/Minz/Session.php | 4 | ||||
| -rw-r--r-- | tests/app/Models/LogDAOTest.php | 45 | ||||
| -rw-r--r-- | tests/phpstan-next.txt | 1 |
5 files changed, 68 insertions, 19 deletions
diff --git a/app/Models/Log.php b/app/Models/Log.php index df2de72ac..72208513d 100644 --- a/app/Models/Log.php +++ b/app/Models/Log.php @@ -1,26 +1,29 @@ <?php class FreshRSS_Log extends Minz_Model { + /** @var string */ private $date; + /** @var string */ private $level; + /** @var string */ private $information; - public function date() { + public function date(): string { return $this->date; } - public function level() { + public function level(): string { return $this->level; } - public function info() { + public function info(): string { return $this->information; } - public function _date($date) { + public function _date(string $date): void { $this->date = $date; } - public function _level($level) { + public function _level(string $level): void { $this->level = $level; } - public function _info($information) { + public function _info(string $information): void { $this->information = $information; } } diff --git a/app/Models/LogDAO.php b/app/Models/LogDAO.php index 6e5bf171b..080af54ea 100644 --- a/app/Models/LogDAO.php +++ b/app/Models/LogDAO.php @@ -1,19 +1,21 @@ <?php -class FreshRSS_LogDAO { - - private static function logPath(): string { - return USERS_PATH . '/' . (Minz_User::name() ?? Minz_User::INTERNAL_USER) . '/' . LOG_FILENAME; +final class FreshRSS_LogDAO { + public static function logPath(?string $logFileName = null): string { + if ($logFileName === null || $logFileName === '') { + $logFileName = LOG_FILENAME; + } + return USERS_PATH . '/' . (Minz_User::name() ?? Minz_User::INTERNAL_USER) . '/' . $logFileName; } /** @return array<FreshRSS_Log> */ - public static function lines(): array { - $logs = array(); - $handle = @fopen(self::logPath(), 'r'); + public static function lines(?string $logFileName = null): array { + $logs = []; + $handle = @fopen(self::logPath($logFileName), 'r'); if ($handle) { while (($line = fgets($handle)) !== false) { if (preg_match('/^\[([^\[]+)\] \[([^\[]+)\] --- (.*)$/', $line, $matches)) { - $myLog = new FreshRSS_Log (); + $myLog = new FreshRSS_Log(); $myLog->_date($matches[1]); $myLog->_level($matches[2]); $myLog->_info($matches[3]); @@ -25,8 +27,8 @@ class FreshRSS_LogDAO { return array_reverse($logs); } - public static function truncate(): void { - file_put_contents(self::logPath(), ''); + public static function truncate(?string $logFileName = null): void { + file_put_contents(self::logPath($logFileName), ''); if (FreshRSS_Auth::hasAccess('admin')) { file_put_contents(ADMIN_LOG, ''); file_put_contents(API_LOG, ''); diff --git a/lib/Minz/Session.php b/lib/Minz/Session.php index 924e9f5f9..0ce6721e2 100644 --- a/lib/Minz/Session.php +++ b/lib/Minz/Session.php @@ -59,8 +59,8 @@ class Minz_Session { * @param string $p le paramètre à récupérer * @return mixed|false la valeur de la variable de session, false si n'existe pas */ - public static function param($p, $default = false) { - return isset($_SESSION[$p]) ? $_SESSION[$p] : $default; + public static function param(string $p, $default = false) { + return $_SESSION[$p] ?? $default; } diff --git a/tests/app/Models/LogDAOTest.php b/tests/app/Models/LogDAOTest.php new file mode 100644 index 000000000..18cad4968 --- /dev/null +++ b/tests/app/Models/LogDAOTest.php @@ -0,0 +1,45 @@ +<?php +declare(strict_types=1); + +use PHPUnit\Framework\TestCase; + +class LogDAOTest extends TestCase { + private const LOG_FILE_TEST = 'logFileTest.txt'; + + /** @var FreshRSS_LogDAO */ + private $logDAO; + + /** @var string */ + private $logPath; + + protected function setUp(): void { + $this->logDAO = new FreshRSS_LogDAO(); + $this->logPath = FreshRSS_LogDAO::logPath(self::LOG_FILE_TEST); + + file_put_contents( + $this->logPath, + '[Wed, 08 Feb 2023 15:35:05 +0000] [notice] --- Migration 2019_12_22_FooBar: OK' + ); + } + + public function test_lines_is_array_and_truncate_function_work(): void { + $this->assertEquals(USERS_PATH . '/' . Minz_User::INTERNAL_USER . '/' . self::LOG_FILE_TEST, $this->logPath); + + $line = $this->logDAO::lines(self::LOG_FILE_TEST); + + $this->assertIsArray($line); + $this->assertCount(1, $line); + $this->assertInstanceOf(FreshRSS_Log::class, $line[0]); + $this->assertEquals('Wed, 08 Feb 2023 15:35:05 +0000', $line[0]->date()); + $this->assertEquals('notice', $line[0]->level()); + $this->assertEquals("Migration 2019_12_22_FooBar: OK", $line[0]->info()); + + $this->logDAO::truncate(self::LOG_FILE_TEST); + + $this->assertStringContainsString('', file_get_contents($this->logPath)); + } + + protected function tearDown(): void { + unlink($this->logPath); + } +} diff --git a/tests/phpstan-next.txt b/tests/phpstan-next.txt index 7f8d5e4e4..b936f3d39 100644 --- a/tests/phpstan-next.txt +++ b/tests/phpstan-next.txt @@ -31,7 +31,6 @@ ./app/Models/FeedDAOSQLite.php ./app/Models/FilterAction.php ./app/Models/FormAuth.php -./app/Models/Log.php ./app/Models/ReadingMode.php ./app/Models/Search.php ./app/Models/Share.php |
