Skip to content

Commit

Permalink
Fix fallback for changed Logger logic (#65)
Browse files Browse the repository at this point in the history
  • Loading branch information
s4ddly committed Dec 11, 2023
1 parent eeddd33 commit b96f98e
Show file tree
Hide file tree
Showing 8 changed files with 261 additions and 79 deletions.
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,19 @@ The log files are created for each day separately under `Logs` directory.

The logging is enabled by default, but you can disable this feature with:
```php
Util::$loggingEnabled = false;
Logger::disableLogging();
```

You can also set your own logging path by this command:
```php
Util::$customLogPatch = '/my/own/path/Logs/';
Logger::setLogPath('/my/own/path/Logs/');
```

You can also set you own Logger by this command it has to be compatible with `Psr\Log\LoggerInterface`:
```php
Logger::setLogger(new CustomLogger());
```

The logs file names will be assigned automatically.

## Custom templates path
Expand Down
9 changes: 7 additions & 2 deletions README_PL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,19 @@ Pliki logów są tworzone dla każdego dnia oddzielnie w katalogu `Logs`.

Logowanie jest domyślnie włączone, ale możesz wyłączyć tę funkcję za pomocą:
```php
Util::$loggingEnabled = false;
Logger::disableLogging();
```

Możesz także ustawić własną ścieżkę logowania za pomocą tego polecenia:
```php
Util::$customLogPatch = '/my/own/path/Logs/';
Logger::setLogPath('/my/own/path/Logs/');
```

Możesz też przekazać własny logger kompatybilny z `Psr\Log\LoggerInterface`:
```php
Logger::setLogger(new CustomLogger());
```

Nazwy plików dzienników zostaną przypisane automatycznie.

## Niestandardowa ścieżka szablonów
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"php": ">=5.6.0",
"ext-curl": "*",
"ext-json": "*",
"phpseclib/phpseclib": "^2 || ^3"
"phpseclib/phpseclib": "^2 || ^3",
"psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.3.2",
Expand Down
20 changes: 15 additions & 5 deletions src/Utilities/Logger.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,19 @@ class Logger
/** @var LoggerInterface */
private static $logger;

/** @var string */
/** @var null|string */
private static $customLogPath;

/** @throws TException */
public static function enableLogging()
{
if (NullLogger::class !== get_class(self::$logger)) {
throw new TException('Logging is already enabled');
}

self::$logger = new FileLogger(self::$customLogPath);
}

public static function disableLogging()
{
self::$logger = new NullLogger();
Expand All @@ -25,17 +35,17 @@ public static function disableLogging()
*/
public static function setLogger($logger)
{
if (false === assert($logger instanceof LoggerInterface)) {
if (LoggerInterface::class !== get_class($logger)) {
throw new TException(sprintf('%s is not instance of LoggerInterface', get_class($logger)));
}

self::$logger = $logger;
}

/** @param string $logPath */
public static function setLogPath($logPath)
/** @param null|string $logPath */
public static function setLogPath($logPath = null)
{
self::$customLogPath = $logPath;
self::$logger = new FileLogger($logPath);
}

/** @return FileLogger|LoggerInterface */
Expand Down
16 changes: 16 additions & 0 deletions src/Utilities/Util.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ public static function parseTemplate($templateFileName, $data = [])
*/
public static function log($title, $text)
{
if (false === self::$loggingEnabled) {
return;
}

if (self::$customLogPatch) {
Logger::setLogPath(self::$customLogPatch);
}

Logger::log($title, $text);
}

Expand All @@ -87,6 +95,14 @@ public static function log($title, $text)
*/
public static function logLine($text)
{
if (false === self::$loggingEnabled) {
return;
}

if (self::$customLogPatch) {
Logger::setLogPath(self::$customLogPatch);
}

Logger::logLine($text);
}

Expand Down
152 changes: 83 additions & 69 deletions tests/LegacyNamespaceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,96 +10,110 @@
*/
class LegacyNamespaceTest extends TestCase
{
public function testClassesExist()
/**
* @dataProvider legacyClassNamesFromArray
*
* @param mixed $classNames
*/
public function testClassesExist($classNames)
{
foreach (self::getLegacyClassNamesFromArray() as $className) {
self::assertTrue(
foreach ($classNames as $className) {
$this->assertTrue(
class_exists($className) || interface_exists($className) || trait_exists($className),
sprintf('Class, interface or trait %s not found.', $className)
);
}
}

public function testClassesHaveUniqueNames()
/**
* @dataProvider legacyClassNamesFromArray
*
* @param mixed $classNames
*/
public function testClassesHaveUniqueNames($classNames)
{
$legacyClassShortNames = array_map(
function ($className) {
return (new ReflectionClass($className))->getShortName();
},
self::getLegacyClassNamesFromArray()
$classNames
);

self::assertSame(
$this->assertSame(
array_unique($legacyClassShortNames),
$legacyClassShortNames
);
}

private static function getLegacyClassNamesFromArray()
public function legacyClassNamesFromArray()
{
return [
'tpayLibs\\src\\Dictionaries\\CardDictionary',
'tpayLibs\\src\\Dictionaries\\ErrorCodes\\TransactionApiErrors',
'tpayLibs\\src\\Dictionaries\\FieldValueFilters',
'tpayLibs\\src\\Dictionaries\\FieldsConfigDictionary',
'tpayLibs\\src\\Dictionaries\\HttpCodesDictionary',
'tpayLibs\\src\\Dictionaries\\ISO_codes\\CountryCodesDictionary',
'tpayLibs\\src\\Dictionaries\\ISO_codes\\CurrencyCodesDictionary',
'tpayLibs\\src\\Dictionaries\\Localization\\CardPaymentLanguagesDictionary',
'tpayLibs\\src\\Dictionaries\\NotificationsIP',
'tpayLibs\\src\\Dictionaries\\PaymentTypesDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\BasicFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\BlikFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\CardDeregisterFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\CardFieldsDictionary',
'tpayLibs\\src\\Translations\\English',
'tpayLibs\\src\\Translations\\Keys',
'tpayLibs\\src\\Translations\\Polish',
'tpayLibs\\src\\_class_tpay\\CardApi',
'tpayLibs\\src\\_class_tpay\\Curl\\Curl',
'tpayLibs\\src\\_class_tpay\\Curl\\CurlOptions',
'tpayLibs\\src\\_class_tpay\\MassPayments',
'tpayLibs\\src\\_class_tpay\\Notifications\\BasicNotificationHandler',
'tpayLibs\\src\\_class_tpay\\Notifications\\BlikAliasNotificationHandler',
'tpayLibs\\src\\_class_tpay\\Notifications\\CardNotificationHandler',
'tpayLibs\\src\\_class_tpay\\PaymentBlik',
'tpayLibs\\src\\_class_tpay\\PaymentCard',
'tpayLibs\\src\\_class_tpay\\PaymentForms\\PaymentBasicForms',
'tpayLibs\\src\\_class_tpay\\PaymentForms\\PaymentCardForms',
'tpayLibs\\src\\_class_tpay\\PaymentOptions\\BasicPaymentOptions',
'tpayLibs\\src\\_class_tpay\\PaymentOptions\\CardOptions',
'tpayLibs\\src\\_class_tpay\\PaymentSMS',
'tpayLibs\\src\\_class_tpay\\Refunds\\BasicRefunds',
'tpayLibs\\src\\_class_tpay\\Refunds\\CardRefunds',
'tpayLibs\\src\\_class_tpay\\Reports\\BasicReports',
'tpayLibs\\src\\_class_tpay\\TransactionApi',
'tpayLibs\\src\\_class_tpay\\Utilities\\Lang',
'tpayLibs\\src\\_class_tpay\\Utilities\\ObjectsHelper',
'tpayLibs\\src\\_class_tpay\\Utilities\\ServerValidator',
'tpayLibs\\src\\_class_tpay\\Utilities\\TException',
'tpayLibs\\src\\_class_tpay\\Utilities\\Util',
'tpayLibs\\src\\_class_tpay\\Validators\\AccessConfigValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\FieldsConfigValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\FieldsValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypesInterface',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBasic',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBasicApi',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBlikAlias',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeCard',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeCardDeregister',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeT6Register',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeT6Standard',
'tpayLibs\\src\\_class_tpay\\Validators\\ResponseFieldsValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypesInterface',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\ArrayType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\BooleanType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\CountryCodeType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\DescriptionType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\EmailListType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\FloatType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\IntType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\StringType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\VariableTypesValidator',
[
[
'tpayLibs\\src\\Dictionaries\\CardDictionary',
'tpayLibs\\src\\Dictionaries\\ErrorCodes\\TransactionApiErrors',
'tpayLibs\\src\\Dictionaries\\FieldValueFilters',
'tpayLibs\\src\\Dictionaries\\FieldsConfigDictionary',
'tpayLibs\\src\\Dictionaries\\HttpCodesDictionary',
'tpayLibs\\src\\Dictionaries\\ISO_codes\\CountryCodesDictionary',
'tpayLibs\\src\\Dictionaries\\ISO_codes\\CurrencyCodesDictionary',
'tpayLibs\\src\\Dictionaries\\Localization\\CardPaymentLanguagesDictionary',
'tpayLibs\\src\\Dictionaries\\NotificationsIP',
'tpayLibs\\src\\Dictionaries\\PaymentTypesDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\BasicFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\BlikFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\CardDeregisterFieldsDictionary',
'tpayLibs\\src\\Dictionaries\\Payments\\CardFieldsDictionary',
'tpayLibs\\src\\Translations\\English',
'tpayLibs\\src\\Translations\\Keys',
'tpayLibs\\src\\Translations\\Polish',
'tpayLibs\\src\\_class_tpay\\CardApi',
'tpayLibs\\src\\_class_tpay\\Curl\\Curl',
'tpayLibs\\src\\_class_tpay\\Curl\\CurlOptions',
'tpayLibs\\src\\_class_tpay\\MassPayments',
'tpayLibs\\src\\_class_tpay\\Notifications\\BasicNotificationHandler',
'tpayLibs\\src\\_class_tpay\\Notifications\\BlikAliasNotificationHandler',
'tpayLibs\\src\\_class_tpay\\Notifications\\CardNotificationHandler',
'tpayLibs\\src\\_class_tpay\\PaymentBlik',
'tpayLibs\\src\\_class_tpay\\PaymentCard',
'tpayLibs\\src\\_class_tpay\\PaymentForms\\PaymentBasicForms',
'tpayLibs\\src\\_class_tpay\\PaymentForms\\PaymentCardForms',
'tpayLibs\\src\\_class_tpay\\PaymentOptions\\BasicPaymentOptions',
'tpayLibs\\src\\_class_tpay\\PaymentOptions\\CardOptions',
'tpayLibs\\src\\_class_tpay\\PaymentSMS',
'tpayLibs\\src\\_class_tpay\\Refunds\\BasicRefunds',
'tpayLibs\\src\\_class_tpay\\Refunds\\CardRefunds',
'tpayLibs\\src\\_class_tpay\\Reports\\BasicReports',
'tpayLibs\\src\\_class_tpay\\TransactionApi',
'tpayLibs\\src\\_class_tpay\\Utilities\\Lang',
'tpayLibs\\src\\_class_tpay\\Utilities\\ObjectsHelper',
'tpayLibs\\src\\_class_tpay\\Utilities\\ServerValidator',
'tpayLibs\\src\\_class_tpay\\Utilities\\TException',
'tpayLibs\\src\\_class_tpay\\Utilities\\Util',
'tpayLibs\\src\\_class_tpay\\Validators\\AccessConfigValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\FieldsConfigValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\FieldsValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypesInterface',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBasic',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBasicApi',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeBlikAlias',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeCard',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeCardDeregister',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeT6Register',
'tpayLibs\\src\\_class_tpay\\Validators\\PaymentTypes\\PaymentTypeT6Standard',
'tpayLibs\\src\\_class_tpay\\Validators\\ResponseFieldsValidator',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypesInterface',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\ArrayType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\BooleanType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\CountryCodeType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\DescriptionType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\EmailListType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\FloatType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\IntType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\StringType',
'tpayLibs\\src\\_class_tpay\\Validators\\VariableTypes\\VariableTypesValidator',
],
],
];
}
}
72 changes: 72 additions & 0 deletions tests/Utilities/LoggerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace Tpay\OriginApi\Tests\Utilities;

use PHPUnit\Framework\TestCase;
use Psr\Log\NullLogger;
use Tpay\OriginApi\Utilities\Logger;
use Tpay\OriginApi\Utilities\TException;

class LoggerTest extends TestCase
{
public function testLogged()
{
Logger::log('test', 'test');

$this->assertFileExists($this->logFilename());

// tearDown
$this->deleteTestLog();
}

public function testDisableLogging()
{
Logger::disableLogging();

Logger::log('test', 'test');

$this->assertInstanceOf(NullLogger::class, Logger::getLogger());
}

public function testCustomLogPath()
{
$logPath = __DIR__.'/';
Logger::setLogPath($logPath);

Logger::log('test', 'test');

$this->assertFileExists($this->logFilename($logPath));

// tearDown
$this->deleteTestLog($logPath);
}

public function testCannotEnableLoggingTwice()
{
$this->expectException(TException::class);
$this->expectExceptionMessage('Logging is already enabled');

Logger::getLogger();
Logger::setLogPath();

Logger::enableLogging();

$this->deleteTestLog();
}

protected function logFilename($logPath = null)
{
$logFileName = sprintf('log_%s.log', date('Y-m-d'));

if ($logPath) {
return sprintf('%s%s', $logPath, $logFileName);
}

return sprintf('%s/../../src/Logs/%s', __DIR__, $logFileName);
}

protected function deleteTestLog($logPath = null)
{
unlink($this->logFilename($logPath));
}
}
Loading

0 comments on commit b96f98e

Please sign in to comment.