1<?php
2
3/*
4 * This file is part of the Stash package.
5 *
6 * (c) Robert Hafner <tedivm@tedivm.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Stash\Test;
13
14use Stash\Pool;
15
16/**
17 * @package Stash
18 * @author  Robert Hafner <tedivm@tedivm.com>
19 */
20class PoolNamespaceTest extends AbstractPoolTest
21{
22    protected function getTestPool($skipNametest = false)
23    {
24        $pool = parent::getTestPool();
25
26        if (!$skipNametest) {
27            $pool->setNamespace('TestSpace');
28        }
29
30        return $pool;
31    }
32
33    public function testClearNamespacedCache()
34    {
35        $pool = $this->getTestPool(true);
36
37        // No Namespace
38        $item = $pool->getItem('base/one');
39        $item->set($this->data)->save();
40
41        // TestNamespace
42        $pool->setNamespace('TestNamespace');
43        $item = $pool->getItem('test/one');
44        $item->set($this->data)->save();
45
46        // TestNamespace2
47        $pool->setNamespace('TestNamespace2');
48        $item = $pool->getItem('test/one');
49        $item->set($this->data)->save();
50
51        // Clear TestNamespace
52        $pool->setNamespace('TestNamespace');
53        $this->assertTrue($pool->clear(), 'Clear succeeds with namespace selected.');
54
55        // Return to No Namespace
56        $pool->setNamespace();
57        $item = $pool->getItem('base/one');
58        $this->assertFalse($item->isMiss(), 'Base item exists after other namespace was cleared.');
59        $this->assertEquals($this->data, $item->get(), 'Base item returns data after other namespace was cleared.');
60
61        // Clear All
62        $this->assertTrue($pool->clear(), 'Clear succeeds with no namespace.');
63
64        // Return to TestNamespace2
65        $pool->setNamespace('TestNamespace2');
66        $item = $pool->getItem('base/one');
67        $this->assertTrue($item->isMiss(), 'Namespaced item disappears after complete clear.');
68    }
69
70    public function testNamespacing()
71    {
72        $pool = $this->getTestPool(true);
73
74        $this->assertAttributeEquals(null, 'namespace', $pool, 'Namespace starts empty.');
75        $this->assertTrue($pool->setNamespace('TestSpace'), 'setNamespace returns true.');
76        $this->assertAttributeEquals('TestSpace', 'namespace', $pool, 'setNamespace sets the namespace.');
77        $this->assertEquals('TestSpace', $pool->getNamespace(), 'getNamespace returns current namespace.');
78
79        $this->assertTrue($pool->setNamespace(), 'setNamespace returns true when setting null.');
80        $this->assertAttributeEquals(null, 'namespace', $pool, 'setNamespace() empties namespace.');
81        $this->assertFalse($pool->getNamespace(), 'getNamespace returns false when no namespace is set.');
82    }
83}
84