2017-06-19 2 views
0

Ich verwende das Shibboleth-Apache-Modul für Single Sign-On. Er setzt die Variable $_SERVER mit den Berechtigungen eines Benutzers aus dem Active Directory. In meiner Laravel-Anwendung verwende ich einen benutzerdefinierten Authentifizierungs- und Benutzeranbieter, der diese Berechtigungen für die Ressourcenautorisierung nutzt.

Mein vereinfachte Benutzermodell hat etwas Ähnliches:

public function isAdmin() 
{ 
    return Request::server('entitlement') === 'admin'; 
} 

Allerdings kann ich nicht herausfinden, wie dies zu testen, weil Request::server immer nichts für diesen Wert zurückgibt.

public function setUp() 
{ 
    $_SERVER['entitlement'] = 'admin'; 
    parent::setUp(); 
} 

public function test_admin_something() 
{ 
    $user = factory(User::class)->create(); 

    $response = $this 
     ->actingAs($user) 
     ->get('/admin/somewhere'); 

    var_dump($_SERVER['entitlement']);  // string(5) "admin" 
    var_dump(Request::server('entitlement')); // NULL 

    $response->assertStatus(200); // always fails 403 
} 

Ich habe auch versucht setUpBeforeClass und kontrolliert alle anderen Server-Variablen, die während des Tests anstelle eines benutzerdefinierten gestaltete Request-Objekt ignoriert zu werden scheinen. Ich kann auch nicht die Anfrage Fassade, per the documentation verspotten.

+1

Ändern Versuchen '-> get ('/ admin/irgendwo')' auf '-> Aufruf ('GET', '/ admin/irgendwo', ['Berechtigung' => 'admin']); '. Siehe: https://laravel.com/docs/5.2/testing#custom-http-requests – btl

+0

Welche Testsuite verwenden Sie und welche Version? – Ohgodwhy

+0

@Ohgodwhy phpunit 5.7.20 laravel 5.4.24 –

Antwort

0

in the source code Graben offenbart ein nicht dokumentiertes Verfahren withServerVariables

public function test_admin_something() 
{ 
    $user = factory(User::class)->create(); 

    $response = $this 
     ->withServerVariables(['entitlement' => 'admin']) 
     ->actingAs($user) 
     ->get('/admin/somewhere'); 

    $response->assertStatus(200); 
} 
Verwandte Themen