Skip to content
Extraits de code Groupes Projets
DuplicateActionsTest.php 2,36 ko
Newer Older
  • Learn to ignore specific revisions
  • <?php
    /**
     * Piwik - free/libre analytics platform
     *
     * @link    http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     */
    namespace Piwik\Tests\System;
    
    use Piwik\Common;
    use Piwik\Db;
    use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
    use Piwik\Tests\Framework\TestCase\SystemTestCase;
    
    /**
     * The tracker inserts actions in separate SQL queries which can cause
     * duplicate actions to be in the DB (actions w/ the same name, hash + type, but
     * different idaction). The tracker will delete duplicate actions, but
     * if for some reason the tracker fails before the DELETE occurs, there can be
     * stray duplicate actions. This test is there to ensure reports are not affected
     * by duplicate action entries.
     *
     * @group Core
     * @group DuplicateActionsTest
     */
    class DuplicateActionsTest extends SystemTestCase
    {
        /**
         * @var OneVisitorTwoVisits
         */
        public static $fixture = null; // initialized below class
    
        public static function setUpBeforeClass()
        {
            parent::setUpBeforeClass();
    
            // add duplicates for every action
            $table = Common::prefixTable('log_action');
            foreach (Db::fetchAll("SELECT * FROM $table") as $row) {
                $insertSql = "INSERT INTO $table (name, type, hash, url_prefix)
                                   VALUES (?, ?, CRC32(?), ?)";
    
                Db::query($insertSql, array($row['name'], $row['type'], $row['name'], $row['url_prefix']));
            }
        }
    
        /**
         * @dataProvider getApiForTesting
         */
    
    diosmosis's avatar
    diosmosis a validé
        public function test_PiwikApiWorks_WhenDuplicateActionsExistInDb($api, $params)
    
        {
            $this->runApiTests($api, $params);
        }
    
        public function getApiForTesting()
        {
            $idSite = self::$fixture->idSite;
            $dateTime = self::$fixture->dateTime;
    
            $api = array('VisitsSummary', 'Actions', 'Contents', 'Events');
            return array(
                array($api, array('idSite' => $idSite,
                                  'periods' => 'day',
                                  'date' => $dateTime,
                                  'compareAgainst' => 'OneVisitorTwoVisits',
                                  'otherRequestParameters' => array(
                                      'hideColumns' => 'nb_users',
                                  )
                ))
            );
        }
    }
    
    DuplicateActionsTest::$fixture = new OneVisitorTwoVisits();
    DuplicateActionsTest::$fixture->excludeMozilla = true;