From 1477621c7ae200fae25e6638e0df0192f9e3b668 Mon Sep 17 00:00:00 2001 From: Andrew Hoffmann <andrew.hoffmann@wisc.edu> Date: Tue, 6 Dec 2016 10:51:08 -0600 Subject: [PATCH] Create missing tests for PreauthUserDetailsProvider Introduce a `trait` that helps set environment variables when testing --- .../wisc/doit/uwphps/EnvironmentHelper.php | 44 ++++++++++ .../PreauthUserDetailsProviderTest.php | 85 +++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 src/test/edu/wisc/doit/uwphps/EnvironmentHelper.php create mode 100644 src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php diff --git a/src/test/edu/wisc/doit/uwphps/EnvironmentHelper.php b/src/test/edu/wisc/doit/uwphps/EnvironmentHelper.php new file mode 100644 index 0000000..30cbb1a --- /dev/null +++ b/src/test/edu/wisc/doit/uwphps/EnvironmentHelper.php @@ -0,0 +1,44 @@ +<?php +namespace edu\wisc\doit\uwphps; + +trait EnvironmentHelper +{ + + /** + * Sets environment variables + * + * @param array $environment pairs of environment variable names and values + */ + private function setEnvironment(array $environment) + { + array_walk($environment, function ($value, $key) { + putenv("$key=$value"); + }); + } + + /** + * Removes the given environment variable from the environment + * + * @param string $variable name of environment variable + */ + private function removeEnvironmentVariable($variable) + { + putenv($variable); + } + + /** + * Converts environment variable names to their HTTP header equivalents + * + * @param array $environment + * @return array environment with variable names converted to HTTP headers + * @see UserDetailsProvider::httpHeaderFromAttribute() + */ + private function toHttpHeaders(array $environment) + { + foreach ($environment as $key => $value) { + $environment[UserDetailsProvider::httpHeaderFromAttribute($key)] = $value; + unset($environment[$key]); + } + return $environment; + } +} diff --git a/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php new file mode 100644 index 0000000..138d9a9 --- /dev/null +++ b/src/test/edu/wisc/doit/uwphps/preauth/PreauthUserDetailsProviderTest.php @@ -0,0 +1,85 @@ +<?php +namespace edu\wisc\doit\uwphps\preauth; + +use edu\wisc\doit\uwphps\EnvironmentHelper; +use edu\wisc\doit\uwphps\UserDetailsProvider; + +/** + * Tests for {@link PreauthUserDetailsProvider} + */ +class PreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase +{ + + use EnvironmentHelper; + + /** @var PreauthUserDetailsProvider */ + private $provider; + + /** @var PreauthUserDetailsProvider */ + private $providerWithHttp; + + /** @var array environment variables to be set */ + private $environment; + + protected function setUp() + { + $this->provider = new PreauthUserDetailsProvider(false); + $this->providerWithHttp = new PreauthUserDetailsProvider(true); + + // Default environment variables + $this->environment = [ + PreauthUserDetailsProvider::FULL_NAME => 'BUCKINGHAM BADGER', + PreauthUserDetailsProvider::EPPN => 'bbadger@wisc.edu', + PreauthUserDetailsProvider::FIRST_NAME => 'BUCKINGHAM', + PreauthUserDetailsProvider::EMAIL => 'bucky.badger@wisc.edu', + PreauthUserDetailsProvider::SHIB_SESSION_ID => '1234567890', + PreauthUserDetailsProvider::LAST_NAME => 'BADGER', + PreauthUserDetailsProvider::SOURCE => 'a_source', + PreauthUserDetailsProvider::PVI => 'UW123A456', + PreauthUserDetailsProvider::ISIS_EMPLID => '123456789' + ]; + } + + /** @test */ + public function loadsNullUserWhenNoSession() + { + // Ensure the Shib Session ID environment variables are deleted + $this->removeEnvironmentVariable(UserDetailsProvider::SHIB_SESSION_ID); + $this->removeEnvironmentVariable(UserDetailsProvider::SHIB_SESSION_ID_HTTP); + static::assertNull($this->provider->loadUser()); + static::assertNull($this->providerWithHttp->loadUser()); + } + + /** @test */ + public function loadsUser() + { + $this->setEnvironment($this->environment); + + $user = $this->provider->loadUser(); + + $this->assertEquals($this->environment[PreauthUserDetailsProvider::EPPN], $user->getEppn()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::PVI], $user->getPvi()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::FULL_NAME], $user->getFullName()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::EMAIL], $user->getEmailAddress()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::SOURCE], $user->getSource()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::ISIS_EMPLID], $user->getIsisEmplid()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::FIRST_NAME], $user->getFirstName()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + } + + /** @test */ + public function loadsUserWithHttpHeaders() + { + $this->setEnvironment($this->toHttpHeaders($this->environment)); + $user = $this->providerWithHttp->loadUser(); + + $this->assertEquals($this->environment[PreauthUserDetailsProvider::EPPN], $user->getEppn()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::PVI], $user->getPvi()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::FULL_NAME], $user->getFullName()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::EMAIL], $user->getEmailAddress()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::SOURCE], $user->getSource()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::ISIS_EMPLID], $user->getIsisEmplid()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::FIRST_NAME], $user->getFirstName()); + $this->assertEquals($this->environment[PreauthUserDetailsProvider::LAST_NAME], $user->getLastName()); + } +} -- GitLab