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