Skip to content

Commit

Permalink
process general goal metrics if no conversions, but site is ecommerce…
Browse files Browse the repository at this point in the history
… enabled, as there may be abandoned cart "conversions" (#21265)
  • Loading branch information
diosmosis committed Sep 19, 2023
1 parent 802b53a commit 1abe74b
Show file tree
Hide file tree
Showing 25 changed files with 533 additions and 1 deletion.
@@ -0,0 +1,61 @@
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/

namespace Piwik\Plugins\Ecommerce\tests\Fixtures;

use Piwik\Date;
use Piwik\Tests\Framework\Fixture;
use Piwik\Plugins\Goals\API as GoalsAPI;

class AbandonedCartWithoutConversions extends Fixture
{
public $idSite = 1;
public $idGoalStandard = 1;
public $dateTime = '2011-04-05 00:11:42';

public function setUp(): void
{
parent::setUp();

$this->setUpWebsitesAndGoals();
$this->trackVisits();
}

private function setUpWebsitesAndGoals()
{
if (!self::siteCreated($this->idSite)) {
$this->idSite = self::createWebsite($this->dateTime, $ecommerce = 1, 'test site');
}

if (!self::goalExists($this->idSite, $this->idGoalStandard)) {
GoalsAPI::getInstance()->addGoal(
$this->idSite, 'title match, triggered NEVER', 'title', 'saldkfjaslkdfjsalkdjf', 'contains',
$caseSensitive = false, $revenue = 10, $allowMultipleConversions = true
);
}
}

private function trackVisits()
{
// visit without ecommerce
$t = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
$t->setUrl('http://piwik.net/here/we/go');
$t->setForceVisitDateTime(Date::factory($this->dateTime)->getDatetime());
self::checkResponse($t->doTrackPageView('one page visit'));

// visit with abandoned cart
$t = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
$t->setUrl('http://piwik.net/here/we/go');
$t->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(1)->getDatetime());
self::checkResponse($t->doTrackPageView('one page visit'));

$t->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(1.1)->getDatetime());
$t->addEcommerceItem($sku = 'SKU IN ABANDONED CART ONE', $name = 'PRODUCT ONE LEFT in cart', $category = '', $price = 500.11111112, $quantity = 2);
self::checkResponse($t->doTrackEcommerceCartUpdate($grandTotal = 1000));
}
}
@@ -0,0 +1,72 @@
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/

namespace Piwik\Plugins\Ecommerce\tests\System;

use Piwik\Piwik;
use Piwik\Plugins\Ecommerce\tests\Fixtures\AbandonedCartWithoutConversions;
use Piwik\Tests\Framework\TestCase\SystemTestCase;

class AbandonedCartWithoutConversionsTest extends SystemTestCase
{
/**
* @var AbandonedCartWithoutConversions
*/
public static $fixture;

/**
* @dataProvider getApiForTesting
*/
public function testApi($api, $params)
{
$this->runApiTests($api, $params);
}

public function getApiForTesting()
{
$idSite = self::$fixture->idSite;
$dateTime = self::$fixture->dateTime;

$api = ['Goals'];
$goalItemApi = ['Goals.getItemsSku', 'Goals.getItemsName', 'Goals.getItemsCategory'];

return [
[
$api, [
'idSite' => $idSite,
'date' => $dateTime,
'periods' => ['day', 'week'],
'idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART,
],
],
[
$goalItemApi, [
'idSite' => $idSite,
'date' => $dateTime,
'periods' => ['day', 'week'],
'testSuffix' => '_AbandonedCarts',
'otherRequestParameters' => [
'abandonedCarts' => 1,
],
],
],
];
}

public static function getOutputPrefix()
{
return 'abandonedCartWithoutConversions';
}

public static function getPathToTestDirectory()
{
return dirname(__FILE__);
}
}

AbandonedCartWithoutConversionsTest::$fixture = new AbandonedCartWithoutConversions();
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>Product Category not defined</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productCategory==Product+Category+not+defined</segment>
</row>
</result>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>Product Category not defined</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productCategory==Product+Category+not+defined</segment>
</row>
</result>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>PRODUCT ONE LEFT in cart</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productName==PRODUCT+ONE+LEFT+in+cart</segment>
</row>
</result>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>PRODUCT ONE LEFT in cart</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productName==PRODUCT+ONE+LEFT+in+cart</segment>
</row>
</result>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>SKU IN ABANDONED CART ONE</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productSku==SKU+IN+ABANDONED+CART+ONE</segment>
</row>
</result>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>SKU IN ABANDONED CART ONE</label>
<revenue>1000.22</revenue>
<quantity>2</quantity>
<abandoned_carts>1</abandoned_carts>
<avg_price>500.11</avg_price>
<avg_quantity>2</avg_quantity>
<conversion_rate>0%</conversion_rate>
<segment>productSku==SKU+IN+ABANDONED+CART+ONE</segment>
</row>
</result>
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>0 days</label>
<nb_conversions>1</nb_conversions>
</row>
<row>
<label>1 day</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>2 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>3 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>4 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>5 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>6 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>7 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>8-14 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>15-30 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>31-60 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>61-120 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>121-364 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>365+ days</label>
<nb_conversions>0</nb_conversions>
</row>
</result>
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>0 days</label>
<nb_conversions>1</nb_conversions>
</row>
<row>
<label>1 day</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>2 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>3 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>4 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>5 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>6 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>7 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>8-14 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>15-30 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>31-60 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>61-120 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>121-364 days</label>
<nb_conversions>0</nb_conversions>
</row>
<row>
<label>365+ days</label>
<nb_conversions>0</nb_conversions>
</row>
</result>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<success message="ok" />
</result>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row key="1">
<idsite>1</idsite>
<idgoal>1</idgoal>
<name>title match, triggered NEVER</name>
<description />
<match_attribute>title</match_attribute>
<pattern>saldkfjaslkdfjsalkdjf</pattern>
<pattern_type>contains</pattern_type>
<case_sensitive>0</case_sensitive>
<allow_multiple>1</allow_multiple>
<revenue>10</revenue>
<deleted>0</deleted>
<event_value_as_revenue>0</event_value_as_revenue>
</row>
</result>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" ?>
<result />

0 comments on commit 1abe74b

Please sign in to comment.