From 31804c0e410e3e168b8bec52c94be4ea334bdbd0 Mon Sep 17 00:00:00 2001
From: Nicholas Blair <nicholas.blair@wisc.edu>
Date: Tue, 13 Sep 2016 11:48:39 -0500
Subject: [PATCH] fix: filter test needs to use correct case for 'isMemberOf'

Also refactored AttributesMapper test to remove duplicate code and include test for 'blank' values.
---
 ...ticatedUserDetailsAttributeMapperTest.java | 118 +++++++++---------
 ...UWUserDetailsAuthenticationFilterTest.java |   2 +-
 2 files changed, 57 insertions(+), 63 deletions(-)

diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
index 9f6ee0d..76f0501 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
@@ -40,35 +40,15 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
    */
   @Test
   public void mapUser_success() {
-    MockHttpServletRequest request = new MockHttpServletRequest();
-    String uid = "somebody";
-    String eppn = "somebody@wisc.edu";
-    String pvi = "1234567";
-    String name = "some body";
-    String email = "some.body@wisc.edu";
-    String emplid = "0000123456";
-    
-    request.addHeader("eppn", eppn);
-    request.addHeader("wiscedupvi", pvi);
-    request.addHeader("uid", uid);
-    request.addHeader("cn", name);
-    request.addHeader("mail", email);
+    MockHttpServletRequest request = mockRequest();
     request.addHeader("wisceduudds", "udds1234");
-    request.addHeader("wisceduisisemplid", emplid);
-    request.addHeader("Shib-Identity-Provider", "https://logintest.wisc.edu/idp/shibboleth");
     request.addHeader("isMemberOf", "uw:domain:something");
     
     UWUserDetails result = filter.mapUser(request);
-    
     assertNotNull(result);
-    assertEquals(uid, result.getUsername());
-    assertEquals(eppn, result.getEppn());
-    assertEquals(pvi, result.getPvi());
-    assertEquals(name, result.getFullName());
-    assertEquals(email, result.getEmailAddress());
+    assertMockAttributes(result);
+
     assertEquals(Collections.singletonList("udds1234"), result.getUddsMembership());
-    assertEquals(emplid, result.getIsisEmplid());
-    assertEquals("/Shibboleth.sso/Logout?return=https://logintest.wisc.edu/logout/", result.getCustomLogoutUrl());
     assertEquals(1,result.getAuthorities().size());
     assertTrue(result.getAuthorities().contains(new SimpleGrantedAuthority("uw:domain:something")));
   }
@@ -79,35 +59,26 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
    */
   @Test
   public void mapUser_empty_isMemberOf() {
-    MockHttpServletRequest request = new MockHttpServletRequest();
-    String uid = "somebody";
-    String eppn = "somebody@wisc.edu";
-    String pvi = "1234567";
-    String name = "some body";
-    String email = "some.body@wisc.edu";
-    String emplid = "0000123456";
-    List<String> uddsMembership = Collections.singletonList("udds1234");
-
-    request.addHeader("eppn", eppn);
-    request.addHeader("wiscedupvi", pvi);
-    request.addHeader("uid", uid);
-    request.addHeader("cn", name);
-    request.addHeader("mail", email);
-    request.addHeader("wisceduudds", uddsMembership);
-    request.addHeader("wisceduisisemplid", emplid);
-    request.addHeader("Shib-Identity-Provider", "https://logintest.wisc.edu/idp/shibboleth");
+    MockHttpServletRequest request = mockRequest();
 
     UWUserDetails result = filter.mapUser(request);
+    assertNotNull(result);
+    assertMockAttributes(result);
+    assertEquals(0, result.getAuthorities().size());
+  }
+  /**
+   * Verify expected behaviour for {@link PreauthenticatedUserDetailsAttributeMapper#mapUser(HttpServletRequest)}
+   * when the isMemberOf contains blank values.
+   */
+  @Test
+  public void mapUser_isMemberOf_contains_blank_values() {
+    MockHttpServletRequest request = mockRequest();
+    request.addHeader("isMemberOf", "");
+    request.addHeader("isMemberOf", "      ");
 
+    UWUserDetails result = filter.mapUser(request);
     assertNotNull(result);
-    assertEquals(uid, result.getUsername());
-    assertEquals(eppn, result.getEppn());
-    assertEquals(pvi, result.getPvi());
-    assertEquals(name, result.getFullName());
-    assertEquals(email, result.getEmailAddress());
-    assertEquals(uddsMembership, result.getUddsMembership());
-    assertEquals(emplid, result.getIsisEmplid());
-    assertEquals("/Shibboleth.sso/Logout?return=https://logintest.wisc.edu/logout/", result.getCustomLogoutUrl());
+    assertMockAttributes(result);
     assertEquals(0, result.getAuthorities().size());
   }
   /**
@@ -116,19 +87,15 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
    */
   @Test
   public void mapUser_multipleManifestGroups() {
-    MockHttpServletRequest request = new MockHttpServletRequest();
-
-    String uid = "somebody";
-
-    request.addHeader("uid", uid);
+    MockHttpServletRequest request = mockRequest();
     request.addHeader("isMemberOf", "uw:domain:onegroup");
     request.addHeader("isMemberOf", "uw:domain:anothergroup");
 
     UWUserDetails result = filter.mapUser(request);
+    assertNotNull(result);
+    assertMockAttributes(result);
 
-    assertEquals(uid, result.getUsername());
     assertEquals(2,result.getAuthorities().size());
-
     assertTrue(result.getAuthorities().contains(new SimpleGrantedAuthority("uw:domain:onegroup")));
     assertTrue(result.getAuthorities().contains(new SimpleGrantedAuthority("uw:domain:anothergroup")));
   }
@@ -138,19 +105,15 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
    */
   @Test
   public void mapUser_multipleudds() {
-    MockHttpServletRequest request = new MockHttpServletRequest();
-
-    String uid = "somebody";
-
-    request.addHeader("uid", uid);
+    MockHttpServletRequest request = mockRequest();
     request.addHeader("wisceduudds", "A061234");
     request.addHeader("wisceduudds", "B062345");
 
     UWUserDetails result = filter.mapUser(request);
+    assertNotNull(result);
+    assertMockAttributes(result);
 
-    assertEquals(uid, result.getUsername());
     assertEquals(2,result.getUddsMembership().size());
-
     assertTrue(result.getUddsMembership().contains("A061234"));
     assertTrue(result.getUddsMembership().contains("B062345"));
   }
@@ -212,4 +175,35 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
     filter.setCustomLogoutSuffix("/luguot/");
     assertEquals("/Shibboleth.sso/Logout?return=https://somewhere.wisc.edu/luguot/", filter.toCustomLogoutUrl("https://somewhere.wisc.edu/idp/shibboleth"));
   }
+
+  /**
+   *
+   * @return a suitable {@link MockHttpServletRequest} for our tests
+   */
+  protected MockHttpServletRequest mockRequest() {
+    MockHttpServletRequest request = new MockHttpServletRequest();
+
+    request.addHeader("eppn", "somebody@wisc.edu");
+    request.addHeader("wiscedupvi", "1234567");
+    request.addHeader("uid", "somebody");
+    request.addHeader("cn", "some body");
+    request.addHeader("mail", "some.body@wisc.edu");
+    request.addHeader("wisceduisisemplid", "0000123456");
+    request.addHeader("Shib-Identity-Provider", "https://logintest.wisc.edu/idp/shibboleth");
+    return request;
+  }
+
+  /**
+   *
+   * @param result confirm expected values set by {@link #mockRequest()}
+   */
+  protected void assertMockAttributes(UWUserDetails result) {
+    assertEquals("somebody", result.getUsername());
+    assertEquals("somebody@wisc.edu", result.getEppn());
+    assertEquals("1234567", result.getPvi());
+    assertEquals("some body", result.getFullName());
+    assertEquals("some.body@wisc.edu", result.getEmailAddress());
+    assertEquals("0000123456", result.getIsisEmplid());
+    assertEquals("/Shibboleth.sso/Logout?return=https://logintest.wisc.edu/logout/", result.getCustomLogoutUrl());
+  }
 }
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
index 52bb7f5..539d7fb 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
@@ -38,7 +38,7 @@ public class UWUserDetailsAuthenticationFilterTest {
 		when(request.getHeader("cn")).thenReturn("Bucky Badger");
 		when(request.getHeaders("wisceduudds")).thenReturn(Collections.enumeration(Arrays.asList("A061234")));
 		when(request.getHeader("mail")).thenReturn("foo@foo.wisc.edu");
-    when(request.getHeaders("ismemberof")).thenReturn(Collections.enumeration(Arrays.asList("somegroup")));
+    when(request.getHeaders("isMemberOf")).thenReturn(Collections.enumeration(Arrays.asList("somegroup")));
 		UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request);
 		assertEquals("bbadger", userDetails.getUsername());
 		assertEquals("bbadger@wisc.edu", userDetails.getEppn());
-- 
GitLab