EnumTestCase.php 6.08 KB
Newer Older
1
<?php
zYne's avatar
zYne committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
 *  $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.com>.
 */

/**
 * Doctrine_Enum_TestCase
 *
 * @package     Doctrine
 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @category    Object Relational Mapping
 * @link        www.phpdoctrine.com
 * @since       1.0
 * @version     $Revision$
 */
33 34 35 36 37 38
class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase 
{
    public function prepareData() 
    { }
    public function prepareTables() 
    {
pookey's avatar
pookey committed
39
        $this->tables = array("EnumTest", "EnumTest2", "EnumTest3");
40 41
        parent::prepareTables();
    }
zYne's avatar
zYne committed
42

43 44
    public function testParameterConversion() 
    {
45 46 47 48 49
        $test = new EnumTest();
        $test->status = 'open';
        $this->assertEqual($test->status, 'open');
        $test->save();

50 51
        try {
            $query = new Doctrine_Query($this->connection);
zYne's avatar
zYne committed
52 53 54
            $ret = $query->parseQuery('FROM EnumTest WHERE EnumTest.status = ?')
                         ->execute(array('open'));

55 56 57 58
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
            $this->fail();
        }
59

60 61
        try {
            $query = new Doctrine_Query($this->connection);
62
            $ret = $query->query("FROM EnumTest WHERE EnumTest.status = 'open'");
63 64 65
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
          $this->fail();
pookey's avatar
pookey committed
66 67 68
        }
    }

69

70

71 72
    public function testInAndNotIn() 
    {
73 74
        try {
            $query = new Doctrine_Query($this->connection);
75
            $ret = $query->query("FROM EnumTest WHERE EnumTest.status IN ('open')");
76 77 78 79
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
            $this->fail();
        }
80

81 82
        try {
            $query = new Doctrine_Query($this->connection);
83
            $ret = $query->query("FROM EnumTest WHERE EnumTest.status NOT IN ('verified', 'closed')");
84 85 86 87
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
            $this->fail();
        }
88
    }
89

90 91
    public function testExpressionComposition() 
    {
92 93
        try {
            $query = new Doctrine_Query($this->connection);
94 95 96 97 98 99
            $ret = $query->query("FROM EnumTest e WHERE e.id > 0 AND (e.status != 'closed' OR e.status = 'verified')");
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
            $this->fail();
        }
    }
zYne's avatar
zYne committed
100

101 102
    public function testNotEqual() 
    {
103 104 105
        try {
            $query = new Doctrine_Query($this->connection);
            $ret = $query->query("FROM EnumTest WHERE EnumTest.status != 'closed'");
106 107 108 109 110
            $this->assertEqual(count($ret), 1);
        } catch (Exception $e) {
            $this->fail();
        }
    }
zYne's avatar
zYne committed
111

112 113
    public function testEnumType() 
    {
114 115

        $enum = new EnumTest();
zYne's avatar
zYne committed
116 117
        $enum->status = 'open';
        $this->assertEqual($enum->status, 'open');
118
        $enum->save();
zYne's avatar
zYne committed
119
        $this->assertEqual($enum->status, 'open');
120
        $enum->refresh();
zYne's avatar
zYne committed
121
        $this->assertEqual($enum->status, 'open');
122

zYne's avatar
zYne committed
123
        $enum->status = 'closed';
124

zYne's avatar
zYne committed
125
        $this->assertEqual($enum->status, 'closed');
126 127

        $enum->save();
zYne's avatar
zYne committed
128
        $this->assertEqual($enum->status, 'closed');
129 130
        $this->assertTrue(is_numeric($enum->id));
        $enum->refresh();
zYne's avatar
zYne committed
131
        $this->assertEqual($enum->status, 'closed');
132 133
    }

134 135 136
    public function testEnumTypeWithCaseConversion() 
    {
        $this->conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
137 138 139

        $enum = new EnumTest();

zYne's avatar
zYne committed
140 141
        $enum->status = 'open';
        $this->assertEqual($enum->status, 'open');
142 143

        $enum->save();
zYne's avatar
zYne committed
144
        $this->assertEqual($enum->status, 'open');
145 146

        $enum->refresh();
zYne's avatar
zYne committed
147
        $this->assertEqual($enum->status, 'open');      
148
        
zYne's avatar
zYne committed
149
        $enum->status = 'closed';
150

zYne's avatar
zYne committed
151
        $this->assertEqual($enum->status, 'closed');
152 153

        $enum->save();
zYne's avatar
zYne committed
154
        $this->assertEqual($enum->status, 'closed');
155 156

        $enum->refresh();
zYne's avatar
zYne committed
157 158
        $this->assertEqual($enum->status, 'closed');

159
        $this->conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
160 161
    }

162 163
    public function testFailingRefresh() 
    {
164 165
        $enum = $this->connection->getTable('EnumTest')->find(1);

166
        $this->conn->exec('DELETE FROM enum_test WHERE id = 1');
167 168 169

        try {
            $enum->refresh();
zYne's avatar
zYne committed
170 171

            $this->fail();
172
        } catch(Doctrine_Record_Exception $e) {
zYne's avatar
zYne committed
173
            $this->pass();
174 175
        }
    }
176

177 178 179 180 181 182 183 184
    public function testEnumFetchArray() {
        $q = new Doctrine_Query();
        $q->select('e.*')
          ->from('EnumTest e')
          ->limit(1);
        $ret = $q->execute(array(), Doctrine::FETCH_ARRAY);

        if (is_numeric($ret[0]['status'])) {
pookey's avatar
pookey committed
185 186 187
            $this->fail();
        }
    }
188 189 190 191 192 193 194 195 196 197 198 199 200 201

    public function testLiteralEnumValueConversionSupportsJoins()
    {

        $q = new Doctrine_Query($this->connection);
        $q->addSelect('e.*')
          ->addSelect('e3.*')
          ->from('EnumTest e')
          ->leftjoin('e.Enum3 e3')
          ->where("e.status = 'verified'")
          ->execute();

        $this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.status AS e__status, e.text AS e__text, e2.text AS e2__text FROM enum_test e LEFT JOIN enum_test3 e2 ON e.text = e2.text WHERE e.status = 1");
    }
202 203
}
?>