Browse Source

Add test for Auth

ohartl 9 năm trước cách đây
mục cha
commit
c59789f425
1 tập tin đã thay đổi với 202 bổ sung0 xóa
  1. 202 0
      tests/AuthTest.php

+ 202 - 0
tests/AuthTest.php

@@ -0,0 +1,202 @@
+<?php
+
+require_once 'TestCase.php';
+
+/**
+ * @covers Auth
+ */
+class AuthTest extends TestCase
+{
+
+	public function tearDown()
+	{
+		Auth::logout();
+		$_SESSION = array();
+	}
+
+
+	public function testInitGuest()
+	{
+		$_SESSION = array();
+
+		Auth::init();
+
+		$this->assertFalse(Auth::isLoggedIn());
+		$this->assertNull(Auth::getUser());
+		$this->assertFalse(Auth::hasPermission(User::ROLE_USER));
+		$this->assertFalse(Auth::hasPermission(User::ROLE_ADMIN));
+	}
+
+	public function testInitUser()
+	{
+		$_SESSION = array(
+			Auth::SESSION_IDENTIFIER => self::USER_ROLE_USER_ID
+		);
+
+		Auth::init();
+
+		$this->assertTrue(Auth::isLoggedIn());
+		$this->assertInstanceOf('User', Auth::getUser());
+		$this->assertTrue(Auth::hasPermission(User::ROLE_USER));
+		$this->assertFalse(Auth::hasPermission(User::ROLE_ADMIN));
+	}
+
+
+	public function testInitAdmin()
+	{
+		$_SESSION = array(
+			Auth::SESSION_IDENTIFIER => self::USER_ROLE_ADMIN_ID
+		);
+
+		Auth::init();
+
+		$this->assertTrue(Auth::isLoggedIn());
+		$this->assertInstanceOf('User', Auth::getUser());
+		$this->assertTrue(Auth::hasPermission(User::ROLE_USER));
+		$this->assertTrue(Auth::hasPermission(User::ROLE_ADMIN));
+	}
+
+
+	public function testLogin()
+	{
+		$_SESSION = array();
+
+		Auth::init();
+
+		$this->assertFalse(Auth::isLoggedIn());
+
+		$this->assertTrue(Auth::login('user@domain.tld', 'testtest'));
+
+		$this->assertTrue(Auth::isLoggedIn());
+	}
+
+
+	public function testLoginInvalidEmail()
+	{
+		$_SESSION = array();
+
+		Auth::init();
+
+		$this->assertFalse(Auth::isLoggedIn());
+
+		$this->assertFalse(Auth::login('domain.tld', 'test'));
+
+		$this->assertFalse(Auth::isLoggedIn());
+	}
+
+
+	public function testLoginInvalidUser()
+	{
+		$_SESSION = array();
+
+		Auth::init();
+
+		$this->assertFalse(Auth::isLoggedIn());
+
+		$this->assertFalse(Auth::login('no.user@domain.tld', 'test'));
+
+		$this->assertFalse(Auth::isLoggedIn());
+	}
+
+
+	public function testLogout()
+	{
+		$_SESSION = array(
+			Auth::SESSION_IDENTIFIER => self::USER_ROLE_USER_ID
+		);
+
+		Auth::init();
+
+		$this->assertTrue(Auth::isLoggedIn());
+
+		Auth::logout();
+
+		$this->assertFalse(Auth::isLoggedIn());
+		$this->assertArrayNotHasKey(Auth::SESSION_IDENTIFIER, $_SESSION);
+	}
+
+
+	/**
+	 * @param int $length
+	 * @return string
+	 */
+	protected static function genTestPw($length)
+	{
+		return substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-+=_,!@$#*%<>[]{}"), 0, $length);
+	}
+
+
+	/**
+	 * @expectedException Exception
+	 * @expectedExceptionCode 2
+	 */
+	public function testValidateNewPasswordFirstEmpty()
+	{
+		Auth::validateNewPassword('', static::genTestPw(Config::get('password.min_length', 8)));
+	}
+
+
+	/**
+	 * @expectedException Exception
+	 * @expectedExceptionCode 2
+	 */
+	public function testValidateNewPasswordLastEmpty()
+	{
+		Auth::validateNewPassword(static::genTestPw(Config::get('password.min_length', 8)), '');
+	}
+
+
+	/**
+	 * @expectedException Exception
+	 * @expectedExceptionCode 3
+	 */
+	public function testValidateNewPasswordNotEqual()
+	{
+		$pw = static::genTestPw(Config::get('password.min_length', 8));
+		Auth::validateNewPassword($pw, $pw.'neq');
+	}
+
+
+	/**
+	 * @expectedException Exception
+	 * @expectedExceptionCode 4
+	 */
+	public function testValidateNewPasswordTooShort()
+	{
+		$pw = static::genTestPw(Config::get('password.min_length', 8) - 1);
+		Auth::validateNewPassword($pw, $pw);
+	}
+
+
+	public function testValidateNewPasswordOk()
+	{
+		$pw = static::genTestPw(Config::get('password.min_length', 8));
+		Auth::validateNewPassword($pw, $pw);
+	}
+
+
+	public function testGeneratePasswordHash()
+	{
+		Auth::generatePasswordHash(static::genTestPw(Config::get('password.min_length', 8)));
+	}
+
+
+	public function testGeneratePasswordHashAlgorithmFallback()
+	{
+		Config::set('password.hash_algorithm', '--not-an-algorithm--');
+		Auth::generatePasswordHash(static::genTestPw(Config::get('password.min_length', 8)));
+	}
+
+
+	public function testChangeUserPassword()
+	{
+		$this->assertTrue(Auth::login('user@domain.tld', 'testtest'));
+
+		Auth::changeUserPassword(static::USER_ROLE_USER_ID, 'newpassword');
+
+		$this->assertFalse(Auth::login('user@domain.tld', 'testtest'));
+
+		$this->assertTrue(Auth::login('user@domain.tld', 'newpassword'));
+	}
+
+}