/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.core.web;
import java.util.HashSet;
import java.util.Locale;
import javax.servlet.http.Cookie;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
public class RestrictedCookieLocaleResolverTest {
private Locale defaultLocale = new Locale("es");
private MockHttpServletRequest request = new MockHttpServletRequest();
private MockHttpServletResponse response = new MockHttpServletResponse();
private HashSet<Locale> supportedLocales = new HashSet<Locale>();
private String cookieName = CookieLocaleResolver.DEFAULT_COOKIE_NAME;
private RestrictedCookieLocaleResolver resolver
= new RestrictedCookieLocaleResolver(supportedLocales, defaultLocale);
@Before public void setUp() {
supportedLocales.add(defaultLocale);
supportedLocales.add(new Locale("ja", "JP", "JP"));
supportedLocales.add(new Locale("ja", "JP"));
supportedLocales.add(new Locale("ja"));
supportedLocales.add(new Locale("th", "TH"));
supportedLocales.add(new Locale("th"));
supportedLocales.add(new Locale("pt"));
}
@Test public void resolveLocale_unknown() {
request.setCookies(new Cookie(cookieName, "ge"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(defaultLocale));
}
@Test public void resolveLocale_unknownWithCountry() {
request.setCookies(new Cookie(cookieName, "ge_GE"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(defaultLocale));
}
@Test public void resolveLocale_unknownWithVariant() {
request.setCookies(new Cookie(cookieName, "ge_GE_GE"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(defaultLocale));
}
@Test public void resolveLocale_known() {
request.setCookies(new Cookie(cookieName, "th"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(new Locale("th")));
}
@Test public void resolveLocale_variantNotKnown() {
request.setCookies(new Cookie(cookieName, "th_TH_TH"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(new Locale("th", "TH")));
}
@Test public void resolveLocale_countryNotKnown() {
request.setCookies(new Cookie(cookieName, "pt_BR"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(new Locale("pt")));
}
@Test public void resolveLocale_countryKnown() {
request.setCookies(new Cookie(cookieName, "th_TH"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(new Locale("th", "TH")));
}
@Test public void resolveLocale_fullKnown() {
request.setCookies(new Cookie(cookieName, "ja_JP_JP"));
Locale locale = resolver.resolveLocale(request);
assertThat(locale, is(new Locale("ja", "JP", "JP")));
}
@Test public void setLocale() {
resolver.setLocale(request, response, new Locale("pt", "BR"));
Cookie cookie = response.getCookie(cookieName);
assertThat(cookie.getValue(), is("pt"));
}
}