1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-22 06:57:53 +00:00
Files
matomo/plugins/API/tests/Unit/WidgetMetadataTest.php
Stefan Giehl d6d72d1fa7 [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps (#22144)
* [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps

* [Coding Style] Use camel case for method names in API plugin tests (#22145)

* [Coding Style] Use camel case for method names in Core* plugin tests (#22147)

* [Coding Style] Use camel case for method names in core Unit tests (#22149)

* [Coding Style] Use camel case for method names in Actions and BulkTracking plugin tests (#22146)

* [Coding Style] Use camel case for method names in CustomDimensions and CustomJSTracker plugin tests (#22148)

* [Coding Style] Use camel case for method names in core Integration tests (#22151)

* [Coding Style] Use camel case for method names in more core plugin tests (#22153)

* [Coding Style] Use camel case for method names in more core plugin tests (#22157)

* [Coding Style] Use camel case for method names in more core plugin tests

* Update plugins/Monolog/tests/Unit/Processor/ExceptionToTextProcessorTest.php

Co-authored-by: Michal Kleiner <michal@innocraft.com>

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>

* [Coding Style] Use camel case for method names in more core plugin tests (#22159)

* [Coding Style] Use camel case for method names in remaining tests (#22160)

* [Coding Style] Use camel case for method names in remaining tests

* rename expected test files

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>
2024-04-25 20:57:55 +02:00

342 خطوط
12 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\API\tests\Unit;
use Piwik\Category\Category;
use Piwik\Category\CategoryList;
use Piwik\Category\Subcategory;
use Piwik\Plugins\API\WidgetMetadata;
use Piwik\Report\ReportWidgetConfig;
use Piwik\Widget\WidgetConfig;
use Piwik\Widget\WidgetContainerConfig;
/**
* @group Widget
* @group Widgets
* @group WidgetMetadata
* @group WidgetMetadataTest
*/
class WidgetMetadataTest extends \PHPUnit\Framework\TestCase
{
/**
* @var WidgetMetadata
*/
private $metadata;
public function setUp(): void
{
$this->metadata = new WidgetMetadata();
}
public function testBuildWidgetMetadataShouldGenerateMetadata()
{
$config = $this->createWidgetConfig('Test', 'CategoryId', 'SubcategoryId');
$list = $this->createCategoryList(array('CategoryId' => array('SubcategoryId')));
$metadata = $this->metadata->buildWidgetMetadata($config, $list);
$this->assertEquals(array(
'name' => 'Test',
'category' => array(
'id' => 'CategoryId',
'name' => 'CategoryId',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
),
'subcategory' => array(
'id' => 'SubcategoryId',
'name' => 'SubcategoryIdName',
'order' => 99,
'help' => '',
),
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => array (
'module' => 'CoreHome',
'action' => 'render'
),
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false
), $metadata);
}
public function testBuildWidgetMetadataShouldSetCategoryAndSubcategoryToNullIfBothGivenButNotExistInList()
{
$config = $this->createWidgetConfig('Test', 'CategoryId', 'SubcategoryId');
$list = $this->createCategoryList();
$metadata = $this->metadata->buildWidgetMetadata($config, $list);
$this->assertNull($metadata['category']);
$this->assertNull($metadata['subcategory']);
}
public function testBuildWidgetMetadataShouldSetSubcategoryToNullIfCategoryGivenInListButSubcategoryNot()
{
$config = $this->createWidgetConfig('Test', 'CategoryId', 'SubcategoryId');
$list = $this->createCategoryList(array('CategoryId' => array()));
$metadata = $this->metadata->buildWidgetMetadata($config, $list);
$this->assertSame(array(
'id' => 'CategoryId',
'name' => 'CategoryId',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
), $metadata['category']);
$this->assertNull($metadata['subcategory']);
}
public function testBuildWidgetMetadataShouldNotAddCategoryAndSubcategoryToNullIfNoCategoryListGiven()
{
$config = $this->createWidgetConfig('Test', 'CategoryId', 'SubcategoryId');
$metadata = $this->metadata->buildWidgetMetadata($config);
$this->assertArrayNotHasKey('category', $metadata);
$this->assertArrayNotHasKey('subcategory', $metadata);
}
public function testBuildWidgetMetadataShouldAddOptionalMiddlewareParameters()
{
$config = $this->createWidgetConfig('Test', 'CategoryId', 'SubcategoryId');
$config->setMiddlewareParameters(array('module' => 'Goals', 'action' => 'hasAnyConversions'));
$metadata = $this->metadata->buildWidgetMetadata($config);
$this->assertSame(array('module' => 'Goals', 'action' => 'hasAnyConversions'), $metadata['middlewareParameters']);
}
public function testBuildWidgetMetadataShouldAddReportInformtionIfReportWidgetConfigGiven()
{
$config = new ReportWidgetConfig();
$config->setDefaultViewDataTable('graph');
$metadata = $this->metadata->buildWidgetMetadata($config);
$this->assertSame('graph', $metadata['viewDataTable']);
$this->assertTrue($metadata['isReport']);
}
public function testBuildWidgetMetadataShouldAddContainerInformtionIfWidgetContainerConfigGiven()
{
$config = new WidgetContainerConfig();
$config->setLayout('ByDimension');
$config->addWidgetConfig($this->createWidgetConfig('NestedName1', 'NestedCategory1', 'NestedSubcategory1'));
$config->addWidgetConfig($this->createWidgetConfig('NestedName2', 'NestedCategory2', 'NestedSubcategory2'));
$metadata = $this->metadata->buildWidgetMetadata($config);
$this->assertSame('ByDimension', $metadata['layout']);
$this->assertTrue($metadata['isContainer']);
$this->assertCount(2, $metadata['widgets']);
$widget1 = $metadata['widgets'][0];
$widget2 = $metadata['widgets'][1];
$this->assertSame(array(
'name' => 'NestedName1',
'category' => array (
'id' => 'NestedCategory1',
'name' => 'NestedCategory1',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
),
'subcategory' => array (
'id' => 'NestedSubcategory1',
'name' => 'NestedSubcategory1',
'order' => 99,
'help' => '',
),
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => array (
'module' => 'CoreHome',
'action' => 'render',
),
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false
), $widget1);
$this->assertSame(array(
'name' => 'NestedName2',
'category' => array (
'id' => 'NestedCategory2',
'name' => 'NestedCategory2',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
),
'subcategory' => array (
'id' => 'NestedSubcategory2',
'name' => 'NestedSubcategory2',
'order' => 99,
'help' => '',
),
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => array (
'module' => 'CoreHome',
'action' => 'render',
),
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false
), $widget2);
}
public function testBuildWidgetMetadataShouldUseOverrideValuesIfSupplied()
{
$categoryList = $this->createCategoryList([
'Category' => ['Subcategory'],
'Category2' => ['Subcategory2'],
]);
$config = $this->createWidgetConfig('name', 'Category', 'Subcategory');
$metadata = $this->metadata->buildWidgetMetadata($config, $categoryList, [
'name' => 'changed name',
'category' => 'Category2',
'subcategory' => 'Subcategory2',
]);
$this->assertEquals([
'name' => 'changed name',
'category' => [
'id' => 'Category2',
'name' => 'Category2',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
],
'subcategory' => [
'id' => 'Subcategory2',
'name' => 'Subcategory2Name',
'order' => 99,
'help' => '',
],
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => [
'module' => 'CoreHome',
'action' => 'render',
],
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false,
], $metadata);
}
public function testBuildPageMetadataShouldAddContainerInformtionIfWidgetContainerConfigGiven()
{
$config = new WidgetContainerConfig();
$config->setLayout('ByDimension');
$widgets = array(
$this->createWidgetConfig('NestedName1', 'NestedCategory1', 'NestedSubcategory1'),
$this->createWidgetConfig('NestedName2', 'NestedCategory2', 'NestedSubcategory1'),
);
$category = $this->createCategory('NestedCategory1');
$subcategory = $this->createSubcategory('NestedCategory1', 'NestedSubcategory1');
$metadata = $this->metadata->buildPageMetadata($category, $subcategory, $widgets);
$this->assertSame(array(
'uniqueId' => 'NestedCategory1.NestedSubcategory1',
'category' => array (
'id' => 'NestedCategory1',
'name' => 'NestedCategory1',
'order' => 99,
'icon' => '',
'help' => '',
'widget' => null,
),
'subcategory' => array (
'id' => 'NestedSubcategory1',
'name' => 'NestedSubcategory1Name',
'order' => 99,
'help' => '',
),
'widgets' => array (
0 => array ( // widgets should not have category / subcategory again, it's already present above
'name' => 'NestedName1',
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => array (
'module' => 'CoreHome',
'action' => 'render',
),
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false
), array (
'name' => 'NestedName2',
'module' => 'CoreHome',
'action' => 'render',
'order' => 99,
'parameters' => array (
'module' => 'CoreHome',
'action' => 'render',
),
'uniqueId' => 'widgetCoreHomerender',
'isWide' => false
)
)
), $metadata);
}
private function createWidgetConfig($name, $categoryId, $subcategoryId = '')
{
$widgetConfig = new WidgetConfig();
$widgetConfig->setName($name);
$widgetConfig->setCategoryId($categoryId);
$widgetConfig->setSubcategoryId($subcategoryId);
$widgetConfig->setModule('CoreHome');
$widgetConfig->setAction('render');
return $widgetConfig;
}
private function createCategoryList($categories = array())
{
$list = new CategoryList();
foreach ($categories as $categoryId => $subcategoryIds) {
$category = $this->createCategory($categoryId);
$list->addCategory($category);
foreach ($subcategoryIds as $subcategoryId) {
$subcategory = $this->createSubcategory($categoryId, $subcategoryId);
$category->addSubcategory($subcategory);
}
}
return $list;
}
private function createSubcategory($categoryId, $subcategoryId)
{
$subcategory = new Subcategory();
$subcategory->setCategoryId($categoryId);
$subcategory->setId($subcategoryId);
$subcategory->setName($subcategoryId . 'Name');
return $subcategory;
}
private function createCategory($categoryId)
{
$category = new Category();
$category->setId($categoryId);
return $category;
}
}