Skip to content

Commit

Permalink
Fixes yiisoft#5442: Fixed problem on load fixture dependencies with d…
Browse files Browse the repository at this point in the history
…atabase related tests
  • Loading branch information
leandrogehlen authored and samdark committed May 8, 2017
1 parent 9c0274d commit 25242ad
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 13 deletions.
8 changes: 7 additions & 1 deletion framework/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ Yii Framework 2 Change Log
2.0.12 under development
--------------------------

- Enh #13820: Add new HTTP status code 451 (yyxx9988)
- Bug #5442: Fixed problem on load fixture dependencies with database related tests (leandrogehlen)
- Bug #13671: Fixed error handler trace to work correctly with XDebug (samdark)
- Bug #13657: Fixed `yii\helpers\StringHelper::truncateHtml()` skip extra tags at the end (sam002)
- Bug #4408: Add support for unicode word characters and `+` character in attribute names (sammousa, kmindi)
- Bug #7946: Fixed a bug when the `form` attribute was not propagated to the hidden input of the checkbox (Kolyunya)
- Bug #8120: Fixes LIKE special characters escaping for Cubrid/MSSQL/Oracle/SQLite in `yii\db\QueryBuilder` (sergeymakinen)
Expand Down Expand Up @@ -83,6 +87,9 @@ Yii Framework 2 Change Log
- Enh #13883: `yii\data\SqlDataProvider` now provides automatic fallback for the case when `totalCount` is not specified (SamMousa)
- Enh #13911: Significantly enhanced MSSQL schema reading performance (paulzi, WebdevMerlion)
- Enh #13945: Removed Courier New from error page fonts list since it looks bad on Linux (samdark)
- Bug #13961: RBAC Rules: PostgreSQL: PHP Warning "unserialize() expects parameter 1 to be string, resource given" was fixed (vsguts)
- Enh #13976: Disabled IPv6 check on `\yii\validators\IpValidator` as it turns out it is not needed for inet_* methods to work (mikk150)
- Enh #13981: `yii\caching\Cache::getOrSet()` now supports both `Closure` and `callable` (silverfire)
- Enh #13963: Added tests for `yii\behaviors\TimestampBehavior` (vladis84)
- Enh #13976: Disabled IPv6 check on `\yii\validators\IpValidator` as it turns out it is not needed for `inet_*` methods to work (mikk150)
- Enh #13981: `yii\caching\Cache::getOrSet()` now supports both `Closure` and `callable` (silverfire)
Expand Down Expand Up @@ -1843,4 +1850,3 @@ Yii Framework 2 Change Log

- [Smarty View Renderer](https://github.com/yiisoft/yii2-smarty)
- [Twig View Renderer](https://github.com/yiisoft/yii2-twig)

10 changes: 9 additions & 1 deletion framework/test/ActiveFixture.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ public function init()
*/
public function load()
{
$this->resetTable();
$this->data = [];
$table = $this->getTableSchema();
foreach ($this->getData() as $alias => $row) {
Expand Down Expand Up @@ -106,6 +105,15 @@ protected function getData()
}
}

/**
* @inheritdoc
*/
public function unload()
{
$this->resetTable();
parent::unload();
}

/**
* Removes all existing data from the specified table and resets sequence number to 1 (if any).
* This method is called before populating fixture data into the table associated with this fixture.
Expand Down
10 changes: 10 additions & 0 deletions framework/test/FixtureTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ public function unloadFixtures($fixtures = null)
}
}

/**
* Initialize the fixtures
* @since 2.0.12
*/
public function initFixtures()
{
$this->unloadFixtures();
$this->loadFixtures();
}

/**
* Returns the fixture objects as specified in [[globalFixtures()]] and [[fixtures()]].
* @return Fixture[] the loaded fixtures for the current test case
Expand Down
3 changes: 2 additions & 1 deletion tests/data/mysql.sql
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ CREATE TABLE `customer` (
`address` text,
`status` int (11) DEFAULT 0,
`profile_id` int(11),
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
CONSTRAINT `FK_customer_profile_id` FOREIGN KEY (`profile_id`) REFERENCES `profile` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `category` (
Expand Down
36 changes: 26 additions & 10 deletions tests/framework/test/ActiveFixtureTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,18 @@
use yiiunit\data\ar\Customer;
use yiiunit\framework\db\DatabaseTestCase;

class ProfileFixture extends ActiveFixture
{
public $modelClass = 'yiiunit\data\ar\Profile';
}

class CustomerFixture extends ActiveFixture
{
public $modelClass = 'yiiunit\data\ar\Customer';

public $depends = [
'yiiunit\framework\test\ProfileFixture'
];
}

class MyDbTestCase
Expand All @@ -20,8 +29,7 @@ class MyDbTestCase

public function setUp()
{
$this->unloadFixtures();
$this->loadFixtures();
$this->initFixtures();
}

public function tearDown()
Expand All @@ -34,17 +42,15 @@ public function fixtures()
'customers' => CustomerFixture::className(),
];
}

public function globalFixtures()
{
return [
InitDbFixture::className(),
];
}
}

abstract class ActiveFixtureTest extends DatabaseTestCase
/**
* @group fixture
*/
class ActiveFixtureTest extends DatabaseTestCase
{
protected $driverName = 'mysql';

public function setUp()
{
parent::setUp();
Expand All @@ -63,12 +69,17 @@ public function testGetData()
$test = new MyDbTestCase();
$test->setUp();
$fixture = $test->getFixture('customers');

$this->assertEquals(CustomerFixture::className(), get_class($fixture));
$this->assertCount(2, $fixture);
$this->assertEquals(1, $fixture['customer1']['id']);
$this->assertEquals('[email protected]', $fixture['customer1']['email']);
$this->assertEquals(1, $fixture['customer1']['profile_id']);

$this->assertEquals(2, $fixture['customer2']['id']);
$this->assertEquals('[email protected]', $fixture['customer2']['email']);
$this->assertEquals(2, $fixture['customer2']['profile_id']);

$test->tearDown();
}

Expand All @@ -77,11 +88,16 @@ public function testGetModel()
$test = new MyDbTestCase();
$test->setUp();
$fixture = $test->getFixture('customers');

$this->assertEquals(Customer::className(), get_class($fixture->getModel('customer1')));
$this->assertEquals(1, $fixture->getModel('customer1')->id);
$this->assertEquals('[email protected]', $fixture->getModel('customer1')->email);
$this->assertEquals(1, $fixture['customer1']['profile_id']);

$this->assertEquals(2, $fixture->getModel('customer2')->id);
$this->assertEquals('[email protected]', $fixture->getModel('customer2')->email);
$this->assertEquals(2, $fixture['customer2']['profile_id']);

$test->tearDown();
}
}
3 changes: 3 additions & 0 deletions tests/framework/test/ArrayFixtureTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
use yiiunit\TestCase;
use yii\test\ArrayFixture;

/**
* @group fixture
*/
class ArrayFixtureTest extends TestCase
{

Expand Down
3 changes: 3 additions & 0 deletions tests/framework/test/FixtureTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
use yii\test\FixtureTrait;
use yiiunit\TestCase;

/**
* @group fixture
*/
class Fixture1 extends Fixture
{
public $depends = ['yiiunit\framework\test\Fixture2'];
Expand Down
2 changes: 2 additions & 0 deletions tests/framework/test/data/customer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
'name' => 'customer1',
'address' => 'address1',
'status' => 1,
'profile_id' => 1
],
'customer2' => [
'email' => '[email protected]',
'name' => 'customer2',
'address' => 'address2',
'status' => 2,
'profile_id' => 2
],
];
12 changes: 12 additions & 0 deletions tests/framework/test/data/profile.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

return [
'profile1' => [
'id' => 1,
'description' => 'profile 1',
],
'profile2' => [
'id' => 2,
'description' => 'profile 2',
],
];

0 comments on commit 25242ad

Please sign in to comment.