作者:RafalFilipe
项目:Propel
public function testFormatALotOfResults()
{
$nbBooks = 50;
$con = Propel::getConnection(BookPeer::DATABASE_NAME);
Propel::disableInstancePooling();
$book = new Book();
for ($i = 0; $i < $nbBooks; $i++) {
$book->clear();
$book->setTitle('BookTest' . $i);
$book->save($con);
}
$stmt = $con->query('SELECT * FROM book');
$formatter = new PropelOnDemandFormatter();
$formatter->init(new ModelCriteria('bookstore', 'Book'));
$books = $formatter->format($stmt);
$this->assertTrue($books instanceof PropelOnDemandCollection, 'PropelOnDemandFormatter::format() returns a PropelOnDemandCollection');
$this->assertEquals($nbBooks, count($books), 'PropelOnDemandFormatter::format() returns a collection that counts as many rows as the results in the query');
$i = 0;
foreach ($books as $book) {
$this->assertTrue($book instanceof Book, 'PropelOnDemandFormatter::format() returns a collection of Model objects');
$this->assertEquals('BookTest' . $i, $book->getTitle(), 'PropelOnDemandFormatter::format() returns the model objects matching the query');
$i++;
}
Propel::enableInstancePooling();
}
作者:rouff
项目:Propel
public function testClear()
{
$b = new Book();
$b->setNew(false);
$b->clear();
$this->assertTrue($b->isNew(), 'clear() sets the object to new');
$b = new Book();
$b->setDeleted(true);
$b->clear();
$this->assertFalse($b->isDeleted(), 'clear() sets the object to not deleted');
}
作者:norfi
项目:Propel
protected function createBooks($nb = 15, $con = null)
{
BookQuery::create()->deleteAll($con);
$books = new ObjectCollection();
$books->setModel('\\Propel\\Tests\\Bookstore\\Book');
for ($i = 0; $i < $nb; $i++) {
$b = new Book();
$b->setTitle('Book' . $i);
$books[] = $b;
}
$books->save($con);
}
作者:norfi
项目:Propel
public function testSerializeObjectWithCollections()
{
$book1 = new Book();
$book1->setTitle('Foo5');
$book1->setISBN('1234');
$book2 = new Book();
$book2->setTitle('Foo6');
$book2->setISBN('1234');
$author = new Author();
$author->setFirstName('JAne');
$author->addBook($book1);
$author->addBook($book2);
$author->save();
$a = clone $author;
$sa = serialize($a);
$author->clearAllReferences();
$this->assertEquals($author, unserialize($sa));
}
作者:Swissalp
项目:Propel
public function testGroupByArray()
{
$stephenson = new Author();
$stephenson->setFirstName("Neal");
$stephenson->setLastName("Stephenson");
$stephenson->save();
$byron = new Author();
$byron->setFirstName("George");
$byron->setLastName("Byron");
$byron->save();
$phoenix = new Book();
$phoenix->setTitle("Harry Potter and the Order of the Phoenix");
$phoenix->setISBN("043935806X");
$phoenix->setAuthor($stephenson);
$phoenix->save();
$qs = new Book();
$qs->setISBN("0380977427");
$qs->setTitle("Quicksilver");
$qs->setAuthor($stephenson);
$qs->save();
$dj = new Book();
$dj->setISBN("0140422161");
$dj->setTitle("Don Juan");
$dj->setAuthor($stephenson);
$dj->save();
$td = new Book();
$td->setISBN("067972575X");
$td->setTitle("The Tin Drum");
$td->setAuthor($byron);
$td->save();
$authors = AuthorQuery::create()->leftJoinBook()->select(array('FirstName', 'LastName'))->withColumn('COUNT(Book.Id)', 'nbBooks')->groupBy(array('FirstName', 'LastName'))->orderByLastName()->find();
$expectedSql = 'SELECT COUNT(book.id) AS nbBooks, author.first_name AS "FirstName", author.last_name AS "LastName" FROM author LEFT JOIN book ON (author.id=book.author_id) GROUP BY author.first_name,author.last_name ORDER BY author.last_name ASC';
$this->assertEquals($expectedSql, $this->con->getLastExecutedQuery());
$this->assertEquals(2, count($authors));
$this->assertEquals('George', $authors[0]['FirstName']);
$this->assertEquals(1, $authors[0]['nbBooks']);
$this->assertEquals('Neal', $authors[1]['FirstName']);
$this->assertEquals(3, $authors[1]['nbBooks']);
}
作者:norfi
项目:Propel
public function testUtf8()
{
$this->markTestSkipped('Skipped because of weird behavior on some platforms');
$db = Propel::getServiceContainer()->getAdapter(BookPeer::DATABASE_NAME);
$title = "Смерть на брудершафт. Младенец и черт";
// 1234567890123456789012345678901234567
// 1 2 3
$a = new Author();
$a->setFirstName("Б.");
$a->setLastName("АКУНИН");
$p = new Publisher();
$p->setName("Детектив российский, остросюжетная проза");
$b = new Book();
$b->setTitle($title);
$b->setISBN("B-59246");
$b->setAuthor($a);
$b->setPublisher($p);
$b->save();
$b->reload();
$this->assertEquals(37, iconv_strlen($b->getTitle(), 'utf-8'), "Expected 37 characters (not bytes) in title.");
$this->assertTrue(strlen($b->getTitle()) > iconv_strlen($b->getTitle(), 'utf-8'), "Expected more bytes than characters in title.");
}
作者:RafalFilipe
项目:Propel
protected function setUp()
{
parent::setUp();
BookstoreDataPopulator::populate();
$cr = new Criteria();
$cr->add(AuthorPeer::LAST_NAME, "Rowling");
$cr->add(AuthorPeer::FIRST_NAME, "J.K.");
$rowling = AuthorPeer::doSelectOne($cr);
$this->authorId = $rowling->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Philosopher's Stone");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Chamber of Secrets");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Prisoner of Azkaban");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Goblet of Fire");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Half-Blood Prince");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
$book = new Book();
$book->setTitle("Harry Potter and the Deathly Hallows");
$book->setISBN("1234");
$book->setAuthor($rowling);
$book->save();
$this->books[] = $book->getId();
}
作者:dracon
项目:forked-php-orm-benchmar
protected function setUp()
{
parent::setUp();
$book1 = new Book();
$book1->setId(9012);
$book1->setTitle('Don Juan');
$book1->setISBN('0140422161');
$book1->setPrice(12.99);
$book1->setAuthorId(5678);
$book1->setPublisherId(1234);
$book1->resetModified();
$book2 = new Book();
$book2->setId(58);
$book2->setTitle('Harry Potter and the Order of the Phoenix');
$book2->setISBN('043935806X');
$book2->setPrice(10.99);
$book2->resetModified();
$this->coll = new ObjectCollection();
$this->coll->setModel('\\Propel\\Tests\\Bookstore\\Book');
$this->coll[] = $book1;
$this->coll[] = $book2;
}
作者:rouff
项目:Propel
public function testFindOneWithOneToManyCustomOrder()
{
$author1 = new Author();
$author1->setFirstName('AA');
$author2 = new Author();
$author2->setFirstName('BB');
$book1 = new Book();
$book1->setTitle('Aaa');
$book1->setAuthor($author1);
$book1->save();
$book2 = new Book();
$book2->setTitle('Bbb');
$book2->setAuthor($author2);
$book2->save();
$book3 = new Book();
$book3->setTitle('Ccc');
$book3->setAuthor($author1);
$book3->save();
$authors = AuthorQuery::create()->setFormatter(ModelCriteria::FORMAT_ARRAY)->leftJoin('Propel\\Tests\\Bookstore\\Author.Book')->orderBy('Book.Title')->with('Book')->find();
$this->assertEquals(2, count($authors), 'with() used on a many-to-many doesn\'t change the main object count');
}
作者:kalaspuffa
项目:php-orm-benchmar
public function testFindPkDoesNotCallPreSelectWhenUsingInstancePool()
{
$b = new Book();
$b->setTitle('foo');
$b->setISBN('FA404');
$b->save();
$q = new mySecondBookQuery();
$this->assertFalse($q::$preSelectWasCalled);
$q->findPk($b->getId());
$this->assertFalse($q::$preSelectWasCalled);
}
作者:kalaspuffa
项目:php-orm-benchmar
public static function populate($con = null)
{
if ($con === null) {
$con = Propel::getServiceContainer()->getConnection(BookTableMap::DATABASE_NAME);
}
$con->beginTransaction();
// Add publisher records
// ---------------------
$scholastic = new Publisher();
$scholastic->setName("Scholastic");
// do not save, will do later to test cascade
$morrow = new Publisher();
$morrow->setName("William Morrow");
$morrow->save($con);
$morrow_id = $morrow->getId();
$penguin = new Publisher();
$penguin->setName("Penguin");
$penguin->save();
$penguin_id = $penguin->getId();
$vintage = new Publisher();
$vintage->setName("Vintage");
$vintage->save($con);
$vintage_id = $vintage->getId();
$rowling = new Author();
$rowling->setFirstName("J.K.");
$rowling->setLastName("Rowling");
// no save()
$stephenson = new Author();
$stephenson->setFirstName("Neal");
$stephenson->setLastName("Stephenson");
$stephenson->save($con);
$stephenson_id = $stephenson->getId();
$byron = new Author();
$byron->setFirstName("George");
$byron->setLastName("Byron");
$byron->save($con);
$byron_id = $byron->getId();
$grass = new Author();
$grass->setFirstName("Gunter");
$grass->setLastName("Grass");
$grass->save($con);
$grass_id = $grass->getId();
$phoenix = new Book();
$phoenix->setTitle("Harry Potter and the Order of the Phoenix");
$phoenix->setISBN("043935806X");
$phoenix->setAuthor($rowling);
$phoenix->setPublisher($scholastic);
$phoenix->setPrice(10.99);
$phoenix->save($con);
$phoenix_id = $phoenix->getId();
$qs = new Book();
$qs->setISBN("0380977427");
$qs->setTitle("Quicksilver");
$qs->setPrice(11.99);
$qs->setAuthor($stephenson);
$qs->setPublisher($morrow);
$qs->save($con);
$qs_id = $qs->getId();
$dj = new Book();
$dj->setISBN("0140422161");
$dj->setTitle("Don Juan");
$dj->setPrice(12.99);
$dj->setAuthor($byron);
$dj->setPublisher($penguin);
$dj->save($con);
$dj_id = $dj->getId();
$td = new Book();
$td->setISBN("067972575X");
$td->setTitle("The Tin Drum");
$td->setPrice(13.99);
$td->setAuthor($grass);
$td->setPublisher($vintage);
$td->save($con);
$td_id = $td->getId();
$r1 = new Review();
$r1->setBook($phoenix);
$r1->setReviewedBy("Washington Post");
$r1->setRecommended(true);
$r1->setReviewDate(time());
$r1->save($con);
$r1_id = $r1->getId();
$r2 = new Review();
$r2->setBook($phoenix);
$r2->setReviewedBy("New York Times");
$r2->setRecommended(false);
$r2->setReviewDate(time());
$r2->save($con);
$r2_id = $r2->getId();
$blob_path = _LOB_SAMPLE_FILE_PATH . '/tin_drum.gif';
$clob_path = _LOB_SAMPLE_FILE_PATH . '/tin_drum.txt';
$m1 = new Media();
$m1->setBook($td);
$m1->setCoverImage(file_get_contents($blob_path));
// CLOB is broken in PDO OCI, see http://pecl.php.net/bugs/bug.php?id=7943
if (get_class(Propel::getServiceContainer()->getAdapter()) != "OracleAdapter") {
$m1->setExcerpt(file_get_contents($clob_path));
}
$m1->save($con);
// Add book list records
// ---------------------
//.........这里部分代码省略.........
作者:diside
项目:Propel
/**
* @dataProvider toCsvDataProvider
*/
public function testfromCSV($expected)
{
$book = new Book();
$book->fromCSV($expected);
// FIXME: fromArray() doesn't take related objects into account
$book->resetModified();
$author = $this->book->getAuthor();
$this->book->setAuthor(null);
$this->book->setAuthorId($author->getId());
$publisher = $this->book->getPublisher();
$this->book->setPublisher(null);
$this->book->setPublisherId($publisher->getId());
$this->book->resetModified();
$this->assertEquals($this->book, $book);
}
作者:kalaspuffa
项目:php-orm-benchmar
public function testFindOneWithEmptyLeftJoin()
{
// save a book with no author
$b = new Book();
$b->setTitle('Foo');
$b->setISBN('FA404');
$b->save();
$c = new ModelCriteria('bookstore', 'Propel\\Tests\\Bookstore\\Book');
$c->setFormatter(ModelCriteria::FORMAT_ON_DEMAND);
$c->where('Propel\\Tests\\Bookstore\\Book.Title = ?', 'Foo');
$c->leftJoin('Propel\\Tests\\Bookstore\\Book.Author');
$c->with('Author');
$c->limit(1);
$con = Propel::getServiceContainer()->getConnection(BookTableMap::DATABASE_NAME);
$books = $c->find($con);
foreach ($books as $book) {
break;
}
$count = $con->getQueryCount();
$author = $book->getAuthor();
$this->assertNull($author, 'Related object is not hydrated if empty');
}
作者:rouff
项目:Propel
public function testSetterCollectionReplacesOldObjectsByNewObjects()
{
// Ensure no data
BookQuery::create()->deleteAll();
BookClubListQuery::create()->deleteAll();
BookListRelQuery::create()->deleteAll();
$books = new ObjectCollection();
foreach (array('foo', 'bar') as $title) {
$b = new Book();
$b->setTitle($title);
$books[] = $b;
}
$bookClubList = new BookClubList();
$bookClubList->setBooks($books);
$bookClubList->save();
$books = $bookClubList->getBooks();
$this->assertEquals('foo', $books[0]->getTitle());
$this->assertEquals('bar', $books[1]->getTitle());
$books = new ObjectCollection();
foreach (array('bam', 'bom') as $title) {
$b = new Book();
$b->setTitle($title);
$books[] = $b;
}
$bookClubList->setBooks($books);
$bookClubList->save();
$books = $bookClubList->getBooks();
$this->assertEquals('bam', $books[0]->getTitle());
$this->assertEquals('bom', $books[1]->getTitle());
$this->assertEquals(1, BookClubListQuery::create()->count());
$this->assertEquals(2, BookListRelQuery::create()->count());
$this->assertEquals(4, BookQuery::create()->count());
}
作者:nald
项目:cyberde
public function testFindPkComplexAddsObjectToInstancePool()
{
$b = new Book();
$b->setTitle('foo');
$b->setISBN('FA404');
$b->save($this->con);
BookTableMap::clearInstancePool();
BookQuery::create('b')->findPk($b->getId(), $this->con);
$count = $this->con->getQueryCount();
$book = BookQuery::create()->findPk($b->getId(), $this->con);
$this->assertEquals($b, $book);
$this->assertEquals($count, $this->con->getQueryCount());
}
作者:robin85
项目:Propel
/**
* Primary key should differ
*/
public function testSavedObjectCreatesDifferentHashForIdenticalObjects()
{
$book1 = new Book();
$book1->setTitle('Foo5');
$book1->setISBN('1234');
$author1 = new Author();
$author1->setFirstName('JAne');
$author1->setLastName('JAne');
$author1->addBook($book1);
$author1->save();
$author2 = new Author();
$author2->setFirstName('JAne');
$author2->setLastName('JAne');
$author2->addBook($book1);
$author2->save();
$this->assertNotEquals($author1->hashCode(), $author2->hashCode());
}
作者:norfi
项目:Propel
public function testDoValidate_CustomValidator()
{
$book = new Book();
$book->setTitle("testDoValidate_CustomValidator");
// (valid)
$book->setISBN("Foo.Bar.Baz");
// (invalid)
$res = $book->validate();
$this->assertFalse($res, "Expected validation to fail.");
$failures = $book->getValidationFailures();
$this->assertEquals(1, count($failures), "Expected 1 column to fail validation.");
$this->assertEquals(array(BookPeer::ISBN), array_keys($failures), "Expected EMAIL to fail validation.");
$validator = $failures[BookPeer::ISBN]->getValidator();
$this->assertInstanceOf('Propel\\Tests\\Helpers\\Bookstore\\Validator\\ISBNValidator', $validator, "Expected validator that failed to be ISBNValidator");
}
作者:norfi
项目:Propel
/**
* Tests the Base[Object]::toArray() method
*/
public function testToArray()
{
$types = array(BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM);
$book = new Book();
$book->fromArray(array('Title' => 'Harry Potter and the Order of the Phoenix', 'ISBN' => '043935806X'));
$expecteds = array(BasePeer::TYPE_PHPNAME => array('Title' => 'Harry Potter and the Order of the Phoenix', 'ISBN' => '043935806X'), BasePeer::TYPE_STUDLYPHPNAME => array('title' => 'Harry Potter and the Order of the Phoenix', 'iSBN' => '043935806X'), BasePeer::TYPE_COLNAME => array('book.TITLE' => 'Harry Potter and the Order of the Phoenix', 'book.ISBN' => '043935806X'), BasePeer::TYPE_FIELDNAME => array('title' => 'Harry Potter and the Order of the Phoenix', 'isbn' => '043935806X'), BasePeer::TYPE_NUM => array('1' => 'Harry Potter and the Order of the Phoenix', '2' => '043935806X'));
foreach ($types as $type) {
$expected = $expecteds[$type];
$result = $book->toArray($type);
// remove ID since its autoincremented at each test iteration
$result = array_slice($result, 1, 2, true);
$this->assertEquals($expected, $result, 'expected was: ' . print_r($expected, 1) . 'but toArray() returned ' . print_r($result, 1));
}
}
作者:bondarovic
项目:Propel
public function testToArrayWithForeignObjects()
{
$types = [TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME, TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM];
$review = new Review();
$review->setRecommended(true)->setReviewedBy('Someone')->setReviewDate(null);
$book = new Book();
$book->setTitle('Harry Potter and the Order of the Phoenix')->setISBN('043935806X')->addReview($review)->setPrice(10);
$expecteds = array(TableMap::TYPE_PHPNAME => ['Id' => null, 'Title' => 'Harry Potter and the Order of the Phoenix', 'ISBN' => '043935806X', 'Price' => 10.0, 'PublisherId' => null, 'AuthorId' => null, 'Reviews' => [['Id' => null, 'ReviewedBy' => 'Someone', 'ReviewDate' => null, 'Recommended' => true, 'Status' => null, 'BookId' => null, 'Book' => '*RECURSION*']]], TableMap::TYPE_CAMELNAME => array('id' => null, 'title' => 'Harry Potter and the Order of the Phoenix', 'iSBN' => '043935806X', 'price' => 10.0, 'publisherId' => null, 'authorId' => null, 'reviews' => [['id' => null, 'reviewedBy' => 'Someone', 'reviewDate' => null, 'recommended' => true, 'status' => null, 'bookId' => null, 'book' => '*RECURSION*']]), TableMap::TYPE_COLNAME => array('book.ID' => null, 'book.TITLE' => 'Harry Potter and the Order of the Phoenix', 'book.ISBN' => '043935806X', 'book.PRICE' => 10.0, 'book.PUBLISHER_ID' => null, 'book.AUTHOR_ID' => null, 'Reviews' => [['review.ID' => null, 'review.REVIEWED_BY' => 'Someone', 'review.REVIEW_DATE' => null, 'review.RECOMMENDED' => true, 'review.STATUS' => null, 'review.BOOK_ID' => null, 'Book' => '*RECURSION*']]), TableMap::TYPE_FIELDNAME => array('id' => null, 'title' => 'Harry Potter and the Order of the Phoenix', 'isbn' => '043935806X', 'price' => 10.0, 'publisher_id' => null, 'author_id' => null, 'reviews' => [['id' => null, 'reviewed_by' => 'Someone', 'review_date' => null, 'recommended' => true, 'status' => null, 'book_id' => null, 'book' => '*RECURSION*']]), TableMap::TYPE_NUM => array('0' => null, '1' => 'Harry Potter and the Order of the Phoenix', '2' => '043935806X', '3' => 10.0, '4' => null, '5' => null, 'Reviews' => [['0' => null, '1' => 'Someone', '2' => null, '3' => 1, '4' => null, '5' => null, 'Book' => '*RECURSION*']]));
foreach ($types as $type) {
$expected = $expecteds[$type];
$result = $book->toArray($type, true, [], true);
$this->assertEquals($expected, $result, 'expected was: ' . print_r($expected, 1) . 'but toArray() returned ' . print_r($result, 1));
}
}
作者:kalaspuffa
项目:php-orm-benchmar
public function testNewObjectsGetLostOnJoin()
{
/* While testNewObjectsAvailableWhenSaveNotCalled passed as of
revision 851, in this case we call getBooksJoinPublisher() instead
of just getBooks(). get...Join...() does not contain the check whether
the current object is new, it will always consult the DB and lose the
new objects entirely. Thus the test fails. (At least for Propel 1.2 ?!?) */
$this->markTestSkipped();
$a = new Author();
$a->setFirstName("Douglas");
$a->setLastName("Adams");
$p = new Publisher();
$p->setName('Pan Books Ltd.');
$b1 = new Book();
$b1->setTitle("The Hitchhikers Guide To The Galaxy");
$b1->setISBN('FA404-1');
$b1->setPublisher($p);
// uh... did not check that :^)
$a->addBook($b1);
$b2 = new Book();
$b2->setTitle("The Restaurant At The End Of The Universe");
$b1->setISBN('FA404-2');
$b2->setPublisher($p);
$a->addBook($b2);
$books = $a->getBooksJoinPublisher();
$this->assertEquals(2, count($books));
$this->assertContains($b1, $books);
$this->assertContains($b2, $books);
$a->save();
$this->assertFalse($b1->isNew());
$this->assertFalse($b2->isNew());
}