package org.molgenis.data.i18n;
import org.molgenis.auth.User;
import org.molgenis.data.DataService;
import org.molgenis.data.Entity;
import org.molgenis.data.Query;
import org.molgenis.data.i18n.model.Language;
import org.molgenis.data.meta.model.Attribute;
import org.molgenis.data.meta.model.EntityType;
import org.molgenis.data.settings.AppSettings;
import org.molgenis.data.support.DynamicEntity;
import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static com.google.common.collect.ImmutableMap.of;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.molgenis.auth.UserMetaData.USER;
import static org.molgenis.data.i18n.model.LanguageMetadata.LANGUAGE;
import static org.molgenis.data.meta.AttributeType.STRING;
import static org.testng.Assert.assertEquals;
public class LanguageServiceTest
{
private LanguageService languageService;
private DataService dataServiceMock;
private AppSettings appSettingsMock;
private Query<Entity> queryMock;
@SuppressWarnings("unchecked")
@BeforeMethod
public void beforeMethod()
{
dataServiceMock = mock(DataService.class);
queryMock = mock(Query.class);
when(dataServiceMock.query(USER)).thenReturn(queryMock);
when(queryMock.eq(any(), any())).thenReturn(queryMock);
appSettingsMock = mock(AppSettings.class);
languageService = new LanguageService(dataServiceMock, appSettingsMock);
}
@Test
public void getCurrentUserLanguageCode()
{
SecurityContextHolder.getContext().setAuthentication(new TestingAuthenticationToken("test", "test"));
EntityType nlEntityMeta = mock(EntityType.class);
Attribute langCodeAtrr = when(mock(Attribute.class).getDataType()).thenReturn(STRING).getMock();
when(nlEntityMeta.getAttribute("languageCode")).thenReturn(langCodeAtrr);
DynamicEntity langEntity = new DynamicEntity(nlEntityMeta, of("languageCode", "nl"));
when(queryMock.findOne()).thenReturn(langEntity);
Attribute nlAtrr = when(mock(Attribute.class).getDataType()).thenReturn(STRING).getMock();
EntityType languageMeta = mock(EntityType.class);
when(languageMeta.getAttribute("nl")).thenReturn(nlAtrr);
DynamicEntity nlEntity = new DynamicEntity(languageMeta, of("nl", "Nederlands"));
when(dataServiceMock.findOneById(LANGUAGE, "nl")).thenReturn(nlEntity);
assertEquals(languageService.getCurrentUserLanguageCode(), "nl");
}
@Test
public void getCurrentUserLanguageAppSettings()
{
SecurityContextHolder.getContext().setAuthentication(new TestingAuthenticationToken("test", "test"));
User user = mock(User.class);
when(user.getLanguageCode()).thenReturn("de");
when(queryMock.findOne()).thenReturn(user);
when(appSettingsMock.getLanguageCode()).thenReturn("de");
Language language = mock(Language.class);
when(dataServiceMock.findOneById(LANGUAGE, "de")).thenReturn(language);
assertEquals(languageService.getCurrentUserLanguageCode(), "de");
}
}