Skip to content
Extraits de code Groupes Projets
LogDeleterTest.php 5,79 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\Integration;
    
    
    use Piwik\Common;
    
    use Piwik\DataAccess\RawLogDao;
    
    use Piwik\LogDeleter;
    
    use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
    
    use Piwik\Tests\Framework\TestDataHelper\LogHelper;
    
    
    /**
     * @group Core
     */
    class LogDeleterTest extends IntegrationTestCase
    {
    
         */
        private $logInserter;
    
        /**
         * @var LogDeleter
         */
        private $logDeleter;
    
        public function setUp()
    
            parent::setUp();
    
            $this->logDeleter = new LogDeleter(new RawLogDao());
    
    
            $this->insertTestData();
    
        public function test_deleteVisits_RemovesVisitsAndOtherRelatedLogs()
    
            $this->logDeleter->deleteVisits(array(2, 3));
    
            $this->assertVisitExists(1);
            $this->assertVisitNotExists(2);
            $this->assertVisitNotExists(3);
            $this->assertVisitExists(4);
    
        }
    
        public function test_deleteConversions_RemovesConversionsAndConversionItems()
        {
    
            $this->logDeleter->deleteConversions(array(2, 3));
    
    
            $this->assertConversionsNotExists(2);
            $this->assertConversionsNotExists(3);
    
    
            $this->assertVisitExists(1);
            $this->assertVisitExists(2, $checkAggregates = false);
            $this->assertVisitExists(3, $checkAggregates = false);
            $this->assertVisitExists(4);
    
        }
    
        public function test_deleteConversionItems_RemovesConversionItems()
        {
    
            $this->logDeleter->deleteConversionItems(array(2, 3));
    
    
            $this->assertConversionItemsNotExist(2);
            $this->assertConversionItemsNotExist(3);
    
            $this->assertConversionsExists(2, $checkAggregates = false);
            $this->assertConversionsExists(3, $checkAggregates = false);
    
    
            $this->assertVisitExists(1);
            $this->assertVisitExists(2, $checkAggregates = false);
            $this->assertVisitExists(3, $checkAggregates = false);
            $this->assertVisitExists(4);
    
        }
    
        public function test_deleteVisitsFor_DeletesVisitsForSpecifiedRangeAndSites_AndInvokesCallbackAfterEveryChunkIsDeleted()
        {
    
            $iterationCount = 0;
            $this->logDeleter->deleteVisitsFor('2012-01-01', '2012-01-02 05:05:05', 2, $iterationStep = 1, function () use (&$iterationCount) {
                ++$iterationCount;
            });
    
            $this->assertEquals(2, $iterationCount);
    
            // visits for idSite = 1 do not get deleted
            $this->assertVisitExists(1);
            $this->assertVisitExists(2);
    
            // visits for idSite = 2 do get deleted
            $this->assertVisitNotExists(3);
            $this->assertVisitNotExists(4);
    
    
        private function insertTestData()
        {
            // two visits for site = 1
            $this->insertVisit($idSite = 1, $dateTime = '2012-01-01 00:00:00');
            $this->insertVisit($idSite = 1, $dateTime = '2012-01-02 00:00:00');
    
            // two visits for site = 2
            $this->insertVisit($idSite = 2, $dateTime = '2012-01-01 00:00:00');
            $this->insertVisit($idSite = 2, $dateTime = '2012-01-02 00:00:00');
        }
    
        private function insertVisit($idSite, $dateTime)
        {
            $visit = $this->logInserter->insertVisit(array('idsite' => $idSite, 'visit_last_action_time' => $dateTime));
    
            $orderId = 'idorder_' . $visit['idvisit'];
    
            // insert two actions
            $this->logInserter->insertVisitAction($visit['idvisit'], array('idsite' => $idSite));
            $this->logInserter->insertVisitAction($visit['idvisit'], array('idsite' => $idSite));
    
            // insert two conversions
            $this->logInserter->insertConversion($visit['idvisit'], array('idsite' => $idSite, 'buster' => 1));
            $this->logInserter->insertConversion($visit['idvisit'], array('idsite' => $idSite, 'buster' => 2, 'idorder' => $orderId));
    
            // insert two conversion items for last conversion
            $this->logInserter->insertConversionItem($visit['idvisit'], $orderId, array('idsite' => $idSite));
    
            $this->logInserter->insertConversionItem($visit['idvisit'], $orderId, array('idsite' => $idSite, 'idaction_sku' => 123));
        }
    
        private function assertVisitExists($idVisit, $checkAggregates = true)
        {
            $this->assertEquals(1, $this->getRowCountWithIdVisit('log_visit', $idVisit));
            $this->assertEquals(2, $this->getRowCountWithIdVisit('log_link_visit_action', $idVisit));
    
            if ($checkAggregates) {
                $this->assertConversionsExists($idVisit);
            }
        }
    
        private function assertConversionsExists($idVisit, $checkAggregates = true)
        {
            $this->assertEquals(2, $this->getRowCountWithIdVisit('log_conversion', $idVisit));
    
            if ($checkAggregates) {
                $this->assertConversionItemsExist($idVisit);
            }
        }
    
        private function assertConversionItemsExist($idVisit)
        {
            $this->assertEquals(2, $this->getRowCountWithIdVisit('log_conversion_item', $idVisit));
        }
    
        private function assertVisitNotExists($idVisit)
        {
            $this->assertEquals(0, $this->getRowCountWithIdVisit('log_visit', $idVisit));
            $this->assertEquals(0, $this->getRowCountWithIdVisit('log_link_visit_action', $idVisit));
    
            $this->assertConversionsNotExists($idVisit);
        }
    
        private function getRowCountWithIdVisit($table, $idVisit)
        {
            return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable($table) . " WHERE idvisit = $idVisit");
        }
    
        private function assertConversionsNotExists($idVisit)
        {
            $this->assertEquals(0, $this->getRowCountWithIdVisit('log_conversion', $idVisit));
    
            $this->assertConversionItemsNotExist($idVisit);
        }
    
        private function assertConversionItemsNotExist($idVisit)
        {
            $this->assertEquals(0, $this->getRowCountWithIdVisit('log_conversion_item', $idVisit));