|
|
|
@ -7,12 +7,121 @@
|
|
|
|
|
|
|
|
|
|
namespace yiiunit\framework\test; |
|
|
|
|
|
|
|
|
|
use Yii; |
|
|
|
|
use yii\db\Connection; |
|
|
|
|
use yii\test\ActiveFixture; |
|
|
|
|
use yii\test\FixtureTrait; |
|
|
|
|
use yiiunit\data\ar\ActiveRecord; |
|
|
|
|
use yiiunit\data\ar\Customer; |
|
|
|
|
use yiiunit\framework\db\DatabaseTestCase; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @group fixture |
|
|
|
|
* @group db |
|
|
|
|
*/ |
|
|
|
|
class ActiveFixtureTest extends DatabaseTestCase |
|
|
|
|
{ |
|
|
|
|
protected $driverName = 'mysql'; |
|
|
|
|
|
|
|
|
|
public function setUp() |
|
|
|
|
{ |
|
|
|
|
parent::setUp(); |
|
|
|
|
$db = $this->getConnection(); |
|
|
|
|
Yii::$app->set('db', $db); |
|
|
|
|
ActiveRecord::$db = $db; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function tearDown() |
|
|
|
|
{ |
|
|
|
|
parent::tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testGetData() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomerDbTestCase(); |
|
|
|
|
$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('customer1@example.com', $fixture['customer1']['email']); |
|
|
|
|
$this->assertEquals(1, $fixture['customer1']['profile_id']); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['id']); |
|
|
|
|
$this->assertEquals('customer2@example.com', $fixture['customer2']['email']); |
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['profile_id']); |
|
|
|
|
|
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testGetModel() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomerDbTestCase(); |
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(Customer::className(), get_class($fixture->getModel('customer1'))); |
|
|
|
|
$this->assertEquals(1, $fixture->getModel('customer1')->id); |
|
|
|
|
$this->assertEquals('customer1@example.com', $fixture->getModel('customer1')->email); |
|
|
|
|
$this->assertEquals(1, $fixture['customer1']['profile_id']); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(2, $fixture->getModel('customer2')->id); |
|
|
|
|
$this->assertEquals('customer2@example.com', $fixture->getModel('customer2')->email); |
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['profile_id']); |
|
|
|
|
|
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDataDirectory() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomDirectoryDbTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
$directory = $fixture->getModel('directory'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(1, $directory->id); |
|
|
|
|
$this->assertEquals('directory@example.com', $directory['email']); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDataPath() |
|
|
|
|
{ |
|
|
|
|
$test = new DataPathDbTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
$customer = $fixture->getModel('customer1'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(1, $customer->id); |
|
|
|
|
$this->assertEquals('customer1@example.com', $customer['email']); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testTruncate() |
|
|
|
|
{ |
|
|
|
|
$test = new TruncateTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('animals'); |
|
|
|
|
$this->assertEmpty($fixture->data); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see https://github.com/yiisoft/yii2/pull/14343 |
|
|
|
|
*/ |
|
|
|
|
public function testDifferentModelDb() |
|
|
|
|
{ |
|
|
|
|
$fixture = new DifferentDbFixture(); |
|
|
|
|
|
|
|
|
|
$this->assertSame('unique-dsn', $fixture->db->dsn); |
|
|
|
|
$this->assertNotSame('unique-dsn', Yii::$app->getDb()->dsn); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class ProfileFixture extends ActiveFixture |
|
|
|
|
{ |
|
|
|
|
public $modelClass = 'yiiunit\data\ar\Profile'; |
|
|
|
@ -79,6 +188,19 @@ class AnimalFixture extends ActiveFixture
|
|
|
|
|
public $modelClass = 'yiiunit\data\ar\Animal'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class DifferentDbFixture extends ActiveFixture |
|
|
|
|
{ |
|
|
|
|
public $modelClass = 'yiiunit\framework\test\CustomDb'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class CustomDb extends ActiveRecord |
|
|
|
|
{ |
|
|
|
|
public static function getDb() |
|
|
|
|
{ |
|
|
|
|
return new Connection(['dsn' => 'unique-dsn']); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class BaseDbTestCase |
|
|
|
|
{ |
|
|
|
|
use FixtureTrait; |
|
|
|
@ -137,100 +259,3 @@ class TruncateTestCase extends BaseDbTestCase
|
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @group fixture |
|
|
|
|
* @group db |
|
|
|
|
*/ |
|
|
|
|
class ActiveFixtureTest extends DatabaseTestCase |
|
|
|
|
{ |
|
|
|
|
protected $driverName = 'mysql'; |
|
|
|
|
|
|
|
|
|
public function setUp() |
|
|
|
|
{ |
|
|
|
|
parent::setUp(); |
|
|
|
|
$db = $this->getConnection(); |
|
|
|
|
\Yii::$app->set('db', $db); |
|
|
|
|
ActiveRecord::$db = $db; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function tearDown() |
|
|
|
|
{ |
|
|
|
|
parent::tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testGetData() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomerDbTestCase(); |
|
|
|
|
$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('customer1@example.com', $fixture['customer1']['email']); |
|
|
|
|
$this->assertEquals(1, $fixture['customer1']['profile_id']); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['id']); |
|
|
|
|
$this->assertEquals('customer2@example.com', $fixture['customer2']['email']); |
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['profile_id']); |
|
|
|
|
|
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testGetModel() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomerDbTestCase(); |
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(Customer::className(), get_class($fixture->getModel('customer1'))); |
|
|
|
|
$this->assertEquals(1, $fixture->getModel('customer1')->id); |
|
|
|
|
$this->assertEquals('customer1@example.com', $fixture->getModel('customer1')->email); |
|
|
|
|
$this->assertEquals(1, $fixture['customer1']['profile_id']); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(2, $fixture->getModel('customer2')->id); |
|
|
|
|
$this->assertEquals('customer2@example.com', $fixture->getModel('customer2')->email); |
|
|
|
|
$this->assertEquals(2, $fixture['customer2']['profile_id']); |
|
|
|
|
|
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDataDirectory() |
|
|
|
|
{ |
|
|
|
|
$test = new CustomDirectoryDbTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
$directory = $fixture->getModel('directory'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(1, $directory->id); |
|
|
|
|
$this->assertEquals('directory@example.com', $directory['email']); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testDataPath() |
|
|
|
|
{ |
|
|
|
|
$test = new DataPathDbTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('customers'); |
|
|
|
|
$customer = $fixture->getModel('customer1'); |
|
|
|
|
|
|
|
|
|
$this->assertEquals(1, $customer->id); |
|
|
|
|
$this->assertEquals('customer1@example.com', $customer['email']); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function testTruncate() |
|
|
|
|
{ |
|
|
|
|
$test = new TruncateTestCase(); |
|
|
|
|
|
|
|
|
|
$test->setUp(); |
|
|
|
|
$fixture = $test->getFixture('animals'); |
|
|
|
|
$this->assertEmpty($fixture->data); |
|
|
|
|
$test->tearDown(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|