package sonia.scm.security; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContext; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class AnonymousRealmTest { @Mock private DAORealmHelperFactory realmHelperFactory; @Mock private DAORealmHelper realmHelper; @Mock private DAORealmHelper.AuthenticationInfoBuilder builder; @InjectMocks private AnonymousRealm realm; @Mock private AuthenticationInfo authenticationInfo; @BeforeEach void prepareObjectUnderTest() { when(realmHelperFactory.create(AnonymousRealm.REALM)).thenReturn(realmHelper); realm = new AnonymousRealm(realmHelperFactory); } @Test void shouldDoGetAuthentication() { when(realmHelper.authenticationInfoBuilder(SCMContext.USER_ANONYMOUS)).thenReturn(builder); when(builder.build()).thenReturn(authenticationInfo); AuthenticationInfo result = realm.doGetAuthenticationInfo(new AnonymousToken()); assertThat(result).isSameAs(authenticationInfo); } @Test void shouldThrowIllegalArgumentExceptionForWrongTypeOfToken() { assertThrows(IllegalArgumentException.class, () -> realm.doGetAuthenticationInfo(new UsernamePasswordToken())); } }