162 lines
6 KiB
PHP
162 lines
6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of the PropelBundle package.
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*
|
|
* @license MIT License
|
|
*/
|
|
|
|
namespace Propel\PropelBundle\Tests\DataFixtures\Loader;
|
|
|
|
use Propel\PropelBundle\Tests\DataFixtures\TestCase;
|
|
use Propel\PropelBundle\DataFixtures\Loader\YamlDataLoader;
|
|
|
|
/**
|
|
* @author William Durand <william.durand1@gmail.com>
|
|
* @author Toni Uebernickel <tuebernickel@gmail.com>
|
|
*/
|
|
class YamlDataLoaderTest extends TestCase
|
|
{
|
|
public function testYamlLoadOneToMany()
|
|
{
|
|
$fixtures = <<<YAML
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthor:
|
|
BookAuthor_1:
|
|
id: '1'
|
|
name: 'A famous one'
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\Book:
|
|
Book_1:
|
|
id: '1'
|
|
name: 'An important one'
|
|
author_id: BookAuthor_1
|
|
|
|
YAML;
|
|
$filename = $this->getTempFile($fixtures);
|
|
|
|
$loader = new YamlDataLoader(__DIR__.'/../../Fixtures/DataFixtures/Loader');
|
|
$loader->load(array($filename), 'default');
|
|
|
|
$books = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookPeer::doSelect(new \Criteria(), $this->con);
|
|
$this->assertCount(1, $books);
|
|
|
|
$book = $books[0];
|
|
$this->assertInstanceOf('Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthor', $book->getBookAuthor());
|
|
}
|
|
|
|
public function testYamlLoadManyToMany()
|
|
{
|
|
$schema = <<<XML
|
|
<database name="default" package="vendor.bundles.Propel.PropelBundle.Tests.Fixtures.DataFixtures.Loader" namespace="Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader" defaultIdMethod="native">
|
|
<table name="book" phpName="YamlManyToManyBook">
|
|
<column name="id" type="integer" primaryKey="true" />
|
|
<column name="name" type="varchar" size="255" />
|
|
</table>
|
|
|
|
<table name="author" phpName="YamlManyToManyAuthor">
|
|
<column name="id" type="integer" primaryKey="true" />
|
|
<column name="name" type="varchar" size="255" />
|
|
</table>
|
|
|
|
<table name="book_author" phpName="YamlManyToManyBookAuthor">
|
|
<column name="book_id" type="integer" required="true" primaryKey="true" />
|
|
<column name="author_id" type="integer" required="true" primaryKey="true" />
|
|
|
|
<foreign-key foreignTable="book" phpName="Book" onDelete="CASCADE" onUpdate="CASCADE">
|
|
<reference local="book_id" foreign="id" />
|
|
</foreign-key>
|
|
<foreign-key foreignTable="author" phpName="Author" onDelete="CASCADE" onUpdate="CASCADE">
|
|
<reference local="author_id" foreign="id" />
|
|
</foreign-key>
|
|
</table>
|
|
</database>
|
|
XML;
|
|
|
|
$fixtures = <<<YAML
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyAuthor:
|
|
Author_1:
|
|
name: 'A famous one'
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBook:
|
|
Book_1:
|
|
name: 'An important one'
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBookAuthor:
|
|
BookAuthor_1:
|
|
book_id: Book_1
|
|
author_id: Author_1
|
|
|
|
YAML;
|
|
|
|
$filename = $this->getTempFile($fixtures);
|
|
|
|
$builder = new \PropelQuickBuilder();
|
|
$builder->setSchema($schema);
|
|
$con = $builder->build();
|
|
|
|
$loader = new YamlDataLoader(__DIR__.'/../../Fixtures/DataFixtures/Loader');
|
|
$loader->load(array($filename), 'default');
|
|
|
|
$books = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBookPeer::doSelect(new \Criteria(), $con);
|
|
$this->assertCount(1, $books);
|
|
$this->assertInstanceOf('Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBook', $books[0]);
|
|
|
|
$authors = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyAuthorPeer::doSelect(new \Criteria(), $con);
|
|
$this->assertCount(1, $authors);
|
|
$this->assertInstanceOf('Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyAuthor', $authors[0]);
|
|
|
|
$bookAuthors = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBookAuthorPeer::doSelect(new \Criteria(), $con);
|
|
$this->assertCount(1, $bookAuthors);
|
|
$this->assertInstanceOf('Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\YamlManyToManyBookAuthor', $bookAuthors[0]);
|
|
}
|
|
|
|
public function testLoadSelfReferencing()
|
|
{
|
|
$fixtures = <<<YAML
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthor:
|
|
BookAuthor_1:
|
|
id: '1'
|
|
name: 'to be announced'
|
|
BookAuthor_2:
|
|
id: BookAuthor_1
|
|
name: 'A famous one'
|
|
|
|
YAML;
|
|
$filename = $this->getTempFile($fixtures);
|
|
|
|
$loader = new YamlDataLoader(__DIR__.'/../../Fixtures/DataFixtures/Loader');
|
|
$loader->load(array($filename), 'default');
|
|
|
|
$books = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookPeer::doSelect(new \Criteria(), $this->con);
|
|
$this->assertCount(0, $books);
|
|
|
|
$authors = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthorPeer::doSelect(new \Criteria(), $this->con);
|
|
$this->assertCount(1, $authors);
|
|
|
|
$author = $authors[0];
|
|
$this->assertEquals('A famous one', $author->getName());
|
|
}
|
|
|
|
public function testLoaderWithPhp()
|
|
{
|
|
$fixtures = <<<YAML
|
|
Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthor:
|
|
BookAuthor_1:
|
|
id: '1'
|
|
name: <?php echo "to be announced"; ?>
|
|
|
|
YAML;
|
|
$filename = $this->getTempFile($fixtures);
|
|
|
|
$loader = new YamlDataLoader(__DIR__.'/../../Fixtures/DataFixtures/Loader');
|
|
$loader->load(array($filename), 'default');
|
|
|
|
$books = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookPeer::doSelect(new \Criteria(), $this->con);
|
|
$this->assertCount(0, $books);
|
|
|
|
$authors = \Propel\PropelBundle\Tests\Fixtures\DataFixtures\Loader\BookAuthorPeer::doSelect(new \Criteria(), $this->con);
|
|
$this->assertCount(1, $authors);
|
|
|
|
$author = $authors[0];
|
|
$this->assertEquals('to be announced', $author->getName());
|
|
}
|
|
}
|