package com.wesabe.grendel.auth.tests; import static org.fest.assertions.Assertions.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.HttpHeaders; import org.junit.Before; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import com.sun.jersey.api.core.HttpContext; import com.sun.jersey.api.core.HttpRequestContext; import com.wesabe.grendel.auth.BasicAuthProvider; import com.wesabe.grendel.auth.Credentials; @RunWith(Enclosed.class) public class BasicAuthProviderTest { private static abstract class Context { protected HttpContext context; protected HttpRequestContext request; protected BasicAuthProvider provider; public void setup() throws Exception { this.request = mock(HttpRequestContext.class); when(request.getHeaderValue(HttpHeaders.AUTHORIZATION)).thenReturn(header()); this.context = mock(HttpContext.class); when(context.getRequest()).thenReturn(request); this.provider = new BasicAuthProvider(); } protected abstract String header(); } public static class Decoding_A_Valid_Auth_Header extends Context { @Before @Override public void setup() throws Exception { super.setup(); } @Override protected String header() { return "Basic bXJwZWVwZXJzOmhhcHB5"; } @Test public void itReturnsASetOfCredentials() throws Exception { final Credentials creds = provider.getValue(context); assertThat(creds.getUsername()).isEqualTo("mrpeepers"); assertThat(creds.getPassword()).isEqualTo("happy"); } } public static class Decoding_An_Invalid_Auth_Header extends Context { @Before @Override public void setup() throws Exception { super.setup(); } @Override protected String header() { return "Basic bXJwZWVwZXJzIWhhcHB5"; } @Test public void itReturnsASetOfCredentials() throws Exception { try { provider.getValue(context); fail("should have thrown a WebApplicationException but didn't"); } catch (WebApplicationException e) { assertThat(e.getResponse()).isEqualTo(Credentials.CHALLENGE); } } } }