Browse Source

Merge pull request #1485 from laravie/feature/auth-events

Add 'laravel.auth: login' and 'laravel.auth: logout' events.
Taylor Otwell 12 years ago
parent
commit
22c2c3843a
2 changed files with 42 additions and 0 deletions
  1. 5 0
      laravel/auth/drivers/driver.php
  2. 37 0
      laravel/tests/cases/auth.test.php

+ 5 - 0
laravel/auth/drivers/driver.php

@@ -3,6 +3,7 @@
 use Laravel\Str;
 use Laravel\Cookie;
 use Laravel\Config;
+use Laravel\Event;
 use Laravel\Session;
 use Laravel\Crypter;
 
@@ -112,6 +113,8 @@ abstract class Driver {
 
 		if ($remember) $this->remember($token);
 
+		Event::fire('laravel.auth: login');
+
 		return true;
 	}
 
@@ -128,6 +131,8 @@ abstract class Driver {
 
 		Session::forget($this->token());
 
+		Event::fire('laravel.auth: logout');
+
 		$this->token = null;
 	}
 

+ 37 - 0
laravel/tests/cases/auth.test.php

@@ -17,6 +17,9 @@ class AuthTest extends PHPUnit_Framework_TestCase {
 	public function setUp()
 	{
 		$_SERVER['auth.login.stub'] = null;
+		$_SERVER['test.user.login'] = null;
+		$_SERVER['test.user.logout'] = null;
+
 		Cookie::$jar = array();
 		Config::$items = array();
 		Auth::driver()->user = null;
@@ -30,6 +33,9 @@ class AuthTest extends PHPUnit_Framework_TestCase {
 	public function tearDown()
 	{
 		$_SERVER['auth.login.stub'] = null;
+		$_SERVER['test.user.login'] = null;
+		$_SERVER['test.user.logout'] = null;
+		
 		Cookie::$jar = array();
 		Config::$items = array();
 		Auth::driver()->user = null;
@@ -300,6 +306,37 @@ class AuthTest extends PHPUnit_Framework_TestCase {
 		$this->assertTrue(Cookie::$jar['laravel_auth_drivers_fluent_remember']['expiration'] < time());
 	}
 
+	/**
+	 * Test `laravel.auth: login` and `laravel.auth: logout` is called properly
+	 *
+	 * @group laravel
+	 */
+	public function testAuthEventIsCalledProperly()
+	{
+		Session::$instance = new Payload($this->getMock('Laravel\\Session\\Drivers\\Driver'));
+
+		Event::listen('laravel.auth: login', function ()
+		{
+			$_SERVER['test.user.login'] = 'foo';
+		});
+
+		Event::listen('laravel.auth: logout', function ()
+		{
+			$_SERVER['test.user.logout'] = 'foo';
+		});
+
+		$this->assertNull($_SERVER['test.user.login']);
+		$this->assertNull($_SERVER['test.user.logout']);
+		
+		Auth::login(1, true);
+
+		$this->assertEquals('foo', $_SERVER['test.user.login']);
+
+		Auth::logout();
+
+		$this->assertEquals('foo', $_SERVER['test.user.logout']);
+	}
+
 }
 
 class AuthUserReturnsNull extends Laravel\Auth\Drivers\Driver {