1<?php
2/*
3 *  $Id$
4 *
5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 *
17 * This software consists of voluntary contributions made by many individuals
18 * and is licensed under the LGPL. For more information, see
19 * <http://www.doctrine-project.org>.
20 */
21
22/**
23 * Doctrine_Ticket_912_TestCase
24 *
25 * @package     Doctrine
26 * @author      David Stendardi <david.stendardi@adenclassifieds.com>
27 * @category    Object Relational Mapping
28 * @link        www.doctrine-project.org
29 * @since       1.0
30 * @version     $Revision$
31 */
32class Doctrine_Ticket_912_TestCase extends Doctrine_UnitTestCase {
33
34  /**
35   * prepareData
36   */
37
38    public function prepareData()
39    {
40	    $oResume = new ticket912_Resume;
41	    $oResume->title = 'titre';
42	    $oResume->Person->name = 'David';
43	    $oResume->KnownLanguages[0]->comments = 'foo';
44	    $oResume->KnownLanguages[0]->Language->label = "Enlish";
45	    $oResume->KnownLanguages[0]->Level->label = "Fluent";
46	    $oResume->save();
47    }
48
49    /**
50     * prepareTables
51     */
52
53    public function prepareTables()
54    {
55    	$this->tables = array();
56    	$this->tables[] = 'ticket912_Resume';
57    	$this->tables[] = 'ticket912_Person';
58    	$this->tables[] = 'ticket912_ResumeHasLanguage';
59    	$this->tables[] = 'ticket912_LanguageLevel';
60    	$this->tables[] = 'ticket912_Language';
61
62    	parent :: prepareTables();
63    }
64
65
66    /**
67     * Test the existence expected indexes
68     */
69
70    public function testTicket()
71    {
72        $q = new Doctrine_Query();
73
74        // simple query with deep relations
75        $q->addSelect('Resume.id, Person.id, Person.name, KnownLanguages.id, Level.label, Language.label')
76          ->from('ticket912_Resume Resume')
77          ->leftJoin('Resume.Person Person')
78          ->leftJoin('Resume.KnownLanguages KnownLanguages')
79          ->leftJoin('KnownLanguages.Level Level')
80          ->leftJoin('KnownLanguages.Language Language');
81
82        $aResult = $q->fetchArray();
83
84        // should be setted..
85    	$issetLevel = isset($aResult[0]['KnownLanguages'][0]['Level']);
86        $issetLanguage = isset($aResult[0]['KnownLanguages'][0]['Language']);
87
88        $this->assertTrue($issetLevel);
89        $this->assertTrue($issetLanguage);
90
91    }
92}
93
94
95/**
96 * This class has been auto-generated by the Doctrine ORM Framework
97 */
98
99class ticket912_Resume extends Doctrine_Record
100{
101	/**
102   * setTableDefinition
103   */
104
105  public function setTableDefinition()
106  {
107    $this->setTableName('resume');
108    $this->hasColumn('id', 'integer', 8, array (
109		  'primary' => true,
110		  'autoincrement' => true,
111		  'unsigned' => true,
112		  ));
113
114    $this->hasColumn('person_id', 'integer', 8, array('unsigned' => true));
115    $this->hasColumn('title', 'string', 255);
116  }
117
118  /**
119   * setUp
120   */
121
122  public function setUp()
123  {
124    $this->hasMany('ticket912_ResumeHasLanguage as KnownLanguages', array('local' => 'id', 'foreign' => 'resume_id'));
125
126    $this->hasOne('ticket912_Person as Person', array(
127      'local' => 'person_id',
128      'foreign' => 'id',
129      'onDelete' => 'SET NULL',
130      'onUpdate' => 'CASCADE'
131      ));
132  }
133}
134
135/**
136 *  First level one to one relation class Language
137 */
138class ticket912_Person extends Doctrine_Record
139{
140  /**
141   * setTableDefinition
142   */
143
144  public function setTableDefinition()
145  {
146    $this->setTableName('person');
147    $this->hasColumn('id', 'integer', 8, array (
148      'primary' => true,
149      'autoincrement' => true,
150      'unsigned' => true,
151      ));
152
153    $this->hasColumn('name', 'string', 255, array ());
154  }
155}
156
157
158/**
159 *  Second level one to many relation class ResumeHasLanguageLanguage
160 */
161
162class ticket912_ResumeHasLanguage extends Doctrine_Record
163{
164  /**
165   * setTableDefinition
166   */
167
168  public function setTableDefinition()
169  {
170    $this->setTableName('resume_has_language');
171    $this->hasColumn('id', 'integer', 8, array (
172		  'primary' => true,
173		  'autoincrement' => true,
174		  'unsigned' => true,
175		  ));
176
177    $this->hasColumn('resume_id', 'integer', 8, array (
178		  'notnull' => true,
179		  'unsigned' => true,
180		  ));
181
182    $this->hasColumn('language_id', 'integer', 2, array (
183      'unsigned' => true,
184      ));
185
186    $this->hasColumn('language_level_id', 'integer', 2, array (
187      'unsigned' => true,
188      ));
189
190    $this->hasColumn('comments', 'string', 4000, array ());
191
192  }
193
194  /**
195   * setUp
196   */
197
198  public function setUp()
199  {
200    $this->hasOne('ticket912_Resume as Resume', array('local' => 'resume_id',
201                                  'foreign' => 'id',
202                                  'onDelete' => 'CASCADE',
203                                  'onUpdate' => 'CASCADE'));
204
205    $this->hasOne('ticket912_Language as Language', array('local' => 'language_id',
206                                    'foreign' => 'id',
207                                    'onDelete' => 'CASCADE',
208                                    'onUpdate' => 'CASCADE'));
209
210    $this->hasOne('ticket912_LanguageLevel as Level', array('local' => 'language_level_id',
211                                                  'foreign' => 'id',
212                                                  'onDelete' => 'SET NULL',
213                                                  'onUpdate' => 'CASCADE'));
214  }
215}
216
217
218
219/**
220 *  Third level one to one relation class Language
221 */
222class ticket912_Language extends Doctrine_Record
223{
224  /**
225   * setTableDefinition
226   */
227
228	public function setTableDefinition()
229  {
230  	$this->setTableName('language');
231    $this->hasColumn('id', 'integer', 2, array(
232      'primary' => true,
233      'autoincrement' => true,
234      'unsigned' => true,
235      ));
236
237    $this->hasColumn('label', 'string', 100, array ('notnull' => true));
238  }
239
240  /**
241   * setup
242   */
243
244  public function setUp()
245  {
246    $this->hasMany('ticket912_Resume as Resumes', array('local' => 'id', 'foreign' => 'language_id'));
247    $this->hasMany('ticket912_ResumeHasLanguage as ResumeKnownLanguages', array('local' => 'id', 'foreign' => 'language_id'));
248  }
249}
250
251/**
252 * Third level one to one relation class Language
253 */
254
255class ticket912_LanguageLevel extends Doctrine_Record
256{
257  /**
258   * setTableDefinition
259   */
260
261	public function setTableDefinition()
262  {
263    $this->setTableName('language_level');
264    $this->hasColumn('id', 'integer', 2, array (
265		  'primary' => true,
266		  'autoincrement' => true,
267		  'unsigned' => true,
268		  ));
269
270    $this->hasColumn('label', 'string', 100, array ('notnull' => true));
271  }
272
273  /**
274   * setUp
275   */
276
277  public function setUp()
278  {
279    $this->hasMany('ticket912_ResumeHasLanguage as ResumeKnownLanguages', array(
280      'local'   => 'id',
281      'foreign' => 'language_level_id'));
282  }
283}