Author: guilhermeblanco Date: 2008-09-02 06:30:41 +0100 (Tue, 02 Sep 2008) New Revision: 4870
Added: branches/1.0/tests/Ticket/1381TestCase.php Modified: branches/1.0/tests/run.php Log: Added coverage to tickets #1381 and also #1395, which are the same. Unable to reproduce the issue. Added: branches/1.0/tests/Ticket/1381TestCase.php =================================================================== --- branches/1.0/tests/Ticket/1381TestCase.php (rev 0) +++ branches/1.0/tests/Ticket/1381TestCase.php 2008-09-02 05:30:41 UTC (rev 4870) @@ -0,0 +1,160 @@ +<?php +/* + * $Id$ + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * and is licensed under the LGPL. For more information, see + * <http://www.phpdoctrine.org>. + */ + +/** + * Doctrine_Ticket_1381_TestCase + * + * @package Doctrine + * @author Konsta Vesterinen <[EMAIL PROTECTED]> + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.org + * @since 1.0 + * @version $Revision$ + */ +class Doctrine_Ticket_1381_TestCase extends Doctrine_UnitTestCase +{ + public function prepareTables() + { + $this->tables[] = 'T1381_Comment'; + $this->tables[] = 'T1381_Article'; + + parent::prepareTables(); + } + + + public function prepareData() + { + $a = new T1381_Article(); + $a->title = 'When cleanData worked as expected!'; + $a->save(); + + $c = new T1381_Comment(); + $c->article_id = $a->id; + $c->body = 'Yeah! It will work one day.'; + $c->save(); + + $c = new T1381_Comment(); + $c->article_id = $a->id; + $c->body = 'It will!'; + $c->save(); + + // Cleaning up IdentityMap + Doctrine::getTable('T1381_Article')->clear(); + Doctrine::getTable('T1381_Comment')->clear(); + } + + public function testTicket() + { + try { + // Now we fetch with data we want (it seems it overrides calculates columns of already fetched objects) + $dql = 'SELECT c.*, a.* FROM T1381_Comment c INNER JOIN c.T1381_Article a'; + $items = Doctrine_Query::create()->query($dql, array(), Doctrine::HYDRATE_ARRAY); + + // This should result in false, since we didn't fetch for this column + $this->assertFalse(array_key_exists('ArticleTitle', $items[0]['T1381_Article'])); + + // We fetch for data including new columns + $dql = 'SELECT c.*, a.title as ArticleTitle FROM T1381_Comment c INNER JOIN c.T1381_Article a WHERE c.id = ?'; + $items = Doctrine_Query::create()->query($dql, array(1), Doctrine::HYDRATE_ARRAY); + $comment = $items[0]; + + $this->assertTrue(array_key_exists('ArticleTitle', $comment['T1381_Article'])); + } catch (Doctrine_Exception $e) { + $this->fail($e->getMessage()); + } + } + + + public function testTicketInverse() + { + try { + // We fetch for data including new columns + $dql = 'SELECT c.*, a.title as ArticleTitle FROM T1381_Comment c INNER JOIN c.T1381_Article a WHERE c.id = ?'; + $items = Doctrine_Query::create()->query($dql, array(1), Doctrine::HYDRATE_ARRAY); + $comment = $items[0]; + + $this->assertTrue(array_key_exists('ArticleTitle', $comment['T1381_Article'])); + + // Now we fetch with data we want (it seems it overrides calculates columns of already fetched objects) + $dql = 'SELECT c.*, a.* FROM T1381_Comment c INNER JOIN c.T1381_Article a'; + $items = Doctrine_Query::create()->query($dql, array(), Doctrine::HYDRATE_ARRAY); + + // This should result in false, since we didn't fetch for this column + $this->assertFalse(array_key_exists('ArticleTitle', $items[0]['T1381_Article'])); + + // Assert that our existent component still has the column, even after new hydration on same object + $this->assertTrue(array_key_exists('ArticleTitle', $comment['T1381_Article'])); + + // Fetch including new columns again + $dql = 'SELECT c.id, a.*, a.id as ArticleTitle FROM T1381_Comment c INNER JOIN c.T1381_Article a'; + $items = Doctrine_Query::create()->query($dql, array(), Doctrine::HYDRATE_ARRAY); + + // Assert that new calculated column with different content do not override the already fetched one + $this->assertTrue(array_key_exists('ArticleTitle', $items[0]['T1381_Article'])); + + // Assert that our existent component still has the column, even after new hydration on same object + $this->assertTrue(array_key_exists('ArticleTitle', $comment['T1381_Article'])); + $this->assertTrue($comment['T1381_Article']['ArticleTitle'], 'When cleanData worked as expected!'); + } catch (Doctrine_Exception $e) { + $this->fail($e->getMessage()); + } + } +} + + +class T1381_Article extends Doctrine_Record +{ + public function setTableDefinition() { + $this->hasColumn('id', 'integer', null, array('primary' => true, 'autoincrement' => true)); + $this->hasColumn('title', 'string', 255, array('notnull' => true)); + } + + public function setUp() { + $this->hasMany( + 'T1381_Comment', + array( + 'local' => 'id', + 'foreign' => 'article_id' + ) + ); + } +} + + +class T1381_Comment extends Doctrine_Record +{ + public function setTableDefinition() { + $this->hasColumn('id', 'integer', null, array('primary' => true, 'autoincrement' => true)); + $this->hasColumn('body', 'string', null, array('notnull' => true)); + $this->hasColumn('article_id', 'integer', null, array('notnull' => true)); + } + + public function setUp() { + $this->hasOne( + 'T1381_Article', + array( + 'local' => 'article_id', + 'foreign' => 'id' + ) + ); + } +} \ No newline at end of file Modified: branches/1.0/tests/run.php =================================================================== --- branches/1.0/tests/run.php 2008-09-02 04:25:06 UTC (rev 4869) +++ branches/1.0/tests/run.php 2008-09-02 05:30:41 UTC (rev 4870) @@ -124,6 +124,7 @@ $tickets->addTestCase(new Doctrine_Ticket_1335_TestCase()); $tickets->addTestCase(new Doctrine_Ticket_1365_TestCase()); $tickets->addTestCase(new Doctrine_Ticket_1372_TestCase()); +$tickets->addTestCase(new Doctrine_Ticket_1381_TestCase()); $tickets->addTestCase(new Doctrine_Ticket_1383_TestCase()); $tickets->addTestCase(new Doctrine_Ticket_1390_TestCase()); $test->addTestCase($tickets); --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "doctrine-svn" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.co.uk/group/doctrine-svn?hl=en-GB -~----------~----~----~----~------~----~------~--~---
