package org.synyx.urlaubsverwaltung.security; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.synyx.urlaubsverwaltung.core.person.Person; import org.synyx.urlaubsverwaltung.core.person.PersonService; import org.synyx.urlaubsverwaltung.test.TestDataCreator; import java.util.Collections; import java.util.Optional; /** * @author Aljona Murygina - murygina@synyx.de */ public class LdapUserDataImporterTest { private LdapUserDataImporter ldapUserDataImporter; private LdapUserService ldapUserServiceMock; private LdapSyncService ldapSyncServiceMock; private PersonService personServiceMock; @Before public void setUp() { ldapUserServiceMock = Mockito.mock(LdapUserService.class); ldapSyncServiceMock = Mockito.mock(LdapSyncService.class); personServiceMock = Mockito.mock(PersonService.class); ldapUserDataImporter = new LdapUserDataImporter(ldapUserServiceMock, ldapSyncServiceMock, personServiceMock); } @Test public void ensureFetchesLdapUsers() { ldapUserDataImporter.sync(); Mockito.verify(ldapUserServiceMock).getLdapUsers(); } @Test public void ensureCreatesPersonIfLdapUserNotYetExists() { Mockito.when(personServiceMock.getPersonByLogin(Mockito.anyString())).thenReturn(Optional.empty()); Mockito.when(ldapUserServiceMock.getLdapUsers()) .thenReturn(Collections.singletonList( new LdapUser("muster", Optional.empty(), Optional.empty(), Optional.empty()))); ldapUserDataImporter.sync(); Mockito.verify(personServiceMock, Mockito.times(1)).getPersonByLogin("muster"); Mockito.verify(ldapSyncServiceMock) .createPerson("muster", Optional.empty(), Optional.empty(), Optional.empty()); } @Test public void ensureUpdatesPersonIfLdapUserExists() { Person person = TestDataCreator.createPerson(); Mockito.when(personServiceMock.getPersonByLogin(Mockito.anyString())).thenReturn(Optional.of(person)); Mockito.when(ldapUserServiceMock.getLdapUsers()) .thenReturn(Collections.singletonList( new LdapUser(person.getLoginName(), Optional.of("Vorname"), Optional.of("Nachname"), Optional.of("Email")))); ldapUserDataImporter.sync(); Mockito.verify(personServiceMock, Mockito.times(1)).getPersonByLogin(person.getLoginName()); Mockito.verify(ldapSyncServiceMock) .syncPerson(person, Optional.of("Vorname"), Optional.of("Nachname"), Optional.of("Email")); } }