/** * @see AdministrationService#getSearchLocales() */ @Override @Transactional(readOnly = true) public List<Locale> getSearchLocales(){ //call it via interface, so cache interceptor is invoked return Context.getAdministrationService().getSearchLocales(Context.getLocale(), Context.getAuthenticatedUser()); }
@Test public void getSearchLocales_shouldExcludeNotAllowedLocales() { //given adminService.saveGlobalProperty( new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_LOCALE_ALLOWED_LIST, "en_US, en_GB, pl, es")); User user = Context.getAuthenticatedUser(); user.setUserProperty(OpenmrsConstants.USER_PROPERTY_PROFICIENT_LOCALES, "es_CL, en_US, pl"); Context.getUserService().saveUser(user); //when List<Locale> searchLocales = adminService.getSearchLocales(); //then assertTrue("en_US", searchLocales.contains(new Locale("en", "US"))); assertTrue("pl", searchLocales.contains(new Locale("pl"))); assertTrue("es", searchLocales.contains(new Locale("es"))); assertFalse("es_CL", searchLocales.contains(new Locale("es", "CL"))); }
@Test public void getSearchLocales_shouldIncludeUsersProficientLocales() { //given adminService.saveGlobalProperty( new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_LOCALE_ALLOWED_LIST, "en_GB, en_US, pl")); User user = Context.getAuthenticatedUser(); user.setUserProperty(OpenmrsConstants.USER_PROPERTY_PROFICIENT_LOCALES, "en_GB, en_US"); Context.getUserService().saveUser(user); //when List<Locale> searchLocales = adminService.getSearchLocales(); //then assertTrue("en_GB", searchLocales.contains(new Locale("en", "GB"))); assertTrue("en_US", searchLocales.contains(new Locale("en", "US"))); assertFalse("pl", searchLocales.contains(new Locale("pl"))); }
@Test public void getSearchLocales_shouldIncludeCurrentlySelectedFullLocaleAndLangugage() { //given adminService.saveGlobalProperty( new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_LOCALE_ALLOWED_LIST, "en_GB")); User user = Context.getAuthenticatedUser(); user.setUserProperty(OpenmrsConstants.USER_PROPERTY_PROFICIENT_LOCALES, ""); Context.getUserService().saveUser(user); Context.setLocale(new Locale("en", "GB")); //when List<Locale> searchLocales = adminService.getSearchLocales(); //then assertEquals(Context.getLocale(), searchLocales.get(0)); assertEquals(new Locale(Context.getLocale().getLanguage()), searchLocales.get(1)); }
@Test public void getSearchLocales_shouldCacheResultsForAnUser() { //given adminService.saveGlobalProperty( new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_LOCALE_ALLOWED_LIST, "en_GB, en_US, pl")); User user = Context.getAuthenticatedUser(); user.setUserProperty(OpenmrsConstants.USER_PROPERTY_PROFICIENT_LOCALES, "en_GB, en_US"); Context.getUserService().saveUser(user); //when adminService.getSearchLocales(); List<Locale> cachedSearchLocales = getCachedSearchLocalesForCurrentUser(); //then assertThat(cachedSearchLocales, hasItem(Locale.ENGLISH)); assertThat(cachedSearchLocales, hasItem(new Locale("en", "US"))); assertThat(cachedSearchLocales, not(hasItem(new Locale("pl")))); }
@Test public void saveGlobalProperty_shouldEvictCachedResults() { //given adminService.saveGlobalProperty( new GlobalProperty(OpenmrsConstants.GLOBAL_PROPERTY_LOCALE_ALLOWED_LIST, "en_GB, en_US, pl")); User user = Context.getAuthenticatedUser(); user.setUserProperty(OpenmrsConstants.USER_PROPERTY_PROFICIENT_LOCALES, "en_GB, en_US"); Context.getUserService().saveUser(user); //sanity check that cache has been populated adminService.getSearchLocales(); List<Locale> cachedSearchLocales = getCachedSearchLocalesForCurrentUser(); assertThat(cachedSearchLocales, hasItem(new Locale("en", "US"))); //evict cache adminService.saveGlobalProperty(new GlobalProperty("test", "TEST")); assertThat(getCacheForCurrentUser(), nullValue()); }