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

IntegrationTestCase.php « TestCase « Framework « PHPUnit « tests - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9e8b2abe07ca7e0db063ea891360fadff5fac2c3 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?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\Framework\TestCase;

use Piwik\Access;
use Piwik\Config;
use Piwik\Db;
use Piwik\DbHelper;
use Piwik\Menu\MenuAbstract;
use Piwik\Option;
use Piwik\Tests\Framework\Fixture;
use Piwik\Cache as PiwikCache;
use Piwik\Tests\Framework\TestingEnvironmentVariables;

/**
 * Tests extending IntegrationTestCase are much slower to run: the setUp will
 * create all Piwik tables in a freshly empty test database.
 *
 * This allows each test method to start from a clean DB and setup initial state to
 * then test it.
 *
 * @since 2.8.0
 */
abstract class IntegrationTestCase extends SystemTestCase
{
    /**
     * @var Fixture
     */
    public static $fixture;
    public static $tableData;

    /**
     * Implementation details:
     *
     * To increase speed of tests, database setup is done once in setUpBeforeClass.
     * Afterwards, the content of the tables is stored in a static class variable,
     * self::$tableData. Before each individual test, the database tables are
     * truncated and the data in self::$tableData is restored.
     *
     * If your test modifies table columns, you will need to recreate the database
     * completely. This can be accomplished by:
     *
     *     public function setUp()
     *     {
     *         self::$fixture->performSetUp();
     *     }
     *
     *     public function tearDown()
     *     {
     *         parent::tearDown();
     *         self::$fixture->performTearDown();
     *     }
     */
    public static function setUpBeforeClass()
    {
        static::configureFixture(static::$fixture);
        parent::setUpBeforeClass();
        static::beforeTableDataCached();

        self::$tableData = self::getDbTablesWithData();
    }

    public static function tearDownAfterClass()
    {
        self::$tableData = array();
    }

    /**
     * Setup the database and create the base tables for all tests
     */
    public function setUp()
    {
        parent::setUp();

        static::$fixture->extraDefinitions = array_merge(static::provideContainerConfigBeforeClass(), $this->provideContainerConfig());
        static::$fixture->createEnvironmentInstance();

        Db::get();
        Fixture::loadAllPlugins(new TestingEnvironmentVariables(), get_class($this), self::$fixture->extraPluginsToLoad);

        Access::getInstance()->setSuperUserAccess(true);
        
        if (!empty(self::$tableData)) {
            self::restoreDbTables(self::$tableData);
        }

        PiwikCache::getEagerCache()->flushAll();
        PiwikCache::getTransientCache()->flushAll();
        MenuAbstract::clearMenus();
        Option::clearCache();
    }

    /**
     * Resets all caches and drops the database
     */
    public function tearDown()
    {
        static::$fixture->clearInMemoryCaches();
        static::$fixture->destroyEnvironment();

        parent::tearDown();
    }

    /**
     * @param Fixture $fixture
     */
    protected static function configureFixture($fixture)
    {
        $fixture->createSuperUser     = false;
        $fixture->configureComponents = false;

        $fixture->extraTestEnvVars['loadRealTranslations'] = false;
    }

    protected static function beforeTableDataCached()
    {
        // empty
    }

    /**
     * Use this method to return custom container configuration that you want to apply for the tests.
     * This configuration will override Fixture config and config specified in SystemTestCase::provideContainerConfig().
     *
     * @return array
     */
    public function provideContainerConfig()
    {
        return array();
    }
}

IntegrationTestCase::$fixture = new Fixture();