public function testSetUp() { $this->assertTrue(Propel::isInstancePoolingEnabled()); $this->assertEquals(2, count($this->author->getBooks())); $this->assertEquals(2, $this->author->countBooks()); }
/** * This tests to see whether modified objects are being silently overwritten by calls to fk accessor methods. * @link http://propel.phpdb.org/trac/ticket/509#comment:5 */ public function testModifiedObjectOverwrite() { BookstoreDataPopulator::populate(); $author = new Author(); $author->setFirstName("John"); $author->setLastName("Public"); $books = $author->getBooks(); // empty, of course $this->assertEquals(0, count($books), "Expected empty collection."); $book = new Book(); $book->setTitle("A sample book"); $book->setISBN("INITIAL ISBN"); $author->addBook($book); $author->save(); $book->setISBN("MODIFIED ISBN"); $books = $author->getBooks(); $this->assertEquals(1, count($books), "Expected 1 book."); $this->assertSame($book, $books[0], "Expected the same object to be returned by fk accessor."); $this->assertEquals("MODIFIED ISBN", $books[0]->getISBN(), "Expected the modified value NOT to have been overwritten."); }
public function testSetterOneToManyReplacesOldObjectsByNewObjects() { // Ensure no data BookQuery::create()->deleteAll(); AuthorQuery::create()->deleteAll(); $books = new ObjectCollection(); foreach (array('foo', 'bar') as $title) { $b = new Book(); $b->setTitle($title); $b->setISBN('FA404'); $books[] = $b; } $a = new Author(); $a->setFirstName('Chuck'); $a->setLastName('Norris'); $a->setBooks($books); $a->save(); $books = $a->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); $b->setISBN('FA404'); $books[] = $b; } $a->setBooks($books); $a->save(); $books = $a->getBooks(); $this->assertEquals('bam', $books[0]->getTitle()); $this->assertEquals('bom', $books[1]->getTitle()); $this->assertEquals(1, AuthorQuery::create()->count()); // the replaced book are still there because the PK is not required $this->assertEquals(4, BookQuery::create()->count()); }
public function testDeletedBookDisappears() { $this->markTestSkipped(); $a = new Author(); $a->setFirstName("Douglas"); $a->setLastName("Adams"); $b1 = new Book(); $b1->setTitle("The Hitchhikers Guide To The Galaxy"); $b1->setISBN('FA404-1'); $a->addBook($b1); $b2 = new Book(); $b2->setTitle("The Restaurant At The End Of The Universe"); $b1->setISBN('FA404-2'); $a->addBook($b2); /* As you cannot write $a->remove($b2), you have to delete $b2 directly. */ /* All objects unsaved. As of revision 851, this circumvents the $colBooks cache. Anyway, fails because getBooks() never checks if a colBooks entry has been deleted. */ $this->assertEquals(2, count($a->getBooks())); $b2->delete(); $this->assertEquals(1, count($a->getBooks())); /* Even if we had saved everything before and the delete() had actually updated the DB, the $b2 would still be a "zombie" in $a's $colBooks field. */ }
public function testSetterOneToManyReplacesOldObjectsByNewObjects() { // Ensure no data BookQuery::create()->deleteAll(); AuthorQuery::create()->deleteAll(); $books = new ObjectCollection(); foreach (array('foo', 'bar') as $title) { $b = new Book(); $b->setTitle($title); $books[] = $b; } $a = new Author(); $a->setBooks($books); $a->save(); $books = $a->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; } $a->setBooks($books); $a->save(); $books = $a->getBooks(); $this->assertEquals('bam', $books[0]->getTitle()); $this->assertEquals('bom', $books[1]->getTitle()); $this->assertEquals(1, AuthorQuery::create()->count()); $this->assertEquals(2, BookQuery::create()->count()); }
public function testRemoveObjectOneToMany() { BookQuery::create()->deleteAll(); AuthorQuery::create()->deleteAll(); $book = new Book(); $book->setISBN('012345'); $book->setTitle('Propel Book'); $book2 = new Book(); $book2->setISBN('6789'); $book2->setTitle('Propel2 Book'); $author = new Author(); $author->setFirstName('François'); $author->setLastName('Z'); $author->addBook($book); $author->addBook($book2); $this->assertCount(2, $author->getBooks()); $author->removeBook($book); $books = $author->getBooks(); $this->assertCount(1, $books); $this->assertEquals('Propel2 Book', $books->getFirst()->getTitle()); $author->save(); $book->save(); $book2->save(); $this->assertEquals(2, BookQuery::create()->count(), 'Two Book'); $this->assertEquals(1, AuthorQuery::create()->count(), 'One Author'); $this->assertEquals(1, BookQuery::create()->filterByAuthor($author)->count()); $author->addBook($book); $author->save(); $this->assertEquals(2, BookQuery::create()->filterByAuthor($author)->count()); $author->removeBook($book2); $author->save(); $this->assertEquals(1, BookQuery::create()->filterByAuthor($author)->count()); $this->assertEquals(2, BookQuery::create()->count(), 'Two Book because FK is not required so book is not delete when removed from author\'s book collection'); }