1<?php
2/*
3 * Test to ensure LocalKey Relations allow 0 for id value
4 */
5class Doctrine_Ticket_982_TestCase extends Doctrine_UnitTestCase
6{
7    public function prepareTables()
8    {
9        $this->tables = array();
10        $this->tables[] = "T982_MyModel";
11        parent::prepareTables();
12    }
13
14    public function prepareData()
15    {
16	  $myModelZero = new T982_MyModel();
17	  $myModelZero->id = 0;
18	  $myModelZero->parentid = 0;
19      $myModelZero->save();
20      $this->assertIdentical(0, $myModelZero->id);
21
22      $this->myModelOne = new T982_MyModel();
23	  $this->myModelOne->id = 1;
24	  $this->myModelOne->parentid = 0;
25      $this->myModelOne->save();
26
27      $this->myModelTwo = new T982_MyModel();
28	  $this->myModelTwo->id = 2;
29	  $this->myModelTwo->parentid = 1;
30      $this->myModelTwo->save();
31    }
32
33    public function testTicket()
34    {
35        $this->conn->getTable('T982_MyModel')->clear();
36
37        $myModelZero = $this->conn->getTable('T982_MyModel')->find(0);
38
39		$this->assertIdentical($myModelZero->id, '0');
40		$this->assertIdentical($myModelZero->parentid, '0');
41		$this->assertTrue($myModelZero->parent->exists());
42		$this->assertTrue(ctype_digit($myModelZero->parent->id));
43		$this->assertIdentical($myModelZero, $myModelZero->parent);
44		$this->assertIdentical($myModelZero->parent->id, '0');
45		$this->assertIdentical($myModelZero->parent->parentid, '0');
46
47        $myModelOne = $this->conn->getTable('T982_MyModel')->find(1);
48
49        $this->assertIdentical($myModelOne->id, '1');
50		$this->assertIdentical($myModelOne->parentid, '0');
51		$this->assertTrue($myModelOne->parent->exists());
52		$this->assertTrue(ctype_digit($myModelOne->parent->id));
53		$this->assertIdentical($myModelOne->parent->id, '0');
54		$this->assertIdentical($myModelOne->parent->parentid, '0');
55
56		$myModelTwo = $this->conn->getTable('T982_MyModel')->find(2);
57
58        $this->assertIdentical($myModelTwo->id, '2');
59		$this->assertIdentical($myModelTwo->parentid, '1');
60		$this->assertIdentical($myModelTwo->parent->id, '1');
61		$this->assertIdentical($myModelTwo->parent->parentid, '0');
62
63   }
64}
65
66class T982_MyModel extends Doctrine_Record
67{
68    public function setTableDefinition()
69    {
70        $this->hasColumn('id', 'integer', 4, array('primary' => true, 'notnull' => true));
71        $this->hasColumn('parentid', 'integer', 4, array('notnull' => true));
72    }
73
74    public function setUp()
75    {
76        $this->hasOne('T982_MyModel as parent', array('local' => 'parentid', 'foreign' => 'id'));
77    }
78
79}