$param = $value; } public function configureSegments(SegmentsList $segmentsList, DimensionSegmentFactory $dimensionSegmentFactory) { $segment = new Segment(); $segment->setSegment('exitPageUrl'); $segment->setName('Actions_ColumnExitPageURL'); $segment->setCategory('General_Visit'); $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); // custom type and sqlSegment $segment = new Segment(); $segment->setSegment('exitPageUrl'); $segment->setSqlSegment('customValue'); $segment->setType(Segment::TYPE_METRIC); $segment->setName('Actions_ColumnExitPageURL'); $segment->setCategory('General_Visit'); $segmentsList->addSegment($dimensionSegmentFactory->createSegment($segment)); } } /** * @group Core */ class ActionDimensionTest extends IntegrationTestCase { /** * @var FakeActionDimension */ private $dimension; public function setUp(): void { parent::setUp(); Manager::getInstance()->unloadPlugins(); Manager::getInstance()->doNotLoadAlwaysActivatedPlugins(); $this->dimension = new FakeActionDimension(); } public function testInstallShouldNotReturnAnythingIfColumnTypeNotSpecified() { $this->dimension->set('columnType', ''); $this->assertEquals(array(), $this->dimension->install()); } public function testInstallShouldNotReturnAnythingIfColumnNameNotSpecified() { $this->dimension->set('columnName', ''); $this->assertEquals(array(), $this->dimension->install()); } public function testInstallShouldAlwaysInstallLogActionIfColumnNameAndTypeGiven() { $expected = array( 'log_link_visit_action' => array( "ADD COLUMN `fake_action_dimension_column` VARCHAR (255) DEFAULT 0", ), ); $this->assertEquals($expected, $this->dimension->install()); } public function testUpdateShouldAlwaysUpdateLogVisitIfColumnNameAndTypeGiven() { $expected = array( 'log_link_visit_action' => array( "MODIFY COLUMN `fake_action_dimension_column` VARCHAR (255) DEFAULT 0", ), ); $this->assertEquals($expected, $this->dimension->update(array())); } public function testGetVersionShouldUseColumnTypeAsVersion() { $this->assertEquals('VARCHAR (255) DEFAULT 0', $this->dimension->getVersion()); } public function testGetSegmentShouldReturnConfiguredSegments() { $list = new SegmentsList(); $this->dimension->configureSegments($list, new DimensionSegmentFactory($this->dimension)); $segments = $list->getSegments(); $this->assertCount(2, $segments); $this->assertInstanceOf('\Piwik\Plugin\Segment', $segments[0]); $this->assertInstanceOf('\Piwik\Plugin\Segment', $segments[1]); } public function testAddSegmentShouldPrefilSomeSegmentValuesIfNotDefinedYet() { $list = new SegmentsList(); $this->dimension->configureSegments($list, new DimensionSegmentFactory($this->dimension)); $segments = $list->getSegments(); $this->assertEquals('log_link_visit_action.fake_action_dimension_column', $segments[0]->getSqlSegment()); $this->assertEquals(Segment::TYPE_DIMENSION, $segments[0]->getType()); } public function testAddSegmentShouldNotOverwritePreAssignedValues() { $list = new SegmentsList(); $this->dimension->configureSegments($list, new DimensionSegmentFactory($this->dimension)); $segments = $list->getSegments(); $this->assertEquals('customValue', $segments[1]->getSqlSegment()); $this->assertEquals(Segment::TYPE_METRIC, $segments[1]->getType()); } public function testGetDimensionsShouldOnlyLoadAllActionDimensionsFromACertainPlugin() { Manager::getInstance()->loadPlugins(array('Actions')); $plugin = Manager::getInstance()->loadPlugin('Actions'); $dimensions = ActionDimension::getDimensions($plugin); $this->assertGreaterThan(5, count($dimensions)); foreach ($dimensions as $dimension) { $this->assertInstanceOf('\Piwik\Plugin\Dimension\ActionDimension', $dimension); $this->assertStringStartsWith('Piwik\Plugins\Actions\Columns', get_class($dimension)); } } public function testGetAllDimensionsShouldLoadAllDimensionsButOnlyIfLoadedPlugins() { Manager::getInstance()->loadPlugins(array('Actions', 'Events')); $dimensions = ActionDimension::getAllDimensions(); $this->assertGreaterThan(8, count($dimensions)); foreach ($dimensions as $dimension) { $this->assertInstanceOf('\Piwik\Plugin\Dimension\ActionDimension', $dimension); $this->assertRegExp('/Piwik.Plugins.(Actions|Events).Columns/', get_class($dimension)); } } }