package restx;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.junit.Test;
import java.util.Locale;
import static org.assertj.core.api.Assertions.*;
/**
* User: xavierhanin
* Date: 4/2/13
* Time: 9:39 PM
*/
public class StdRequestTest {
@Test
public void should_build_restx_uri() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api").setRestxPath("/message")
.setQueryParams(ImmutableMap.<String, ImmutableList<String>>of("q", ImmutableList.of("val1", "val2"))).build();
assertThat(request.getBaseUri()).isEqualTo("http://localhost:8080/api");
assertThat(request.getBaseApiPath()).isEqualTo("/api");
assertThat(request.getRestxPath()).isEqualTo("/message");
assertThat(request.getRestxUri()).isEqualTo("/message?q=val1&q=val2");
}
@Test
public void should_build_restx_uri_from_full_path() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setFullPath("/message?q=val1&q=val2")
.build();
assertThat(request.getBaseUri()).isEqualTo("http://localhost:8080/api");
assertThat(request.getRestxPath()).isEqualTo("/message");
assertThat(request.getRestxUri()).isEqualTo("/message?q=val1&q=val2");
}
// For Accept-Language header, see spec http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
@Test
public void should_get_default_locale() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.build();
assertThat(request.getLocale()).isEqualTo(Locale.getDefault());
}
@Test
public void should_get_locale_from_header() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "fr-FR"))
.build();
assertThat(request.getLocale()).isEqualTo(Locale.forLanguageTag("fr-FR"));
}
@Test
public void should_get_locale_from_header_with_list() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "fr-FR,en-US"))
.build();
assertThat(request.getLocale()).isEqualTo(Locale.forLanguageTag("fr-FR"));
}
@Test
public void should_get_locale_from_header_with_list_with_spaces() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", " fr-FR , en-US "))
.build();
assertThat(request.getLocale()).isEqualTo(Locale.forLanguageTag("fr-FR"));
}
@Test
public void should_get_locale_from_header_complex_list_with_quality() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "en-US,en;q=0.8,fr;q=0.6"))
.build();
assertThat(request.getLocale()).isEqualTo(Locale.forLanguageTag("en-US"));
}
@Test
public void should_get_locale_from_header_complex_list_with_quality_and_spaces() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "en-US,en;q=0.8,fr;q=0.6"))
.build();
assertThat(request.getLocale()).isEqualTo(Locale.forLanguageTag("en-US"));
}
@Test
public void should_get_one_with_default_locale() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(Locale.getDefault()));
}
@Test
public void should_get_one_with_fr_locale_from_header() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "fr-FR"))
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(Locale.forLanguageTag("fr-FR")));
}
@Test
public void should_get_two_locales_from_header() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "fr-FR,en-US"))
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(Locale.forLanguageTag("fr-FR"), Locale.forLanguageTag("en-US")));
}
@Test
public void should_get_two_locales_from_header_with_list_with_spaces() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", " fr-FR , en-US "))
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(Locale.forLanguageTag("fr-FR"), Locale.forLanguageTag("en-US")));
}
@Test
public void should_get_three_locales_from_header_complex_list_with_quality() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "en-US,en;q=0.8,fr;q=0.6"))
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(
Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en"), Locale.forLanguageTag("fr")));
}
@Test
public void should_get_three_locales_from_header_complex_list_with_quality_and_spaces() throws Exception {
StdRequest request = StdRequest.builder().setBaseUri("http://localhost:8080/api")
.setRestxPath("/")
.setHeaders(ImmutableMap.of("Accept-Language", "en-US,en;q=0.8,fr;q=0.6"))
.build();
assertThat(request.getLocales()).isEqualTo(Lists.newArrayList(
Locale.forLanguageTag("en-US"), Locale.forLanguageTag("en"), Locale.forLanguageTag("fr")));
}
}