Skip to content
Snippets Groups Projects
Commit b74fd618 authored by Andrew Hoffmann's avatar Andrew Hoffmann
Browse files

Federated preach tests are consistent with regular preauth tests

Renamed to follow class naming conventions. Pulled in new EnvironmentHelper to manage environment variables. Moved default test data from JSON file into source code so it’s easier to find. Reorganized/renamed tests to better describe their assertions.
parent 1477621c
No related branches found
No related tags found
1 merge request!12Test all the things!
<?php
namespace edu\wisc\doit\uwphps\preauth;
use edu\wisc\doit\uwphps\EnvironmentHelper;
/**
* Tests for {@link FederatedPreauthUserDetailsProvider}.
*/
class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase
{
use EnvironmentHelper;
/** @var array */
private $attributes;
/** @var FederatedPreauthUserDetailsProvider */
private $userProvider;
/** @var FederatedPreauthUserDetailsProvider configured to use HTTP headers */
private $userProviderHttp;
/** @var array environment variables to be set when testing */
private $environment;
protected function setUp()
{
$this->userProvider = new FederatedPreauthUserDetailsProvider(false);
$this->userProviderHttp = new FederatedPreauthUserDetailsProvider(true);
// Default environment variables
$this->environment = [
FederatedPreauthUserDetailsProvider::FULL_NAME => 'BUCKINGHAM BADGER',
FederatedPreauthUserDetailsProvider::EPPN => 'bbadger@wisc.edu',
FederatedPreauthUserDetailsProvider::FIRST_NAME => 'BUCKINGHAM',
FederatedPreauthUserDetailsProvider::EMAIL => 'bucky.badger@wisc.edu',
FederatedPreauthUserDetailsProvider::SHIB_SESSION_ID => '1234567890',
FederatedPreauthUserDetailsProvider::LAST_NAME => 'BADGER',
FederatedPreauthUserDetailsProvider::SOURCE => 'a_source',
FederatedPreauthUserDetailsProvider::SPVI => 'UW123A456',
FederatedPreauthUserDetailsProvider::ISIS_EMPLID => '123456789'
];
}
/** @test */
public function loadsNullUserWhenNoSession()
{
$this->removeEnvironmentVariable(FederatedPreauthUserDetailsProvider::SHIB_SESSION_ID);
$this->removeEnvironmentVariable(FederatedPreauthUserDetailsProvider::SHIB_SESSION_ID_HTTP);
static::assertNull($this->userProvider->loadUser());
static::assertNull($this->userProviderHttp->loadUser());
}
/** @test */
public function loadsUser()
{
$this->setEnvironment($this->environment);
$user = $this->userProvider->loadUser();
static::assertNotNull($user);
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::EPPN], $user->getEppn());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::SPVI], $user->getPvi());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::FULL_NAME], $user->getFullName());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::EMAIL], $user->getEmailAddress());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::SOURCE], $user->getSource());
static::assertEquals(
$this->environment[FederatedPreauthUserDetailsProvider::ISIS_EMPLID],
$user->getIsisEmplid()
);
static::assertEquals(
$this->environment[FederatedPreauthUserDetailsProvider::FIRST_NAME],
$user->getFirstName()
);
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::LAST_NAME], $user->getLastName());
}
/** @test */
public function loadsUserWithHttpHeaders()
{
$this->setEnvironment($this->toHttpHeaders($this->environment));
$user = $this->userProviderHttp->loadUser();
static::assertNotNull($user);
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::EPPN], $user->getEppn());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::SPVI], $user->getPvi());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::FULL_NAME], $user->getFullName());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::EMAIL], $user->getEmailAddress());
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::SOURCE], $user->getSource());
static::assertEquals(
$this->environment[FederatedPreauthUserDetailsProvider::ISIS_EMPLID],
$user->getIsisEmplid()
);
static::assertEquals(
$this->environment[FederatedPreauthUserDetailsProvider::FIRST_NAME],
$user->getFirstName()
);
static::assertEquals($this->environment[FederatedPreauthUserDetailsProvider::LAST_NAME], $user->getLastName());
}
/** @test */
public function missingAttributeIsFalse()
{
$this->setEnvironment($this->environment);
$this->removeEnvironmentVariable(FederatedPreauthUserDetailsProvider::EMAIL);
$user = $this->userProvider->loadUser();
static::assertNotNull($user);
static::assertFalse($user->getEmailAddress());
}
}
<?php
use edu\wisc\doit\uwphps\UserDetailsProvider;
use edu\wisc\doit\uwphps\preauth\FederatedPreauthUserDetailsProvider;
/**
* Tests for {@link FederatedPreauthUserDetailsProvider}.
*/
class HTTPFederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase
{
/** @var array */
private $attributes;
/** @var UserDetailsProvider */
private $userProvider;
/**
* Populate $_SERVER with Shib attributes to simulate a logged in user
*/
protected function setUp()
{
$jsonString = file_get_contents(__DIR__ . "/../../../../../resources/testuser_http.json");
if ($jsonString === false) {
return null;
}
$this->attributes = json_decode($jsonString, true);
$this->userProvider = new FederatedPreauthUserDetailsProvider(true);
putenv($this->mapAttribute(UserDetailsProvider::EPPN) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::EPPN)]);
putenv($this->mapAttribute(FederatedPreauthUserDetailsProvider::SPVI) . '=' . $this->attributes[$this->mapAttribute(FederatedPreauthUserDetailsProvider::SPVI)]);
putenv($this->mapAttribute(FederatedPreauthUserDetailsProvider::FULL_NAME) . '=' . $this->attributes[$this->mapAttribute(FederatedPreauthUserDetailsProvider::FULL_NAME)]);
putenv($this->mapAttribute(FederatedPreauthUserDetailsProvider::FIRST_NAME) . '=' . $this->attributes[$this->mapAttribute(FederatedPreauthUserDetailsProvider::FIRST_NAME)]);
putenv($this->mapAttribute(FederatedPreauthUserDetailsProvider::LAST_NAME) . '=' . $this->attributes[$this->mapAttribute(FederatedPreauthUserDetailsProvider::LAST_NAME)]);
putenv($this->mapAttribute(UserDetailsProvider::UDDS) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::UDDS)]);
putenv($this->mapAttribute(FederatedPreauthUserDetailsProvider::EMAIL) . '=' . $this->attributes[$this->mapAttribute(FederatedPreauthUserDetailsProvider::EMAIL)]);
putenv($this->mapAttribute(UserDetailsProvider::SOURCE) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::SOURCE)]);
putenv($this->mapAttribute(UserDetailsProvider::ISIS_EMPLID) . '=' . $this->attributes[$this->mapAttribute(UserDetailsProvider::ISIS_EMPLID)]);
putenv(UserDetailsProvider::SHIB_SESSION_ID_HTTP . '=' . $this->attributes[UserDetailsProvider::SHIB_SESSION_ID_HTTP]);
}
/**
* @test
*/
public function loadUser()
{
$user = $this->userProvider->loadUser();
$this->assertNotNull($user);
$this->assertEquals("bbadger@wisc.edu", $user->getEppn());
$this->assertEquals("UW123A456", $user->getPvi());
$this->assertEquals("BUCKINGHAM BADGER", $user->getFullName());
$this->assertEquals("bucky.badger@wisc.edu", $user->getEmailAddress());
$this->assertEquals("a_source", $user->getSource());
$this->assertEquals("123456789", $user->getIsisEmplid());
$this->assertEquals("BUCKINGHAM", $user->getFirstName());
$this->assertEquals("BADGER", $user->getLastName());
$this->assertEquals(["A061234", "A072345"], $user->getUddsMembership());
}
/**
* @test
*/
public function loadUserWithNoEPPN()
{
// Clear Shib session ID to simulate no session
putenv(UserDetailsProvider::SHIB_SESSION_ID_HTTP);
$user = $this->userProvider->loadUser();
$this->assertNull($user);
}
/**
* @test
*/
public function loadUserWithNoEmail()
{
// Clear email to simulate no email
putenv('HTTP_' . strtoupper(FederatedPreauthUserDetailsProvider::EMAIL));
$user = $this->userProvider->loadUser();
$this->assertFalse($user->getEmailAddress());
}
private function mapAttribute($attribute)
{
return 'HTTP_' . strtoupper($attribute);
}
}
{
"HTTP_EPPN": "bbadger@wisc.edu",
"HTTP_EDUWISCONSINSPVI": "UW123A456",
"HTTP_CN": "BUCKINGHAM BADGER",
"HTTP_EDUWISCONSINCOMMONNAME": "BUCKINGHAM BADGER",
"HTTP_EDUWISCONSINGIVENNAME": "BUCKINGHAM",
"HTTP_EDUWISCONSINSURNAME": "BADGER",
"HTTP_UDDS": "A061234;A072345",
"HTTP_EDUWISCONSINEMAILADDRESS": "bucky.badger@wisc.edu",
"HTTP_SOURCE": "a_source",
"HTTP_ISISEMPLID": "123456789",
"HTTP_SHIB_SESSION_ID": "1234567890"
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment