Files

108 lines
3.4 KiB
PHP
Executable File

<?php
declare(strict_types=1);
/**
* @author Amasty Team
* @copyright Copyright (c) Amasty (https://www.amasty.com)
* @package Admin Actions Log for Magento 2
*/
namespace Amasty\AdminActionsLog\Test\Unit\Logging\Util;
use Amasty\AdminActionsLog\Logging\Util\ClassNameNormalizer;
use Amasty\AdminActionsLog\Logging\Util\DetailsBuilder;
use Amasty\AdminActionsLog\Model\LogEntry\LogDetail;
use Amasty\AdminActionsLog\Model\LogEntry\LogDetailFactory;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use PHPUnit\Framework\TestCase;
/**
* @covers \Amasty\AdminActionsLog\Logging\Util\DetailsBuilder
*/
class DetailsBuilderTest extends TestCase
{
public const MODEL_NAME = 'Test\\Model\\Name';
/**
* @var DetailsBuilder
*/
private $detailsBuilder;
protected function setUp(): void
{
$objectManager = new ObjectManager($this);
$classNameNormalizer = $this->createMock(ClassNameNormalizer::class);
$classNameNormalizer->expects($this->any())->method('execute')->willReturnArgument(0);
$detailFactory = $this->createMock(LogDetailFactory::class);
$detailFactory->expects($this->any())->method('create')->willReturnCallback(function ($data) {
return $this->createConfiguredMock(
LogDetail::class,
[
'getData' => $data['data'] ?? []
]
);
});
$this->detailsBuilder = $objectManager->getObject(
DetailsBuilder::class,
[
'classNameNormalizer' => $classNameNormalizer,
'detailFactory' => $detailFactory
]
);
}
/**
* @covers \Amasty\AdminActionsLog\Logging\Util\DetailsBuilder::build
* @dataProvider buildDataProvider
*/
public function testBuild(array $beforeData, array $afterData, array $expected)
{
$result = $this->detailsBuilder->build(self::MODEL_NAME, $beforeData, $afterData);
$result = array_map(function ($detail) {
return $detail->getData();
}, $result);
$this->assertEquals($expected, $result);
}
public function buildDataProvider(): array
{
return [
'no diff' => [
['test1' => 'value1', 'test2' => 'value2'],
['test1' => 'value1', 'test2' => 'value2'],
[]
],
'one diff' => [
['test1' => 'value1', 'test2' => 'value2',],
['test1' => 'value11', 'test2' => 'value2'],
[$this->prepareExpectedDetail('test1', 'value1', 'value11')]
],
'value added' => [
['test1' => 'value1'],
['test1' => 'value1', 'test2' => 'value2'],
[$this->prepareExpectedDetail('test2', null, 'value2')]
],
'value deleted' => [
['test1' => 'value1', 'test2' => 'value2'],
['test1' => 'value1'],
[$this->prepareExpectedDetail('test2', 'value2', null)]
]
];
}
private function prepareExpectedDetail(string $name, ?string $oldValue, ?string $newValue): array
{
return [
LogDetail::MODEL => self::MODEL_NAME,
LogDetail::NAME => $name,
LogDetail::OLD_VALUE => $oldValue,
LogDetail::NEW_VALUE => $newValue
];
}
}