package fr.mch.mdo.restaurant.services.business.managers.locales;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestSuite;
import fr.mch.mdo.restaurant.beans.IMdoBean;
import fr.mch.mdo.restaurant.beans.IMdoDtoBean;
import fr.mch.mdo.restaurant.dao.beans.Locale;
import fr.mch.mdo.restaurant.dto.beans.LocaleDto;
import fr.mch.mdo.restaurant.dto.beans.LocalesManagerViewBean;
import fr.mch.mdo.restaurant.dto.beans.UserLocaleDto;
import fr.mch.mdo.restaurant.exception.MdoException;
import fr.mch.mdo.restaurant.services.business.managers.DefaultAdministrationManagerTest;
import fr.mch.mdo.restaurant.services.business.managers.IAdministrationManager;
import fr.mch.mdo.test.MdoTestCase;
public class DefaultLocalesManagerTest extends DefaultAdministrationManagerTest
{
/**
* Create the test case
*
* @param testName
* name of the test case
*/
public DefaultLocalesManagerTest(String testName) {
super(testName);
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite(DefaultLocalesManagerTest.class);
}
@Override
protected IAdministrationManager getInstance() {
return DefaultLocalesManager.getInstance();
}
@Override
protected IMdoDtoBean createNewBean() {
return createNewBean(java.util.Locale.ENGLISH.getLanguage());
}
@Override
protected List<IMdoBean> createListBeans() {
List<IMdoBean> list = new ArrayList<IMdoBean>();
list.add(createNewBean(java.util.Locale.JAPANESE.getLanguage()));
list.add(createNewBean(java.util.Locale.KOREAN.getLanguage()));
return list;
}
@Override
public void doUpdate() {
String localeCodeToBeUpdated = java.util.Locale.GERMAN.getLanguage();
try {
// Create new bean to be updated
IMdoBean beanToBeUpdated = this.getInstance().insert(createNewBean(localeCodeToBeUpdated));
assertTrue("IMdoBean must be instance of " + Locale.class, beanToBeUpdated instanceof LocaleDto);
LocaleDto castedBean = (LocaleDto) beanToBeUpdated;
assertNotNull("Locale language must not be null", castedBean.getLanguageCode());
assertEquals("Locale language must be equals to unique key", localeCodeToBeUpdated, castedBean.getLanguageCode());
// Update the created bean
castedBean.setLanguageCode(java.util.Locale.ITALIAN.getLanguage());
this.getInstance().update(castedBean);
// Reload the modified bean
LocaleDto updatedBean = new LocaleDto();
updatedBean.setId(castedBean.getId());
IMdoBean loadedBean = this.getInstance().load(updatedBean);
assertTrue("IMdoBean must be instance of " + LocaleDto.class, loadedBean instanceof LocaleDto);
updatedBean = (LocaleDto) loadedBean;
assertNotNull("Locale language must not be null", updatedBean.getLanguageCode());
assertEquals("Locale language must be equals to unique key", java.util.Locale.ITALIAN.getLanguage(), updatedBean.getLanguageCode());
} catch (Exception e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
@Override
public void doProcessList() {
LocalesManagerViewBean viewBean = new LocalesManagerViewBean();
try {
((ILocalesManager) this.getInstance()).processList(viewBean, DefaultAdministrationManagerTest.userContext.getCurrentLocale());
assertNotNull("Main list not be null", viewBean.getList());
assertFalse("Main list not be empty", viewBean.getList().isEmpty());
assertNotNull("Languages list not be null", viewBean.getLanguages());
assertFalse("Languages list not be empty", viewBean.getLanguages().isEmpty());
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
public void testGetInstance() {
assertTrue(this.getInstance() instanceof ILocalesManager);
assertTrue(this.getInstance() instanceof DefaultLocalesManager);
}
public void testFindByLanguage() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
try {
String languageCode = "fr";
LocaleDto bean = (LocaleDto) manager.findByLanguage(languageCode);
assertNotNull("Bean is not null", bean);
assertNotNull("Bean id is not null", bean.getId());
assertEquals("Bean id is equals to the searched id", languageCode, bean.getLanguageCode());
languageCode = "nono";
bean = (LocaleDto) manager.findByLanguage(languageCode);
assertNull("Bean is not null", bean);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
public void testGetAvailableLanguages() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
java.util.Locale locale = null;
Map<String, String> map = null;
try {
map = manager.getAvailableLanguages(locale);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
assertNotNull("Check Available Languages size", map);
List<IMdoDtoBean> locales = new ArrayList<IMdoDtoBean>();
try {
locales = manager.findAll();
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
Set<String> isoLanguages = new HashSet<String>();
if (locale == null) {
locale = java.util.Locale.getDefault();
}
for (java.util.Locale isoLanguageCode : java.util.Locale.getAvailableLocales()) {
isoLanguages.add(isoLanguageCode.getLanguage());
}
assertEquals("Check Available Languages size", isoLanguages.size() - locales.size(), map.size());
}
public void testGetSystemAvailableLanguages() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
java.util.Locale locale = null;
Map<String, String> map = null;
try {
map = manager.getSystemAvailableLanguages(locale);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
assertNotNull("Check Available Languages size", map);
Set<String> isoLanguages = new HashSet<String>();
if (locale == null) {
locale = java.util.Locale.getDefault();
}
for (java.util.Locale isoLanguageCode : java.util.Locale.getAvailableLocales()) {
isoLanguages.add(isoLanguageCode.getLanguage());
}
assertEquals("Check Available Languages size", isoLanguages.size(), map.size());
}
public void testGetLanguages() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
// Locale null
java.util.Locale locale = null;
Map<Long, String> map;
try {
map = manager.getLanguages(locale);
checkLanguage(map, java.util.Locale.getDefault());
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// Locale does not exist
locale = new java.util.Locale("titi", "toto");
try {
map = manager.getLanguages(locale);
checkLanguage(map, java.util.Locale.getDefault());
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// Nominal Scenario
locale = java.util.Locale.FRENCH;
try {
map = manager.getLanguages(locale);
checkLanguage(map, java.util.Locale.FRENCH);
map = manager.getLanguages(locale.getLanguage());
checkLanguage(map, java.util.Locale.FRENCH);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
private void checkLanguage(Map<Long, String> map, java.util.Locale selectedLocale) {
// Check only sorted displayed languages
String[] values = new String[map.size()];
int index = 0;
for (Iterator<Long> i = map.keySet().iterator(); i.hasNext();) {
Long key = i.next();
values[index++] = (map.get(key));
}
// Get Available Locales
ILocalesManager manager = (ILocalesManager) this.getInstance();
List<IMdoDtoBean> locales = new ArrayList<IMdoDtoBean>();
try {
locales = manager.findAll();
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// Several locales could have the same displayed language
// So put all displayed languages in a set to have no duplicated
// displayed languages
Set<String> languagesSet = new HashSet<String>();
for (IMdoBean locale : locales) {
languagesSet.add(new java.util.Locale(((LocaleDto) locale).getLanguageCode()).getDisplayLanguage(selectedLocale));
}
// Create sorted arrays by displayed languages
String[] languages = new String[languagesSet.size()];
// Sort displayed languages
languagesSet.toArray(languages);
Arrays.sort(languages);
// Check languages
assertEquals("The 2 arrays languages length must be equals", languages.length, values.length);
for (index = 0; index < languages.length; index++) {
assertEquals("Each language must be equals in string natural order", languages[index], values[index]);
}
}
public void testGetLanguageLocales() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
try {
List<LocaleDto> sortedList = manager.getLanguageLocales(DefaultAdministrationManagerTest.userContext.getCurrentLocale().getLanguageCode());
assertNotNull("sortedList is not null", sortedList);
// Check that the list is sorted by Display Language
Set<String> displayLanguagesSet = new HashSet<String>();
for (LocaleDto locale : sortedList) {
// Fill the set in any order
displayLanguagesSet.add(locale.getDisplayLanguage());
}
// Sort the set into list
List<String> displayLanguagesList = new ArrayList<String>(displayLanguagesSet);
Collections.sort(displayLanguagesList);
for (int i = 0; i < sortedList.size(); i++) {
LocaleDto locale = sortedList.get(i);
assertEquals("Check Display Language", displayLanguagesList.get(i), locale.getDisplayLanguage());
}
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
public void testFindLocale() {
ILocalesManager manager = (ILocalesManager) this.getInstance();
Map<String, String> availableLanguages = null;
try {
availableLanguages = manager.getAvailableLanguages(java.util.Locale.getDefault());
assertNotNull("Check not null availableLanguages", availableLanguages);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
LocaleDto dto = null;
// Locale null
java.util.Locale currentLocale = null;
// defaultLocales null
Set<UserLocaleDto> defaultLocales = null;
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// defaultLocales null
// && currentLocale not in database
currentLocale = new java.util.Locale(availableLanguages.keySet().iterator().next());
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// defaultLocales not null and empty
// && dao.findAll() return null
defaultLocales = new HashSet<UserLocaleDto>();
Object backupDao = super.getField(manager, "dao");
super.setField(manager, "dao", new LocalesDaoForLocalesManagerTest());
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
} finally {
// Backup dao
super.setField(manager, "dao", backupDao);
}
// defaultLocales not null and not empty
// && UserLocaleDto null
UserLocaleDto userLocaleDto = null;
defaultLocales.add(userLocaleDto);
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// locales not null and not empty
// && UserLocaleDto not null
userLocaleDto = new UserLocaleDto();
defaultLocales.add(userLocaleDto);
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// locales not null and not empty
// && UserLocaleDto not null
// && LocaleDto not null
LocaleDto localeDto = new LocaleDto();
userLocaleDto.setLocale(localeDto);
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// locales not null and not empty
// && UserLocaleDto not null
// && LocaleDto not null
// && languageCode not null
String languageCode = "";
localeDto.setLanguageCode(languageCode);
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
// locales not null and not empty
// && UserLocaleDto not null
// && LocaleDto not null
// && languageCode not null && equals to the current locale
languageCode = currentLocale.getLanguage();
localeDto.setLanguageCode(languageCode);
try {
dto = manager.findLocale(currentLocale, defaultLocales);
assertNotNull("Check LocaleDto not null", dto);
} catch (MdoException e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
private IMdoDtoBean createNewBean(String language) {
LocaleDto newBean = new LocaleDto();
newBean.setLanguageCode(language);
return newBean;
}
}