1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-22 15:07:44 +00:00
Files
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

275 خطوط
8.8 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\CustomDimensions\tests\Integration\Dimension;
use Piwik\Piwik;
use Piwik\Plugins\CustomDimensions\Dimension\Extraction;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker\ActionPageview;
use Piwik\Tracker\Request;
/**
* @group CustomDimensions
* @group ExtractionTest
* @group Extraction
* @group Dao
* @group Plugins
*/
class ExtractionTest extends IntegrationTestCase
{
public function setUp(): void
{
parent::setUp();
if (!Fixture::siteCreated(1)) {
Fixture::createWebsite('2014-01-01 00:00:00');
}
}
public function testNonCapturingGroup()
{
$extraction = $this->buildExtraction('url', '.com/(?:test)/.*camelCase=(.*)');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertSame('fooBarBaz', $value);
}
public function testNonCapturingGroupWithinCaptureGroup()
{
$extraction = $this->buildExtraction('url', '.com/.*(?:camel=|camelCase=(.*))');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertSame('fooBarBaz', $value);
}
public function testMultipleNonCapturingGroups()
{
$extraction = $this->buildExtraction('url', '.com/(?:test)/.*(?:camel=|camelCase=(.*))');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertSame('fooBarBaz', $value);
}
public function testToArray()
{
$extraction = $this->buildExtraction('url', '.com/(.+)/index');
$value = $extraction->toArray();
$this->assertSame(array('dimension' => 'url', 'pattern' => '.com/(.+)/index'), $value);
}
public function testExtractUrlWithMatch()
{
$extraction = $this->buildExtraction('url', '.com/(.+)/index');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertSame('test', $value);
}
public function testExtractUrlWithNoPattern()
{
$extraction = $this->buildExtraction('url', 'example');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertNull($value);
}
public function testExtractUrlWithPatternButNoMatch()
{
$extraction = $this->buildExtraction('url', 'examplePiwik(.+)');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertNull($value);
}
public function testActionNameMatch()
{
$extraction = $this->buildExtraction('action_name', 'My(.+)Title');
$request = $this->buildRequest();
$value = $extraction->extract($request);
$this->assertSame(' Test ', $value);
}
public function testExtractUrlparam()
{
$request = $this->buildRequest();
$value = $this->buildExtraction('urlparam', 'module')->extract($request);
$this->assertSame('CoreHome', $value);
$value = $this->buildExtraction('urlparam', 'action')->extract($request);
$this->assertSame('test', $value);
$value = $this->buildExtraction('urlparam', 'notExist')->extract($request);
$this->assertNull($value);
}
public function testExtractWithActionShouldReadValueFromActionNotFromPassedRequest()
{
$request = $this->buildRequest();
$action = new ActionPageview($request);
// we create a new empty request here to make sure it actually reads the value from $action and not from $request
$request = new Request(array());
$request->setMetadata('Actions', 'action', $action);
$value = $this->buildExtraction('urlparam', 'module')->extract($request);
$this->assertSame('CoreHome', $value);
$value = $this->buildExtraction('action_name', 'My(.+)Title')->extract($request);
$this->assertSame(' Test ', $value);
}
/**
* @dataProvider getCaseSensitiveTestProvider
*/
public function testExtractShouldBeCaseSensitiveByDefault($dimension, $pattern, $expectedExtracted)
{
$request = $this->buildRequest();
// Title is "My Test Title"
$value = $this->buildExtraction($dimension, $pattern)->extract($request);
$this->assertSame($expectedExtracted, $value);
}
public function getCaseSensitiveTestProvider()
{
return array(
array('action_name', 'My(.+)Title', ' Test '),
array('action_name', 'my(.+)Title', null),
array('action_name', 'My(.+)title', null),
array('urlparam', 'camelCase', 'fooBarBaz'),
array('urlparam', 'camelcase', null),
array('urlparam', 'Camelcase', null),
);
}
/**
* @dataProvider getCaseInsensitiveTestProvider
*/
public function testExtractWhenCaseInsensitiveIsEnabled($dimension, $pattern, $expectedExtracted)
{
$request = $this->buildRequest();
$extraction = $this->buildExtraction($dimension, $pattern);
$extraction->setCaseSensitive(false);
// Title is "My Test Title"
$value = $extraction->extract($request);
$this->assertSame($expectedExtracted, $value);
}
public function getCaseInsensitiveTestProvider()
{
return array(
array('action_name', 'My(.+)Title', ' Test '),
array('action_name', 'my(.+)Title', ' Test '),
array('action_name', 'My(.+)title', ' Test '),
array('urlparam', 'camelCase', 'fooBarBaz'),
array('urlparam', 'camelcase', 'fooBarBaz'),
array('urlparam', 'Camelcase', 'fooBarBaz'),
);
}
public function testExtractAnyRandomTrackingApiParameter()
{
$request = $this->buildRequest();
$value = $this->buildExtraction('urlref', '/ref(.+)')->extract($request);
$this->assertSame('errer', $value);
}
public function testExtractWhenOnlyPatternGiven()
{
$request = $this->buildRequest();
$value = $this->buildExtraction('url', '(.+)')->extract($request);
$this->assertSame('http://www.example.com/test/index.php?idsite=54&module=CoreHome&action=test&camelCase=fooBarBaz', $value);
}
public function testCheckShouldFailWhenInvalidDimensionGiven()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Invald dimension \'anyInvalid\' used in an extraction. Available dimensions are: url, urlparam, action_name');
$this->buildExtraction('anyInvalid', '/ref(.+)')->check();
}
public function testCheckShouldFailWhenInvalidRegGiven()
{
$check = '/foo(*)/';
$this->expectException(\Exception::class);
$this->expectExceptionMessage(Piwik::translate('General_ValidatorErrorNoValidRegex', array($check)));
$this->buildExtraction('url', $check)->check();
}
/**
* @dataProvider getInvalidPatterns
*/
public function testCheckShouldFailWhenInvalidPatternGiven($pattern)
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('You need to group exactly one part of the regular expression inside round brackets, eg \'index_(.+).html\'');
$this->buildExtraction('url', $pattern)->check();
}
public function testCheckShouldNotFailWhenValidCombinationsAreGiven()
{
$this->expectNotToPerformAssertions();
$this->buildExtraction('urlparam', 'index')->check(); // does not have to contain brackets
$this->buildExtraction('url', 'index_(.+).html')->check();
$this->buildExtraction('action_name', 'index_(.+).html')->check();
$this->buildExtraction('url', '')->check(); // empty value is allowed
$this->buildExtraction('urlparam', 'index')->check(); // does not have to contain brackets
}
public function getInvalidPatterns()
{
return array(
array('index.html'),
array('index.(html'),
array('index.)html'),
array('index.)(html'),
array('index.)(.+)html'),
array('(?:index.(html)'),
array('(?:index).html)'),
);
}
private function buildRequest()
{
$url = 'http://www.example.com/test/index.php?idsite=54&module=CoreHome&action=test&camelCase=fooBarBaz';
$referrer = 'http://www.example.com/referrer';
$actionName = 'My Test Title';
return new Request(array('idsite' => 1, 'url' => $url, 'action_name' => $actionName, 'urlref' => $referrer));
}
private function buildExtraction($dimension, $pattern)
{
return new Extraction($dimension, $pattern);
}
}