mirror of
https://github.com/friendica/friendica
synced 2025-05-05 23:04:09 +02:00
Add more Cookie tests (create new StaticCookie class for mocking setcookie())
This commit is contained in:
parent
a8b89dc486
commit
94a8a60841
4 changed files with 182 additions and 17 deletions
|
@ -5,6 +5,7 @@ namespace Friendica\Testsrc\Model\User;
|
|||
use Friendica\Core\Config\Configuration;
|
||||
use Friendica\Model\User\Cookie;
|
||||
use Friendica\Test\DatabaseTest;
|
||||
use Friendica\Test\Util\StaticCookie;
|
||||
use Mockery\MockInterface;
|
||||
|
||||
class CookieTest extends DatabaseTest
|
||||
|
@ -14,11 +15,21 @@ class CookieTest extends DatabaseTest
|
|||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();;
|
||||
StaticCookie::clearStatic();
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$this->config = \Mockery::mock(Configuration::class);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
StaticCookie::clearStatic();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if we can create a basic cookie instance
|
||||
*/
|
||||
public function testInstance()
|
||||
{
|
||||
$this->config->shouldReceive('get')->with('system', 'ssl_policy')->andReturn(1)->once();
|
||||
|
@ -79,6 +90,8 @@ class CookieTest extends DatabaseTest
|
|||
}
|
||||
|
||||
/**
|
||||
* Test the get() method of the cookie class
|
||||
*
|
||||
* @dataProvider dataGet
|
||||
*/
|
||||
public function testGet(array $cookieData, bool $hasValues, $uid, $hash, $ip)
|
||||
|
@ -134,7 +147,7 @@ class CookieTest extends DatabaseTest
|
|||
'assertHash' => '',
|
||||
'assertTrue' => false,
|
||||
],
|
||||
'invalid' => [
|
||||
'invalid' => [
|
||||
'serverPrivateKey' => 'serverkey',
|
||||
'userPrivateKey' => 'bla',
|
||||
'password' => 'nope',
|
||||
|
@ -145,6 +158,8 @@ class CookieTest extends DatabaseTest
|
|||
}
|
||||
|
||||
/**
|
||||
* Test the check() method of the cookie class
|
||||
*
|
||||
* @dataProvider dataCheck
|
||||
*/
|
||||
public function testCheck(string $serverPrivateKey, string $userPrivateKey, string $password, string $assertHash, bool $assertTrue)
|
||||
|
@ -159,13 +174,135 @@ class CookieTest extends DatabaseTest
|
|||
$this->assertEquals($assertTrue, $cookie->check($assertHash, $password, $userPrivateKey));
|
||||
}
|
||||
|
||||
public function testSet()
|
||||
public function dataSet()
|
||||
{
|
||||
$this->markTestIncomplete('Needs mocking of setcookie() first.');
|
||||
return [
|
||||
'default' => [
|
||||
'serverKey' => 23,
|
||||
'uid' => 0,
|
||||
'password' => '234',
|
||||
'privateKey' => '124',
|
||||
'assertHash' => 'b657a15cfe7ed1f7289c9aa51af14a9a26c966f4ddd74e495fba103d8e872a39',
|
||||
'remoteIp' => '0.0.0.0',
|
||||
'serverArray' => [],
|
||||
'lifetime' => null,
|
||||
],
|
||||
'withServerArray' => [
|
||||
'serverKey' => 23,
|
||||
'uid' => 0,
|
||||
'password' => '234',
|
||||
'privateKey' => '124',
|
||||
'assertHash' => 'b657a15cfe7ed1f7289c9aa51af14a9a26c966f4ddd74e495fba103d8e872a39',
|
||||
'remoteIp' => '1.2.3.4',
|
||||
'serverArray' => ['REMOTE_ADDR' => '1.2.3.4',],
|
||||
'lifetime' => null,
|
||||
],
|
||||
'withLifetime0' => [
|
||||
'serverKey' => 23,
|
||||
'uid' => 0,
|
||||
'password' => '234',
|
||||
'privateKey' => '124',
|
||||
'assertHash' => 'b657a15cfe7ed1f7289c9aa51af14a9a26c966f4ddd74e495fba103d8e872a39',
|
||||
'remoteIp' => '1.2.3.4',
|
||||
'serverArray' => ['REMOTE_ADDR' => '1.2.3.4',],
|
||||
'lifetime' => 0,
|
||||
],
|
||||
'withLifetime' => [
|
||||
'serverKey' => 23,
|
||||
'uid' => 0,
|
||||
'password' => '234',
|
||||
'privateKey' => '124',
|
||||
'assertHash' => 'b657a15cfe7ed1f7289c9aa51af14a9a26c966f4ddd74e495fba103d8e872a39',
|
||||
'remoteIp' => '1.2.3.4',
|
||||
'serverArray' => ['REMOTE_ADDR' => '1.2.3.4',],
|
||||
'lifetime' => 2 * 24 * 60 * 60,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public function assertCookie($uid, $hash, $remoteIp, $lifetime)
|
||||
{
|
||||
$this->assertArrayHasKey(Cookie::NAME, StaticCookie::$_COOKIE);
|
||||
|
||||
$data = json_decode(StaticCookie::$_COOKIE[Cookie::NAME]);
|
||||
|
||||
$this->assertObjectHasAttribute('uid', $data);
|
||||
$this->assertEquals($uid, $data->uid);
|
||||
$this->assertObjectHasAttribute('hash', $data);
|
||||
$this->assertEquals($hash, $data->hash);
|
||||
$this->assertObjectHasAttribute('ip', $data);
|
||||
$this->assertEquals($remoteIp, $data->ip);
|
||||
|
||||
if (isset($lifetime) && $lifetime !== 0) {
|
||||
$this->assertLessThanOrEqual(time() + $lifetime, StaticCookie::$_EXPIRE);
|
||||
} else {
|
||||
$this->assertLessThanOrEqual(time() + Cookie::DEFAULT_EXPIRE * 24 * 60 * 60, StaticCookie::$_EXPIRE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the set() method of the cookie class
|
||||
*
|
||||
* @dataProvider dataSet
|
||||
*/
|
||||
public function testSet($serverKey, $uid, $password, $privateKey, $assertHash, $remoteIp, $serverArray, $lifetime)
|
||||
{
|
||||
$this->config->shouldReceive('get')->with('system', 'ssl_policy')->andReturn(1)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn($serverKey)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once();
|
||||
|
||||
$cookie = new StaticCookie($this->config, $serverArray);
|
||||
$this->assertInstanceOf(Cookie::class, $cookie);
|
||||
|
||||
$cookie->set($uid, $password, $privateKey, $lifetime);
|
||||
|
||||
$this->assertCookie($uid, $assertHash, $remoteIp, $lifetime);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test two different set() of the cookie class (first set is invalid)
|
||||
*
|
||||
* @dataProvider dataSet
|
||||
*/
|
||||
public function testDoubleSet($serverKey, $uid, $password, $privateKey, $assertHash, $remoteIp, $serverArray, $lifetime)
|
||||
{
|
||||
$this->config->shouldReceive('get')->with('system', 'ssl_policy')->andReturn(1)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn($serverKey)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once();
|
||||
|
||||
$cookie = new StaticCookie($this->config, $serverArray);
|
||||
$this->assertInstanceOf(Cookie::class, $cookie);
|
||||
|
||||
// Invalid set, should get overwritten
|
||||
$cookie->set(-1, 'invalid', 'nothing', -234);
|
||||
|
||||
$cookie->set($uid, $password, $privateKey, $lifetime);
|
||||
|
||||
$this->assertCookie($uid, $assertHash, $remoteIp, $lifetime);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the clear() method of the cookie class
|
||||
*/
|
||||
public function testClear()
|
||||
{
|
||||
$this->markTestIncomplete('Needs mocking of setcookie() first.');
|
||||
StaticCookie::$_COOKIE = [
|
||||
Cookie::NAME => 'test'
|
||||
];
|
||||
|
||||
$this->config->shouldReceive('get')->with('system', 'ssl_policy')->andReturn(1)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'site_prvkey')->andReturn(24)->once();
|
||||
$this->config->shouldReceive('get')->with('system', 'auth_cookie_lifetime', Cookie::DEFAULT_EXPIRE)->andReturn(Cookie::DEFAULT_EXPIRE)->once();
|
||||
|
||||
$cookie = new StaticCookie($this->config, []);
|
||||
$this->assertInstanceOf(Cookie::class, $cookie);
|
||||
|
||||
$this->assertEquals('test', StaticCookie::$_COOKIE[Cookie::NAME]);
|
||||
$this->assertEquals(null, StaticCookie::$_EXPIRE);
|
||||
|
||||
$cookie->clear();
|
||||
|
||||
$this->assertEmpty(StaticCookie::$_COOKIE[Cookie::NAME]);
|
||||
$this->assertEquals(-3600, StaticCookie::$_EXPIRE);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue