diff --git a/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..5614843da4883a00ca3ab350f4a3be46fa3757b9 --- /dev/null +++ b/src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php @@ -0,0 +1,110 @@ +<?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()); + } +} diff --git a/src/test/edu/wisc/doit/uwphps/preauth/HTTPFederatedPreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/preauth/HTTPFederatedPreauthUserDetailsProviderTest.php deleted file mode 100644 index 3d43e21085ed20ca0cc4f4a72e247e331ac88fc3..0000000000000000000000000000000000000000 --- a/src/test/edu/wisc/doit/uwphps/preauth/HTTPFederatedPreauthUserDetailsProviderTest.php +++ /dev/null @@ -1,88 +0,0 @@ -<?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); - } - -} diff --git a/src/test/resources/testuser_http.json b/src/test/resources/testuser_http.json deleted file mode 100644 index 0d7f59178d65cfa4a37197a1bf1a828d5237fddf..0000000000000000000000000000000000000000 --- a/src/test/resources/testuser_http.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "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