From b74fd618b5a885f49440ca15b69d27cb094f1b27 Mon Sep 17 00:00:00 2001 From: Andrew Hoffmann <andrew.hoffmann@wisc.edu> Date: Tue, 6 Dec 2016 12:53:56 -0600 Subject: [PATCH] Federated preach tests are consistent with regular preauth tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- ...ederatedPreauthUserDetailsProviderTest.php | 110 ++++++++++++++++++ ...ederatedPreauthUserDetailsProviderTest.php | 88 -------------- src/test/resources/testuser_http.json | 13 --- 3 files changed, 110 insertions(+), 101 deletions(-) create mode 100644 src/test/edu/wisc/doit/uwphps/preauth/FederatedPreauthUserDetailsProviderTest.php delete mode 100644 src/test/edu/wisc/doit/uwphps/preauth/HTTPFederatedPreauthUserDetailsProviderTest.php delete mode 100644 src/test/resources/testuser_http.json 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 0000000..5614843 --- /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 3d43e21..0000000 --- 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 0d7f591..0000000 --- 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 -- GitLab