Test Failed
Pull Request — master (#14)
by
unknown
07:58
created

SocialAuthenticateTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 171
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 171
rs 10
c 1
b 0
f 0
wmc 9
lcom 1
cbo 7

9 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 15 1
A tearDown() 0 4 1
A testAuthenticateHappy() 0 6 1
A testAuthenticateFail() 0 14 1
A testAuthenticateWrongType() 0 6 1
A testAuthenticateRequireSSL() 0 6 1
A testAuthenticateRequireSSLNoKey() 0 6 1
B testHeaderHappy() 0 24 1
A testAuthenticateHeaderFail() 0 23 1
1
<?php
2
/**
3
 * Copyright 2016, Cake Development Corporation (http://cakedc.com)
4
 *
5
 * Licensed under The MIT License
6
 * Redistributions of files must retain the above copyright notice.
7
 *
8
 * @copyright Copyright 2016, Cake Development Corporation (http://cakedc.com)
9
 * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
10
 */
11
12
namespace CakeDC\Api\Test\TestCase\Auth\Authenticate;
13
14
use CakeDC\Api\Service\Action\CrudIndexAction;
15
use CakeDC\Api\Service\Auth\Authenticate\SocialAuthenticate;
16
use CakeDC\Api\Service\Auth\Authenticate\TokenAuthenticate;
17
use CakeDC\Api\Service\FallbackService;
18
use CakeDC\Api\TestSuite\TestCase;
19
use CakeDC\Api\Test\ConfigTrait;
20
use CakeDC\Api\Test\FixturesTrait;
21
use Cake\Network\Request;
22
use Cake\Network\Response;
23
24
class SocialAuthenticateTest extends TestCase
25
{
26
27
    use ConfigTrait;
28
    use FixturesTrait;
29
30
    /**
31
     * @var SocialAuthenticate
32
     */
33
    public $social;
34
35
    /**
36
     * Sets up the fixture, for example, opens a network connection.
37
     * This method is called before a test is executed.
38
     */
39
    public function setUp()
40
    {
41
        $request = new Request();
42
        $response = new Response();
43
        $service = new FallbackService([
44
            'request' => $request,
45
            'response' => $response
46
        ]);
47
        $action = new CrudIndexAction([
48
            'service' => $service,
49
            'request' => $request,
50
            'response' => $response
51
        ]);
52
        $this->social = new SocialAuthenticate($action, ['require_ssl' => false]);
53
    }
54
55
    /**
56
     * Tears down the fixture, for example, closes a network connection.
57
     * This method is called after a test is executed.
58
     */
59
    public function tearDown()
60
    {
61
        unset($this->social, $this->controller);
62
    }
63
64
    /**
65
     * test
66
     *
67
     * @return void
68
     */
69
    public function testAuthenticateHappy()
70
    {
71
        $request = new Request('/?provider=Facebook&token=token-1234&token_secret=token-secret');
72
        $result = $this->social->authenticate($request, new Response());
73
        $this->assertEquals('user-1', $result['username']);
74
    }
75
76
    /**
77
     * test
78
     *
79
     * @return void
80
     */
81
    public function testAuthenticateFail()
82
    {
83
        $request = new Request('/');
84
        $result = $this->social->authenticate($request, new Response());
85
        $this->assertFalse($result);
86
87
        $request = new Request('/?provider=Facebook&token=none');
88
        $result = $this->social->authenticate($request, new Response());
89
        $this->assertFalse($result);
90
91
        $request = new Request('/?provider=Facebook&token=');
92
        $result = $this->social->authenticate($request, new Response());
93
        $this->assertFalse($result);
94
    }
95
96
    /**
97
     * test
98
     *
99
     * @expectedException \OutOfBoundsException
100
     * @expectedExceptionMessage Type wrong is not valid
101
     *
102
     */
103
    public function testAuthenticateWrongType()
104
    {
105
        $this->social->setConfig('type', 'wrong');
106
        $request = new Request('/');
107
        $this->social->authenticate($request, new Response());
108
    }
109
110
    /**
111
     * test
112
     *
113
     * @expectedException \Cake\Network\Exception\ForbiddenException
114
     * @expectedExceptionMessage SSL is required for ApiKey Authentication
115
     *
116
     */
117
    public function testAuthenticateRequireSSL()
118
    {
119
        $this->social->setConfig('require_ssl', true);
120
        $request = new Request('/?token=token-1234&token_secret=token-secret&provider=Facebook');
121
        $this->social->authenticate($request, new Response());
122
    }
123
124
    /**
125
     * test
126
     *
127
     */
128
    public function testAuthenticateRequireSSLNoKey()
129
    {
130
        $this->social->setConfig('require_ssl', true);
131
        $request = new Request('/');
132
        $this->assertFalse($this->social->authenticate($request, new Response()));
133
    }
134
135
136
    /**
137
     * test
138
     *
139
     * @return void
140
     */
141
    public function testHeaderHappy()
142
    {
143
        $request = $this->getMockBuilder('\Cake\Network\Request')
144
            ->setMethods(['getHeader'])
145
            ->getMock();
146
147
        $request->expects($this->at(0))
148
            ->method('getHeader')
149
            ->with('provider')
150
            ->will($this->returnValue('Facebook'));
151
152
        $request->expects($this->at(1))
153
            ->method('getHeader')
154
            ->with('token')
155
            ->will($this->returnValue('token-1234'));
156
157
        $request->expects($this->at(2))
158
            ->method('getHeader')
159
            ->with('token_secret')
160
            ->will($this->returnValue('token-secret'));
161
        $this->social->setConfig('type', 'header');
162
        $result = $this->social->authenticate($request, new Response());
163
        $this->assertEquals('user-1', $result['username']);
164
    }
165
166
    /**
167
     * test
168
     *
169
     * @return void
170
     */
171
    public function testAuthenticateHeaderFail()
172
    {
173
        $request = $this->getMockBuilder('\Cake\Network\Request')
174
            ->setMethods(['getHeader'])
175
            ->getMock();
176
        $request->expects($this->at(0))
177
            ->method('getHeader')
178
            ->with('provider')
179
            ->will($this->returnValue('wrong'));
180
181
        $request->expects($this->at(1))
182
            ->method('getHeader')
183
            ->with('token')
184
            ->will($this->returnValue('wrong'));
185
186
        $request->expects($this->at(2))
187
            ->method('getHeader')
188
            ->with('token_secret')
189
            ->will($this->returnValue('wrong'));
190
        $this->social->setConfig('type', 'header');
191
        $result = $this->social->authenticate($request, new Response());
192
        $this->assertFalse($result);
193
    }
194
}
195