diff --git a/tests/Cms/Users/UserTest.php b/tests/Cms/Users/UserTest.php index 52319404a5..be65294690 100644 --- a/tests/Cms/Users/UserTest.php +++ b/tests/Cms/Users/UserTest.php @@ -239,56 +239,63 @@ public function testUserModel() User::$models = []; } - - public function testLoginHooks() + + public function testLoginLogoutHooks() { - $phpUnit = $this; - + $phpunit = $this; + + $calls = 0; + $logoutSession = false; $app = new App([ 'users' => [ ['email' => 'test@getkirby.com'] ], 'hooks' => [ - 'user.login:before' => function ($user, $session) use ($phpUnit) { - $phpUnit->assertEquals('test@getkirby.com', $user->email()); - $phpUnit->assertEquals($session, S::instance()); + 'user.login:before' => function ($user, $session) use ($phpunit, &$calls) { + $phpunit->assertEquals('test@getkirby.com', $user->email()); + $phpunit->assertEquals($session, S::instance()); + + $calls += 1; }, - 'user.login:after' => function ($user, $session) use ($phpUnit) { - $phpUnit->assertEquals('test@getkirby.com', $user->email()); - $phpUnit->assertEquals($session, S::instance()); - } - ] - ]); + 'user.login:after' => function ($user, $session) use ($phpunit, &$calls) { + $phpunit->assertEquals('test@getkirby.com', $user->email()); + $phpunit->assertEquals($session, S::instance()); - $user = $app->user('test@getkirby.com'); - $user->loginPasswordless(); - $user->logout(); - } + $calls += 2; + }, + 'user.logout:before' => function ($user, $session) use ($phpunit, &$calls) { + $phpunit->assertEquals('test@getkirby.com', $user->email()); + $phpunit->assertEquals($session, S::instance()); - public function testLogoutHooks() - { - $phpUnit = $this; - - $app = new App([ - 'users' => [ - ['email' => 'test@getkirby.com'] - ], - 'hooks' => [ - 'user.logout:before' => function ($user, $session) use ($phpUnit) { - $phpUnit->assertEquals('test@getkirby.com', $user->email()); - $phpUnit->assertEquals($session, S::instance()); + $calls += 4; }, - 'user.logout:after' => function ($user, $session) use ($phpUnit) { - $phpUnit->assertEquals('test@getkirby.com', $user->email()); - if ($session !== null) { - $phpUnit->assertEquals($session, S::instance()); + 'user.logout:after' => function ($user, $session) use ($phpunit, &$calls, &$logoutSession) { + $phpunit->assertEquals('test@getkirby.com', $user->email()); + + if ($logoutSession === true) { + $phpunit->assertEquals($session, S::instance()); + $phpunit->assertEquals('value', S::instance()->get('some')); + } else { + $phpunit->assertNull($session); } + + $calls += 8; } ] ]); + // without prepopulated session $user = $app->user('test@getkirby.com'); $user->loginPasswordless(); $user->logout(); + + // with a session with another value + S::instance()->set('some', 'value'); + $logoutSession = true; + $user->loginPasswordless(); + $user->logout(); + + // each hook needs to be called exactly twice + $this->assertEquals((1 + 2 + 4 + 8) * 2, $calls); } }