aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Luc SANCHEZ <4697568+ColonelMoutarde@users.noreply.github.com> 2023-03-27 00:36:21 +0200
committerGravatar GitHub <noreply@github.com> 2023-03-27 00:36:21 +0200
commit0317683155a3966830f3972fde1562087f65cf94 (patch)
treed2806e337c54d449704e6a8f3f8d1887d6c174f2
parentf3af3f0f3d4da8023c5e918545d47a51afc4b6c1 (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.php15
-rw-r--r--app/Models/LogDAO.php22
-rw-r--r--lib/Minz/Session.php4
-rw-r--r--tests/app/Models/LogDAOTest.php45
-rw-r--r--tests/phpstan-next.txt1
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