package net.unicon.cas.mfa;
import static org.junit.Assert.*;
import java.util.List;
import java.util.Map;
import net.unicon.cas.mfa.ticket.UnacceptableMultiFactorAuthenticationMethodException;
import net.unicon.cas.mfa.ticket.UnrecognizedMultiFactorAuthenticationMethodException;
import org.jasig.cas.authentication.Authentication;
import org.jasig.cas.validation.Assertion;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.mockito.Mockito.*;
@RunWith(JUnit4.class)
public class MultiFactorAuthenticationProtocolValidationSpecificationTests {
@Mock
private Assertion assertion;
@Mock
private Authentication authentication;
private final AbstractMultiFactorAuthenticationProtocolValidationSpecification spec;
public MultiFactorAuthenticationProtocolValidationSpecificationTests() {
MockitoAnnotations.initMocks(this);
final List<Authentication> list = mock(List.class);
when(list.size()).thenReturn(1);
when(this.assertion.getChainedAuthentications()).thenReturn(list);
when(list.get(anyInt())).thenReturn(this.authentication);
final Map<String, Object> map = mock(Map.class);
when(map.containsKey((any(Object.class)))).thenReturn(true);
when(authentication.getAttributes()).thenReturn(map);
this.spec = new AbstractMultiFactorAuthenticationProtocolValidationSpecification.WithoutProxy();
}
@Test
public void testDefaultSpec() {
when(authentication.getAttributes().get(any(String.class))).thenReturn(null);
spec.setAuthenticationMethod(null);
assertTrue(this.spec.isSatisfiedBy(this.assertion));
}
@Test
public void testValidSpecWithAuthnMethods() {
when(authentication.getAttributes().get(any(String.class))).thenReturn("strong_two_factor");
spec.setAuthenticationMethod("strong_two_factor");
assertTrue(this.spec.isSatisfiedBy(this.assertion));
}
@Test(expected = UnacceptableMultiFactorAuthenticationMethodException.class)
public void testUnacceptedSpec() {
when(authentication.getAttributes().get(any(String.class))).thenReturn(null);
spec.setAuthenticationMethod("strong_two_factor");
spec.isSatisfiedBy(this.assertion);
}
@Test(expected = UnrecognizedMultiFactorAuthenticationMethodException.class)
public void testUnrecognizedSpec() {
when(authentication.getAttributes().get(any(String.class))).thenReturn("strong_two_factor");
spec.setAuthenticationMethod("weak_two_factor");
spec.isSatisfiedBy(this.assertion);
}
}