HookTestCase.php 6.8 KB
Newer Older
1
<?php
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 *  $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
19
 * <http://www.phpdoctrine.org>.
20 21 22 23 24 25 26 27 28
 */

/**
 * Doctrine_Hook_TestCase
 *
 * @package     Doctrine
 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @category    Object Relational Mapping
29
 * @link        www.phpdoctrine.org
30 31 32
 * @since       1.0
 * @version     $Revision$
 */
zYne's avatar
zYne committed
33 34 35 36 37
class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase 
{

    public function testWordLikeParserSupportsHyphens() 
    {
zYne's avatar
zYne committed
38 39 40 41 42
        $parser = new Doctrine_Hook_WordLike();
        
        $parser->parse('u', 'name', "'some guy' OR zYne");

        $this->assertEqual($parser->getCondition(), '(u.name LIKE ? OR u.name LIKE ?)');
zYne's avatar
zYne committed
43
        $this->assertEqual($parser->getParams(), array('%some guy%', '%zYne%'));
zYne's avatar
zYne committed
44 45
    }

zYne's avatar
zYne committed
46
    public function testHookOrderbyAcceptsArray()
zYne's avatar
zYne committed
47
    {
zYne's avatar
zYne committed
48 49 50 51 52 53 54
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['orderby'] = array('u.name ASC');

        $hook->hookOrderBy($a['orderby']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0) ORDER BY e.name ASC');
    }
zYne's avatar
zYne committed
55

zYne's avatar
zYne committed
56
    public function testHookOrderbyAcceptsDescendingOrder()
zYne's avatar
zYne committed
57
    {
zYne's avatar
zYne committed
58 59 60 61 62 63 64
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['orderby'] = array('u.name DESC');

        $hook->hookOrderBy($a['orderby']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0) ORDER BY e.name DESC');
    }
zYne's avatar
zYne committed
65

zYne's avatar
zYne committed
66
    public function testHookOrderbyDoesntAcceptUnknownColumn()
zYne's avatar
zYne committed
67
    {
zYne's avatar
zYne committed
68 69 70 71 72 73 74
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['orderby'] = array('u.unknown DESC');

        $hook->hookOrderBy($a['orderby']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
    }
zYne's avatar
zYne committed
75

zYne's avatar
zYne committed
76
    public function testHookOrderbyAcceptsMultipleParameters()
zYne's avatar
zYne committed
77
    {
zYne's avatar
zYne committed
78 79 80
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['orderby'] = array('u.name ASC', 'u.id DESC');
81

zYne's avatar
zYne committed
82 83
        $hook->hookOrderBy($a['orderby']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0) ORDER BY e.name ASC, e.id DESC');
zYne's avatar
zYne committed
84

zYne's avatar
zYne committed
85 86
        $users =  $hook->getQuery()->execute();
    }
zYne's avatar
zYne committed
87

zYne's avatar
zYne committed
88
    public function testHookWhereAcceptsArrays()
zYne's avatar
zYne committed
89
    {
90 91 92 93 94 95 96
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['where'] = array('u.name' => 'Jack Daniels',
                            'u.loginname' => 'TheMan');

        $hook->hookWhere($a['where']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.name LIKE ? OR e.name LIKE ?) AND e.loginname LIKE ? AND (e.type = 0)');
zYne's avatar
zYne committed
97
        $this->assertEqual($hook->getQuery()->getParams(), array('%Jack%', '%Daniels%', '%TheMan%'));
98
    }
zYne's avatar
zYne committed
99

zYne's avatar
zYne committed
100
    public function testHookWhereSupportsIntegerTypes()
zYne's avatar
zYne committed
101
    {
102
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');
zYne's avatar
zYne committed
103

104 105 106 107 108
        $a['where'] = array('u.id' => 10000);

        $hook->hookWhere($a['where']);
        $this->assertEqual($hook->getQuery()->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id = ? AND (e.type = 0)');
        $this->assertEqual($hook->getQuery()->getParams(), array(10000));
zYne's avatar
zYne committed
109
    }
110

zYne's avatar
zYne committed
111
    public function testHookWhereDoesntAcceptUnknownColumn()
zYne's avatar
zYne committed
112
    {
zYne's avatar
zYne committed
113 114 115 116 117 118
        $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p');

        $a['where'] = array('u.unknown' => 'Jack Daniels');

        $hook->hookWhere($a['where']);

zYne's avatar
zYne committed
119
        $this->assertEqual($hook->getQuery()->getSql(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
120
    }
zYne's avatar
zYne committed
121

zYne's avatar
zYne committed
122
    public function testEqualParserUsesEqualOperator()
zYne's avatar
zYne committed
123
    {
124
        $parser = new Doctrine_Hook_Equal();
zYne's avatar
zYne committed
125

126
        $parser->parse('u', 'name', 'zYne');
zYne's avatar
zYne committed
127

128 129 130
        $this->assertEqual($parser->getCondition(), 'u.name = ?');
        $this->assertEqual($parser->getParams(), array('zYne'));
    }
zYne's avatar
zYne committed
131

zYne's avatar
zYne committed
132
    public function testWordLikeParserUsesLikeOperator()
zYne's avatar
zYne committed
133
    {
134
        $parser = new Doctrine_Hook_WordLike();
zYne's avatar
zYne committed
135

136
        $parser->parse('u', 'name', 'zYne');
zYne's avatar
zYne committed
137

138
        $this->assertEqual($parser->getCondition(), 'u.name LIKE ?');
zYne's avatar
zYne committed
139
        $this->assertEqual($parser->getParams(), array('%zYne%'));
140
    }
zYne's avatar
zYne committed
141

zYne's avatar
zYne committed
142
    public function testIntegerParserSupportsIntervals()
zYne's avatar
zYne committed
143
    {
144 145 146
        $parser = new Doctrine_Hook_Integer();

        $parser->parse('m', 'year', '1998-2000');
zYne's avatar
zYne committed
147

148 149 150 151
        $this->assertEqual($parser->getCondition(), '(m.year > ? AND m.year < ?)');
        $this->assertEqual($parser->getParams(), array('1998', '2000'));
    }

zYne's avatar
zYne committed
152
    public function testIntegerParserSupportsEqualOperator()
zYne's avatar
zYne committed
153
    {
154 155 156 157 158 159 160 161
        $parser = new Doctrine_Hook_Integer();

        $parser->parse('m', 'year', '1998');

        $this->assertEqual($parser->getCondition(), 'm.year = ?');
        $this->assertEqual($parser->getParams(), array('1998'));
    }

zYne's avatar
zYne committed
162
    public function testIntegerParserSupportsNestingConditions()
zYne's avatar
zYne committed
163
    {
164 165 166 167 168 169 170
        $parser = new Doctrine_Hook_Integer();

        $parser->parse('m', 'year', '1998-2000 OR 2001');

        $this->assertEqual($parser->getCondition(), '((m.year > ? AND m.year < ?) OR m.year = ?)');
        $this->assertEqual($parser->getParams(), array('1998', '2000', '2001'));
    }
zYne's avatar
zYne committed
171

172
}