55use Mockery as m ;
66use Adldap \Query \Builder ;
77use Adldap \Laravel \Facades \Resolver ;
8+ use Adldap \Laravel \Tests \Models \TestUser ;
9+ use Adldap \Laravel \Validation \Rules \DenyTrashed ;
810use Adldap \Laravel \Middleware \WindowsAuthenticate ;
911
1012class WindowsAuthenticateTest extends DatabaseTestCase
@@ -16,8 +18,6 @@ public function middleware_authenticates_users()
1618
1719 $ request ->server ->set ('AUTH_USER ' , 'jdoe ' );
1820
19- $ middleware = app (WindowsAuthenticate::class);
20-
2121 $ user = $ this ->makeLdapUser ([
2222 'objectguid ' => ['cc07cacc-5d9d-fa40-a9fb-3a4d50a172b0 ' ],
2323 'cn ' => ['John Doe ' ],
@@ -35,10 +35,9 @@ public function middleware_authenticates_users()
3535 ->shouldReceive ('getDatabaseIdColumn ' )->twice ()->andReturn ('objectguid ' )
3636 ->shouldReceive ('getDatabaseUsernameColumn ' )->once ()->andReturn ('email ' )
3737 ->shouldReceive ('getLdapDiscoveryAttribute ' )->once ()->andReturn ('userprincipalname ' )
38- ->shouldReceive ('byModel ' )->once ()->andReturn (( $ user) );
38+ ->shouldReceive ('byModel ' )->once ()->andReturn ($ user );
3939
40- $ middleware ->handle ($ request , function () {
41- });
40+ app (WindowsAuthenticate::class)->handle ($ request , function () {});
4241
4342 $ authenticated = auth ()->user ();
4443
@@ -55,8 +54,6 @@ public function middleware_continues_request_when_user_is_not_found()
5554
5655 $ request ->server ->set ('AUTH_USER ' , 'jdoe ' );
5756
58- $ middleware = app (WindowsAuthenticate::class);
59-
6057 $ query = m::mock (Builder::class);
6158
6259 $ query
@@ -65,9 +62,51 @@ public function middleware_continues_request_when_user_is_not_found()
6562
6663 Resolver::shouldReceive ('query ' )->once ()->andReturn ($ query );
6764
68- $ middleware ->handle ($ request , function () {
65+ app (WindowsAuthenticate::class)->handle ($ request , function () {});
66+
67+ $ this ->assertNull (auth ()->user ());
68+ }
69+
70+ /** @test */
71+ public function middleware_validates_authenticating_users ()
72+ {
73+ // Deny deleted users from authenticating.
74+ config ()->set ('ldap_auth.rules ' , [DenyTrashed::class]);
75+
76+ // Create the deleted user.
77+ tap (new TestUser (), function ($ user ) {
78+ $ user ->name = 'John Doe ' ;
79+ $ user->
email =
'[email protected] ' ;
80+ $ user ->password = 'secret ' ;
81+ $ user ->deleted_at = now ();
82+
83+ $ user ->save ();
6984 });
7085
86+ $ request = app ('request ' );
87+
88+ $ request ->server ->set ('AUTH_USER ' , 'jdoe ' );
89+
90+ $ user = $ this ->makeLdapUser ([
91+ 'objectguid ' => ['cc07cacc-5d9d-fa40-a9fb-3a4d50a172b0 ' ],
92+ 'cn ' => ['John Doe ' ],
93+ 'userprincipalname ' => [
'[email protected] ' ],
94+ 'samaccountname ' => ['jdoe ' ],
95+ ]);
96+
97+ $ query = m::mock (Builder::class);
98+
99+ $ query
100+ ->shouldReceive ('whereEquals ' )->once ()->withArgs (['samaccountname ' , 'jdoe ' ])->andReturn ($ query )
101+ ->shouldReceive ('first ' )->once ()->andReturn ($ user );
102+
103+ Resolver::shouldReceive ('query ' )->once ()->andReturn ($ query )
104+ ->shouldReceive ('getDatabaseIdColumn ' )->twice ()->andReturn ('objectguid ' )
105+ ->shouldReceive ('getDatabaseUsernameColumn ' )->once ()->andReturn ('email ' )
106+ ->shouldReceive ('getLdapDiscoveryAttribute ' )->once ()->andReturn ('userprincipalname ' );
107+
108+ app (WindowsAuthenticate::class)->handle ($ request , function () {});
109+
71110 $ this ->assertNull (auth ()->user ());
72111 }
73112}
0 commit comments