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