From 4106c401e635e97dc4f52e89b30c4110840cd7c4 Mon Sep 17 00:00:00 2001
From: Andy Summers <andrew.summers@wisc.edu>
Date: Mon, 25 Jul 2016 14:58:59 -0500
Subject: [PATCH] Add test for user with no email

---
 ...ederatedPreauthUserDetailsProviderTest.php | 71 +++++++++++++++----
 1 file changed, 56 insertions(+), 15 deletions(-)

diff --git a/src/test/edu/wisc/doit/FederatedPreauthUserDetailsProviderTest.php b/src/test/edu/wisc/doit/FederatedPreauthUserDetailsProviderTest.php
index d0c5b71..4accd8e 100644
--- a/src/test/edu/wisc/doit/FederatedPreauthUserDetailsProviderTest.php
+++ b/src/test/edu/wisc/doit/FederatedPreauthUserDetailsProviderTest.php
@@ -9,6 +9,9 @@ use edu\wisc\doit\FederatedPreauthUserDetailsProvider;
 class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCase
 {
 
+    /** @var array */
+    private $attributes;
+
     /** @var UserDetailsProvider */
     private $userProvider;
 
@@ -23,21 +26,13 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas
             return null;
         }
 
-        $attributes = json_decode($jsonString, true);
-        putenv(UserDetailsProvider::FED_EPPN . '=' . $attributes[UserDetailsProvider::FED_EPPN]);
-        putenv(UserDetailsProvider::FED_SPVI . '=' . $attributes[UserDetailsProvider::FED_SPVI]);
-        putenv(UserDetailsProvider::FED_FULLNAME . '=' . $attributes[UserDetailsProvider::FED_FULLNAME]);
-        putenv(UserDetailsProvider::FED_FIRST_NAME . '=' . $attributes[UserDetailsProvider::FED_FIRST_NAME]);
-        putenv(UserDetailsProvider::FED_LAST_NAME . '=' . $attributes[UserDetailsProvider::FED_LAST_NAME]);
-        putenv(UserDetailsProvider::UDDS . '=' . implode(",", $attributes[UserDetailsProvider::UDDS]));
-        putenv(UserDetailsProvider::FED_EMAIL . '=' . $attributes[UserDetailsProvider::FED_EMAIL]);
-        putenv(UserDetailsProvider::SOURCE . '=' . $attributes[UserDetailsProvider::SOURCE]);
-        putenv(UserDetailsProvider::ISIS_EMPLID . '=' . $attributes[UserDetailsProvider::ISIS_EMPLID]);
-        putenv(UserDetailsProvider::SHIB_SESSION_ID  . '=' . $attributes[UserDetailsProvider::SHIB_SESSION_ID]);
+        $this->attributes = json_decode($jsonString, true);
     }
 
-    public function testLoadUser() {
-        $this->userProvider = new FederatedPreauthUserDetailsProvider();
+    public function testLoadUser()
+    {
+        $this->setupHttpPreauthEnvironment();
+        $this->userProvider = new FederatedPreauthUserDetailsProvider(true);
         $user = $this->userProvider->loadUser();
         $this->assertNotNull($user);
         $this->assertEquals("bbadger@wisc.edu", $user->getEppn());
@@ -50,12 +45,58 @@ class FederatedPreauthUserDetailsProviderTest extends \PHPUnit_Framework_TestCas
         $this->assertEquals("BADGER", $user->getLastName());
     }
 
-    public function testLoadUserWithNoEPPN() {
-        $this->userProvider = new FederatedPreauthUserDetailsProvider();
+    public function testLoadUserWithNoEPPN()
+    {
+        $this->setupHttpPreauthEnvironment();
+        $this->userProvider = new FederatedPreauthUserDetailsProvider(true);
         // Clear Shib session ID to simulate no session
         putenv(UserDetailsProvider::SHIB_SESSION_ID);
         $user = $this->userProvider->loadUser();
         $this->assertNull($user);
     }
 
+    public function testLoadUserWithNoEmail()
+    {
+        $this->setupHttpPreauthEnvironment();
+        $this->userProvider = new FederatedPreauthUserDetailsProvider(true);
+        // Clear email to simulate no email
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_EMAIL));
+        $user = $this->userProvider->loadUser();
+        $this->assertFalse($user->getEmailAddress());
+    }
+
+    /**
+     * Setup environment to simulate a Preauth (Shib) environment.
+     */
+    private function setupPreauthEnvironment()
+    {
+        putenv(UserDetailsProvider::FED_EPPN . '=' . $this->attributes[UserDetailsProvider::FED_EPPN]);
+        putenv(UserDetailsProvider::FED_SPVI . '=' . $this->attributes[UserDetailsProvider::FED_SPVI]);
+        putenv(UserDetailsProvider::FED_FULLNAME . '=' . $this->attributes[UserDetailsProvider::FED_FULLNAME]);
+        putenv(UserDetailsProvider::FED_FIRST_NAME . '=' . $this->attributes[UserDetailsProvider::FED_FIRST_NAME]);
+        putenv(UserDetailsProvider::FED_LAST_NAME . '=' . $this->attributes[UserDetailsProvider::FED_LAST_NAME]);
+        putenv(UserDetailsProvider::UDDS . '=' . implode(",", $this->attributes[UserDetailsProvider::UDDS]));
+        putenv(UserDetailsProvider::FED_EMAIL . '=' . $this->attributes[UserDetailsProvider::FED_EMAIL]);
+        putenv(UserDetailsProvider::SOURCE . '=' . $this->attributes[UserDetailsProvider::SOURCE]);
+        putenv(UserDetailsProvider::ISIS_EMPLID . '=' . $this->attributes[UserDetailsProvider::ISIS_EMPLID]);
+        putenv(UserDetailsProvider::SHIB_SESSION_ID  . '=' . $this->attributes[UserDetailsProvider::SHIB_SESSION_ID]);
+    }
+
+    /**
+     * Setup environment to simulate HTTP Preauth.
+     */
+    private function setupHttpPreauthEnvironment()
+    {
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_EPPN) . '=' . $this->attributes[UserDetailsProvider::FED_EPPN]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_SPVI) . '=' . $this->attributes[UserDetailsProvider::FED_SPVI]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_FULLNAME) . '=' . $this->attributes[UserDetailsProvider::FED_FULLNAME]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_FIRST_NAME) . '=' . $this->attributes[UserDetailsProvider::FED_FIRST_NAME]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_LAST_NAME) . '=' . $this->attributes[UserDetailsProvider::FED_LAST_NAME]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::UDDS) . '=' . implode(",", $this->attributes[UserDetailsProvider::UDDS]));
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::FED_EMAIL) . '=' . $this->attributes[UserDetailsProvider::FED_EMAIL]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::SOURCE) . '=' . $this->attributes[UserDetailsProvider::SOURCE]);
+        putenv('HTTP_' . strtoupper(UserDetailsProvider::ISIS_EMPLID) . '=' . $this->attributes[UserDetailsProvider::ISIS_EMPLID]);
+        putenv(UserDetailsProvider::SHIB_SESSION_ID  . '=' . $this->attributes[UserDetailsProvider::SHIB_SESSION_ID]);
+    }
+
 }
-- 
GitLab