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_DDC47_TestCase
24 *
25 * @package     Doctrine
26 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
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_DC112_TestCase extends Doctrine_UnitTestCase
34{
35    public function testResultCacheSetHash()
36    {
37        $cacheDriver = new Doctrine_Cache_Array();
38
39        $q1 = Doctrine_Query::create()
40            ->from('User u')
41            ->useResultCache($cacheDriver, 3600, 'test1');
42
43        $coll = $q1->execute();
44
45        $this->assertTrue($cacheDriver->contains('test1'));
46        $this->assertEqual(count($coll), 8);
47
48        $coll = $q1->execute();
49
50        $this->assertTrue($cacheDriver->contains('test1'));
51        $this->assertEqual(count($coll), 8);
52
53        $q2 = Doctrine_Query::create()
54            ->from('User u')
55            ->useResultCache($cacheDriver, 3600, 'test2');
56
57        $coll = $q2->execute();
58        $this->assertTrue($cacheDriver->contains('test1'));
59        $this->assertTrue($cacheDriver->contains('test2'));
60        $this->assertEqual(count($coll), 8);
61
62        $q2->clearResultCache();
63        $this->assertTrue($cacheDriver->contains('test1'));
64        $this->assertFalse($cacheDriver->contains('test2'));
65
66        $cacheDriver->delete('test1');
67        $this->assertFalse($cacheDriver->contains('test1'));
68
69        $q = Doctrine_Query::create()
70            ->from('User u')
71            ->useResultCache($cacheDriver)
72            ->setResultCacheHash('testing');
73
74        $coll = $q->execute();
75        $this->assertTrue($cacheDriver->contains('testing'));
76
77        $this->assertEqual($q->getResultCacheHash(), 'testing');
78        $q->setResultCacheHash(null);
79        $this->assertEqual($q->getResultCacheHash(), '9b6aafa501ac37b902719cd5061f412d');
80    }
81
82    public function testDeleteByRegex()
83    {
84        $cacheDriver = new Doctrine_Cache_Array(array(
85            'prefix' => 'test_'
86        ));
87
88        Doctrine_Query::create()
89            ->from('User u')
90            ->useResultCache($cacheDriver, 3600, 'doctrine_query_one')
91            ->execute();
92
93        Doctrine_Query::create()
94            ->from('User u')
95            ->useResultCache($cacheDriver, 3600, 'doctrine_query_two')
96            ->execute();
97
98        $count = $cacheDriver->deleteByRegex('/test_doctrine_query_.*/');
99        $this->assertEqual($count, 2);
100        $this->assertFalse($cacheDriver->contains('doctrine_query_one'));
101        $this->assertFalse($cacheDriver->contains('doctrine_query_two'));
102    }
103
104    public function testDeleteByPrefix()
105    {
106        $cacheDriver = new Doctrine_Cache_Array(array(
107            'prefix' => 'test_'
108        ));
109
110        Doctrine_Query::create()
111            ->from('User u')
112            ->useResultCache($cacheDriver, 3600, 'doctrine_query_one')
113            ->execute();
114
115        Doctrine_Query::create()
116            ->from('User u')
117            ->useResultCache($cacheDriver, 3600, 'doctrine_query_two')
118            ->execute();
119
120        $count = $cacheDriver->deleteByPrefix('test_');
121        $this->assertEqual($count, 2);
122        $this->assertFalse($cacheDriver->contains('doctrine_query_one'));
123        $this->assertFalse($cacheDriver->contains('doctrine_query_two'));
124    }
125
126    public function testDeleteBySuffix()
127    {
128        $cacheDriver = new Doctrine_Cache_Array();
129
130        Doctrine_Query::create()
131            ->from('User u')
132            ->useResultCache($cacheDriver, 3600, 'one_query')
133            ->execute();
134
135        Doctrine_Query::create()
136            ->from('User u')
137            ->useResultCache($cacheDriver, 3600, 'two_query')
138            ->execute();
139
140        $count = $cacheDriver->deleteBySuffix('_query');
141        $this->assertEqual($count, 2);
142        $this->assertFalse($cacheDriver->contains('one_query'));
143        $this->assertFalse($cacheDriver->contains('two_query'));
144    }
145
146    public function testDeleteWithWildcard()
147    {
148        $cacheDriver = new Doctrine_Cache_Array();
149
150        Doctrine_Query::create()
151            ->from('User u')
152            ->useResultCache($cacheDriver, 3600, 'user_query_one')
153            ->execute();
154
155        Doctrine_Query::create()
156            ->from('User u')
157            ->useResultCache($cacheDriver, 3600, 'user_query_two')
158            ->execute();
159
160        $count = $cacheDriver->delete('user_query_*');
161        $this->assertEqual($count, 2);
162        $this->assertFalse($cacheDriver->contains('user_query_one'));
163        $this->assertFalse($cacheDriver->contains('user_query_two'));
164    }
165}
166