getVisitorColumn('custom_dimension_3') . 'extended'; } public function getRequiredFields() { return array('custom_dimension_3'); } } class FakeTrackerVisit extends Visit { public function __construct($request, Visit\VisitProperties $visitProperties) { parent::__construct(); $this->request = $request; $this->visitProperties = $visitProperties; $this->visitProperties->setProperty('location_ip', $request->getIp()); $this->visitProperties->setProperty('idvisitor', 1); } public function handleExistingVisit($visitIsConverted) { parent::handleExistingVisit($visitIsConverted); } public function handleNewVisit($visitIsConverted) { parent::handleNewVisit($visitIsConverted); } public function getAllVisitDimensions() { return array( new FakeTrackerVisitDimension1(), new FakeTrackerVisitDimension2(), new FakeTrackerVisitDimension3(), new FakeTrackerVisitDimension4(), ); } public function getVisitorInfo() { return $this->visitProperties->getProperties(); } protected function insertNewVisit($visit) { } protected function updateExistingVisit($valuesToUpdate) { } } /** * @group Core * @group VisitTest */ class Visit2Test extends IntegrationTestCase { public function setUp(): void { parent::setUp(); Fixture::createWebsite('2014-01-01 00:00:00'); Piwik::addAction('Tracker.Request.getIdSite', function (&$idSite) { $idSite = 1; }); } public function testHandleNewVisitWithoutConversionShouldTriggerDimensions() { $request = new Request(array()); $visitProperties = new Visit\VisitProperties(); $visitor = new Visitor($visitProperties); $visit = new FakeTrackerVisit($request, $visitProperties); $visit->handleNewVisit(false); $info = $visit->getVisitorInfo(); $this->assertEquals('onNew2', $info['custom_dimension_2']); $this->assertEquals('onNew3', $info['custom_dimension_3']); $this->assertArrayNotHasKey('custom_dimension_1', $info); // on new visit returns false and should be ignored $this->assertArrayNotHasKey('custom_dimension_4', $info); // on new visit not defined // make sure visitor gets updated as well $this->assertEquals('onNew2', $visitor->getVisitorColumn('custom_dimension_2')); $this->assertEquals('onNew3', $visitor->getVisitorColumn('custom_dimension_3')); $this->assertFalse($visitor->getVisitorColumn('custom_dimension_1')); $this->assertFalse($visitor->getVisitorColumn('custom_dimension_4')); } public function testHandleNewVisitWithConversionShouldTriggerDimensions() { $request = new Request(array()); $visitProperties = new Visit\VisitProperties(); $visitor = new Visitor($visitProperties); $visit = new FakeTrackerVisit($request, $visitProperties); $visit->handleNewVisit(true); $info = $visit->getVisitorInfo(); $this->assertEquals('onNew2', $info['custom_dimension_2']); // on converted visit returns false and should be ignored $this->assertEquals('converted3', $info['custom_dimension_3']); // a conversion should overwrite an existing value $this->assertArrayNotHasKey('custom_dimension_1', $info); $this->assertArrayNotHasKey('custom_dimension_4', $info); $this->assertEquals('converted3', $visitor->getVisitorColumn('custom_dimension_3')); } public function testHandleExistingVisitWithoutConversionShouldTriggerDimensions() { $request = new Request(array()); $visitProperties = new Visit\VisitProperties(); $visitor = new Visitor($visitProperties); $visit = new FakeTrackerVisit($request, $visitProperties); $visit->handleNewVisit(false); $visit->handleExistingVisit(false); $info = $visit->getVisitorInfo(); $this->assertEquals('existing1', $info['custom_dimension_1']); $this->assertEquals('onNew2', $info['custom_dimension_2']); // on existing visit returns false and should be ignored/ not overwrite on new value $this->assertEquals('existing3', $info['custom_dimension_3']); $this->assertEquals('existing3extended', $info['custom_dimension_4']); // accesses a previously set column // make sure visitor gets updated as well $this->assertEquals('existing1', $visitor->getVisitorColumn('custom_dimension_1')); $this->assertEquals('onNew2', $visitor->getVisitorColumn('custom_dimension_2')); $this->assertEquals('existing3', $visitor->getVisitorColumn('custom_dimension_3')); $this->assertEquals('existing3extended', $visitor->getVisitorColumn('custom_dimension_4')); } public function testHandleExistingVisitWithConversionShouldTriggerDimensions() { $request = new Request(array()); $visitProperties = new Visit\VisitProperties(); $visitor = new Visitor($visitProperties); $visit = new FakeTrackerVisit($request, $visitProperties); $visit->handleNewVisit(false); $visit->handleExistingVisit(true); $info = $visit->getVisitorInfo(); $this->assertEquals('existing1', $info['custom_dimension_1']); $this->assertEquals('onNew2', $info['custom_dimension_2']); // on converted visit returns false and should be ignored $this->assertEquals('converted3', $info['custom_dimension_3']); // a conversion should overwrite an existing value $this->assertEquals('existing3extended', $info['custom_dimension_4']); $this->assertEquals('converted3', $visitor->getVisitorColumn('custom_dimension_3')); } }