Trac

Ticket #734: CopyTestCase.php

File CopyTestCase.php, 4.4 kB (added by cferry, 5 months ago)

Copy and RemoveQueryPart? Test

Line 
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.phpdoctrine.com>.
20  */
21
22 /**
23  * Doctrine_Query_TestCase
24  *
25  * @package     Doctrine
26  * @author      Cedric FERRY <cferry@emisfr.com>
27  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
28  * @category    Object Relational Mapping
29  * @link        www.phpdoctrine.com
30  * @since       1.0
31  * @version     $Revision$
32  */
33 class Doctrine_Query_Copy_TestCase extends Doctrine_UnitTestCase
34 {
35
36     /*
37         Sql of copied query must be the of the original
38     */
39     public function testQueryCopy()
40     {
41         $q = new MyCopyQuery();
42
43         $q->from('User u');
44         
45         $q2 = $q->copy();
46         
47         $this->assertEqual($q->getSql(), $q2->getSql() );
48
49     $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) ORDER BY DESC LIMIT 20 OFFSET 10');
50     }
51
52
53     public function testQueryRemoveOrderByPart()
54     {
55         $q = new MyCopyQuery();
56         $q->from('User u');
57
58         $q->removeQueryPart('orderby');
59
60         $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) LIMIT 20 OFFSET 10' );
61
62     }
63
64
65     public function testQueryRemoveLimitPart()
66     {
67         $q = new MyCopyQuery();
68         $q->from('User u');
69
70         $q->removeQueryPart('limit');
71
72         $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) ORDER BY DESC OFFSET 10' );
73     }
74
75
76     public function testQueryRemoveOffsetPart()
77     {
78         $q = new MyCopyQuery();
79         $q->from('User u');
80
81         $q->removeQueryPart('offset');
82
83         $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) ORDER BY DESC LIMIT 20' );
84
85     }
86
87
88     /*
89         If query limit is set to Zero, LIMIT must be removed
90     */
91     public function testQuerySetLimitToZero()
92     {
93         $q = new MyCopyQuery();
94         $q->from('User u');
95
96         $q->limit(0);
97
98         $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) ORDER BY DESC OFFSET 10' );
99     }
100
101     /*
102         If query offset is set to Zero, OFFSET must be removed
103     */
104     public function testQuerySetOffsetToZero()
105     {
106         $q = new MyCopyQuery();
107         $q->from('User u');
108
109         $q->offset(0);
110
111         $this->assertEqual($q->getSql(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id = 4 AND (e.type = 0) ORDER BY DESC LIMIT 20' );
112     }
113     
114 }
115
116
117 /*
118     Query with OrderBy, Limit and Offset
119 */
120 class MyCopyQuery extends Doctrine_Query
121 {
122     public function preQuery()
123     {
124         $this->where('u.id = 4');
125         $this->orderBy(' DESC');
126         $this->offset(10);
127         $this->limit(20);
128     }
129 }
130