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_DC843_TestCase
24 *
25 * @package     Doctrine
26 * @author      Enrico Stahn <mail@enricostahn.com>
27 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
28 * @category    Object Relational Mapping
29 * @link        www.doctrine-project.org
30 * @since       1.0
31 * @version     $Revision$
32 */
33class Doctrine_Ticket_DC843_TestCase extends Doctrine_UnitTestCase
34{
35    private $sqlStackCounter = 0;
36
37    public function prepareTables()
38    {
39        $this->tables[] = 'Ticket_DC843_Model';
40        parent::prepareTables();
41    }
42
43    public function testInit()
44    {
45        $this->dbh = new Doctrine_Adapter_Mock('mssql');
46        $this->conn = Doctrine_Manager::getInstance()->openConnection($this->dbh, 'DC843');
47    }
48
49    public function testWithMagicMethod()
50    {
51        Doctrine_Core::getTable('Ticket_DC843_Model')->findByUsernameAndFoo('foo', 'bar');
52
53        $expected = "SELECT [t].[model_id] AS [t__model_id], [t].[username] AS [t__username], [t].[password] AS [t__password], [t].[foo] AS [t__foo] FROM [ticket__d_c843__model] [t] WHERE ([t].[username] = 'foo' AND [t].[foo] LIKE 'bar')";
54        $sql = current(array_slice($this->dbh->getAll(), $this->sqlStackCounter++, 1));
55
56        $this->assertEqual($expected, $sql);
57    }
58
59    public function testQuery()
60    {
61        Doctrine_Core::getTable('Ticket_DC843_Model')
62            ->createQuery('t')
63            ->where('t.username = ?', 'foo')
64            ->andWhere('t.foo = ?', 'bar')
65            ->execute();
66
67        $expected = "SELECT [t].[model_id] AS [t__model_id], [t].[username] AS [t__username], [t].[password] AS [t__password], [t].[foo] AS [t__foo] FROM [ticket__d_c843__model] [t] WHERE ([t].[username] = 'foo' AND [t].[foo] LIKE 'bar')";
68        $sql = current(array_slice($this->dbh->getAll(), $this->sqlStackCounter++, 1));
69
70        $this->assertEqual($expected, $sql);
71    }
72
73    public function testQueryWithLike()
74    {
75        Doctrine_Core::getTable('Ticket_DC843_Model')
76            ->createQuery('t')
77            ->where('t.username LIKE ?', 'foo')
78            ->andWhere('t.foo = ?', 'bar')
79            ->execute();
80
81        $expected = "SELECT [t].[model_id] AS [t__model_id], [t].[username] AS [t__username], [t].[password] AS [t__password], [t].[foo] AS [t__foo] FROM [ticket__d_c843__model] [t] WHERE ([t].[username] LIKE 'foo' AND [t].[foo] LIKE 'bar')";
82        $sql = current(array_slice($this->dbh->getAll(), $this->sqlStackCounter++, 1));
83
84        $this->assertEqual($expected, $sql);
85    }
86
87    public function testQueryWithNull()
88    {
89        Doctrine_Core::getTable('Ticket_DC843_Model')
90            ->createQuery('t')
91            ->where('t.username LIKE ?', 'foo')
92            ->andWhere('t.foo IS NULL')
93            ->execute();
94
95        $expected = "SELECT [t].[model_id] AS [t__model_id], [t].[username] AS [t__username], [t].[password] AS [t__password], [t].[foo] AS [t__foo] FROM [ticket__d_c843__model] [t] WHERE ([t].[username] LIKE 'foo' AND [t].[foo] IS NULL)";
96        $sql = current(array_slice($this->dbh->getAll(), $this->sqlStackCounter++, 1));
97
98        $this->assertEqual($expected, $sql);
99    }
100}
101
102class Ticket_DC843_Model extends Doctrine_Record
103{
104    public function setTableDefinition()
105    {
106        $this->hasColumn('model_id as id', 'integer', null, array(
107            'type' => 'integer',
108            'unsigned' => false,
109            'primary' => true,
110            'autoincrement' => true,
111        ));
112        $this->hasColumn('username', 'string', 255);
113        $this->hasColumn('password', 'string', 255);
114        $this->hasColumn('foo', 'string');
115    }
116}
117