/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.resolver.locale; import java.util.Locale; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletResponse; import com.enonic.cms.core.language.LanguageEntity; import com.enonic.cms.core.resolver.BaseResolverTest; import com.enonic.cms.core.resolver.ForceResolverValueService; import com.enonic.cms.core.resolver.ForceResolverValueServiceImpl; import com.enonic.cms.core.resolver.ForcedResolverValueLifetimeSettings; import com.enonic.cms.core.resolver.ResolverContext; import com.enonic.cms.core.resource.ResourceKey; import com.enonic.cms.core.structure.SiteEntity; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import static org.junit.Assert.*; public class LocaleResolverServiceImplTest extends BaseResolverTest { LocaleResolverServiceImpl localeResolverService; @Before public void setUp() { localeResolverService = new LocaleResolverServiceImpl(); localeResolverService.setForceResolverValueService( forcedResolverValueService ); } @Test public void testNoDefaultResourceExists() { setUpForcedResolverValue( null ); ResolverContext context = new ResolverContext( request, createSite( "en-us", false ), createMenuItem( "no" ), null ); Locale locale = localeResolverService.getLocale( context ); assertTrue( "locale should be null since no default resource present", locale == null ); } @Test public void testOrder() { setUpForcedResolverValue( null ); ResolverContext context = new ResolverContext( request, createSite( "en-us", true ), createMenuItem( "no" ), null ); Locale locale = localeResolverService.getLocale( context ); assertEquals( "no", locale.getLanguage() ); context = new ResolverContext( request, createSite( "en", true ) ); locale = localeResolverService.getLocale( context ); assertEquals( "en", locale.getLanguage() ); context = new ResolverContext( request, createSite( "en", true ), createMenuItem( "no" ), createLanguage( "sw" ) ); locale = localeResolverService.getLocale( context ); assertEquals( "sw", locale.getLanguage() ); } @Test public void testForcedValueOverride() { SiteEntity site = createSite( "no", true ); setUpForcedResolverValue( "en" ); ResolverContext context = new ResolverContext( request, site, createMenuItem( "no" ), createLanguage( "sw" ) ); Locale locale = localeResolverService.getLocale( context ); assertEquals( "en", locale.getLanguage() ); } @Test public void testEmptyContentLanguage() { SiteEntity site = createSite( "no", true ); setUpForcedResolverValue( null ); ResolverContext context = new ResolverContext( request, site, createMenuItem( "en" ), new LanguageEntity() ); Locale locale = localeResolverService.getLocale( context ); assertEquals( "Should use menuItem language since contenLanguage doesnt contain code", "en", locale.getLanguage() ); } @Test public void testForceLocaleTemporary() { SiteEntity site = createSite( "no", true ); ResolverContext context = new ResolverContext( request, site, createMenuItem( "en" ), new LanguageEntity() ); MockHttpServletResponse mockResponse = new MockHttpServletResponse(); ForceResolverValueService forceResolverValueService = new ForceResolverValueServiceImpl(); localeResolverService.setForceResolverValueService( forceResolverValueService ); final String testLocale = "xx"; localeResolverService.setForcedLocale( context, mockResponse, ForcedResolverValueLifetimeSettings.session, testLocale ); Locale locale = localeResolverService.getLocale( context ); assertEquals( testLocale, locale.toString() ); localeResolverService.resetLocale( context, response ); locale = localeResolverService.getLocale( context ); assertEquals( "en", locale.toString() ); } @Test public void testForceLocalePermanent() { SiteEntity site = createSite( "no", true ); ResolverContext context = new ResolverContext( request, site, createMenuItem( "en" ), new LanguageEntity() ); ForceResolverValueService forceResolverValueService = new ForceResolverValueServiceImpl(); localeResolverService.setForceResolverValueService( forceResolverValueService ); final String testLocale = "xx"; localeResolverService.setForcedLocale( context, response, ForcedResolverValueLifetimeSettings.permanent, testLocale ); assertEquals( testLocale, response.getCookie( localeResolverService.createForcedValueKey( site ) ).getValue() ); } private MenuItemEntity createMenuItem( String languageCode ) { MenuItemEntity menuItem = new MenuItemEntity(); menuItem.setLanguage( createLanguage( languageCode ) ); return menuItem; } private LanguageEntity createLanguage( String languageCode ) { LanguageEntity language = new LanguageEntity(); language.setCode( languageCode ); return language; } public SiteEntity createSite( String language, boolean hasDefaultResource ) { SiteEntity site = new SiteEntity(); site.setKey( 0 ); site.setLanguage( createLanguage( language ) ); if ( hasDefaultResource ) { site.setDefaultLocalizationResource( ResourceKey.from( "test" ) ); } return site; } }