Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ArchiveWithNoVisitsTest.php « Integration « PHPUnit « tests - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 2063efdb253fa26001b2918740c4205ccf9ef2a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?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\ArchiveProcessor\PluginsArchiver;
use Piwik\Cache;
use Piwik\EventDispatcher;
use Piwik\Plugin\Archiver;
use Piwik\Tests\Framework\Fixture;
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;

class ArchiveWithNoVisitsTest_MockArchiver extends Archiver
{
    public static $methodsCalled = array();

    public function aggregateDayReport()
    {
        self::$methodsCalled[] = 'aggregateDayReport';
    }

    public function aggregateMultipleReports()
    {
        self::$methodsCalled[] = 'aggregateMultipleReports';
    }
}

class ArchiveWithNoVisitsTest extends IntegrationTestCase
{
    public function setUp()
    {
        parent::setUp();

        Fixture::createWebsite('2011-01-01');

        ArchiveWithNoVisitsTest_MockArchiver::$methodsCalled = array();
    }

    public function test_getIdSitesToArchiveWhenNoVisits_CanBeUsedToTriggerArchiving_EvenIfSiteHasNoVisits()
    {
        // add our mock archiver instance
        // TODO: should use a dummy plugin that is activated for this test explicitly, but that can be tricky, especially in the future

        PluginsArchiver::$archivers['VisitsSummary'] = 'Piwik\Tests\Integration\ArchiveWithNoVisitsTest_MockArchiver';

        // initiate archiving w/o adding the event and make sure no methods are called
        VisitsSummaryAPI::getInstance()->get($idSite = 1, 'week', '2012-01-01');

        $this->assertEmpty(ArchiveWithNoVisitsTest_MockArchiver::$methodsCalled);

        // mark our only site as should archive when no visits
        $eventDispatcher = $this->getEventDispatcher();
        $eventDispatcher->addObserver('Archiving.getIdSitesToArchiveWhenNoVisits', function (&$idSites) {
            $idSites[] = 1;
        });

        Cache::getTransientCache()->flushAll();

        // initiate archiving and make sure both aggregate methods are called correctly
        VisitsSummaryAPI::getInstance()->get($idSite = 1, 'week', '2012-01-10');

        $expectedMethodCalls = array(
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateDayReport',
            'aggregateMultipleReports',
        );
        $this->assertEquals($expectedMethodCalls, ArchiveWithNoVisitsTest_MockArchiver::$methodsCalled);
    }

    /**
     * @return EventDispatcher
     */
    private function getEventDispatcher()
    {
        return self::$fixture->piwikEnvironment->getContainer()->get('Piwik\EventDispatcher');
    }
}