Newer
Older
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
<?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\Impl;
use Piwik\Config;
use Piwik\Db;
/**
* 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.
*
*/
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();
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();
Config::getInstance()->setTestEnvironment();
if (!empty(self::$tableData)) {
self::restoreDbTables(self::$tableData);
}
}
/**
* Resets all caches and drops the database
*/
public function tearDown()
{
self::$fixture->clearInMemoryCaches();
parent::tearDown();
}
protected static function configureFixture($fixture)
{
$fixture->loadTranslations = false;
$fixture->createSuperUser = false;
$fixture->configureComponents = false;
}
}
IntegrationTestCase::$fixture = new Fixture();