DbTest.php 3.6 KB
Newer Older
1
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
namespace UnicaenAuthTest\Authentication\Adapter;

use PDOException;
use PHPUnit_Framework_TestCase;
use UnicaenAuth\Authentication\Adapter\Db;
use UnicaenAuth\Options\ModuleOptions;
use Zend\Http\PhpEnvironment\Request;
use Zend\ServiceManager\Exception\ServiceNotFoundException;
use Zend\Stdlib\Parameters;
use ZfcUser\Authentication\Adapter\AdapterChainEvent;

/**
 * Description of DbTest
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
 */
class DbTest extends PHPUnit_Framework_TestCase
{
    protected $adapter;
    protected $moduleOptions;
    protected $mapper;
    
    /**
     * Sets up the fixture, for example, open a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp()
    {
        $this->moduleOptions = $moduleOptions = new ModuleOptions(array(
            'cas' => array(
                'connection' => array(
                    'default' => array(
                        'params' => array(
                            'hostname' => 'cas.unicaen.fr',
                            'port' => 443,
                            'version' => "2.0",
                            'uri' => "",
                            'debug' => false,
                        ),
                    ),
                ),
            ),
        ));
        
        $this->mapper = $mapper = $this->getMock('ZfcUser\Mapper\User', array('findByUsername', 'findByEmail'));
        
        $serviceManager = $this->getMock('Zend\ServiceManager\ServiceManager', array('get'));
        $serviceManager->expects($this->any())
                       ->method('get')
                       ->will($this->returnCallback(function($serviceName) use ($moduleOptions, $mapper) {
                           if ('zfcuser_module_options' === $serviceName) {
                               return new \ZfcUser\Options\ModuleOptions();
                           }
                           if ('unicaen-auth_module_options' === $serviceName) {
                               return $moduleOptions;
                           }
                           if ('zfcuser_user_mapper' === $serviceName) {
                               return $mapper;
                           }
                           return null;
                       }));
                       
        $this->adapter = new Db();
        $this->adapter->setServiceManager($serviceManager);
    }
    
    public function getException()
    {
        return array(
            array(new PDOException()),
            array(new ServiceNotFoundException()),
        );
    }
    
    /**
     * @dataProvider getException
     */
    public function testAuthenticateReturnsFalseIfExceptionThrown($exception)
    {
        $this->mapper->expects($this->once())
                     ->method($this->logicalOr('findByUsername', 'findByEmail'))
                     ->will($this->throwException($exception));
        
        $request = new Request();
        $request->setPost(new Parameters(array('identity' => 'bob', 'credential' => "xxxxx")));
        
        $event = new AdapterChainEvent();
        $event->setRequest($request);
        
        $result = $this->adapter->authenticate($event);
        $this->assertFalse($result);
    }
94
95
96
97
98
99
100
101
102
103
104
105
    
    public function testAuthenticateReturnsParentMethodResult()
    {
        $request = new Request();
        $request->setPost(new Parameters(array('identity' => 'bob', 'credential' => "xxxxx")));
        
        $event = new AdapterChainEvent();
        $event->setRequest($request);
        
        $result = $this->adapter->authenticate($event);
        $this->assertFalse($result);
    }
106
}