package io.github.azagniotov.stubby4j.utils;
import org.junit.Test;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static com.google.common.truth.Truth.assertThat;
/**
* @author Alexander Zagniotov
* @since 11/6/12, 7:00 PM
*/
@SuppressWarnings("serial")
public class CollectionUtilsTest {
@Test
public void constructParamMap_ShouldConstructParamMap_WhenQueryStringGiven() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramTwo", "two");
put("paramOne", "one");
}};
final Map<String, String> actualParams = CollectionUtils.constructParamMap("paramOne=one¶mTwo=two");
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructParamMap_ShouldConstructParamMap_WhenQueryParamHasNoValue() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramTwo", "two");
put("paramOne", "");
}};
final Map<String, String> actualParams = CollectionUtils.constructParamMap("paramOne=¶mTwo=two");
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructParamMap_ShouldConstructParamMap_WhenQueryParamHasNoValueNorEqualSign() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramTwo", "two");
put("paramOne", "");
}};
final Map<String, String> actualParams = CollectionUtils.constructParamMap("paramOne¶mTwo=two");
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructParamMap_ShouldConstructParamMap_WhenSingleQueryParamHasNoValueNorEqualSign() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramOne", "");
}};
final Map<String, String> actualParams = CollectionUtils.constructParamMap("paramOne");
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructQueryString_ShouldConstructQueryString_WhenParamMapGiven() throws Exception {
final Map<String, String> expectedParams = new LinkedHashMap<String, String>() {{
put("paramTwo", "two");
put("paramOne", "one");
}};
final String actualQueryString = CollectionUtils.constructQueryString(expectedParams);
final String expectedQueryString = "paramTwo=two¶mOne=one";
assertThat(expectedQueryString).isEqualTo(actualQueryString);
}
@Test
public void constructParamMap_ShouldUrlDecodeQueryString_WhenQueryParamsAreAnArray() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramOne", "[id,uuid,created,lastUpdated,displayName,email,givenName,familyName]");
}};
final String queryString = String.format("paramOne=%s", "%5Bid,uuid,created,lastUpdated,displayName,email,givenName,familyName%5D");
final Map<String, String> actualParams = CollectionUtils.constructParamMap(queryString);
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructParamMap_ShouldUrlDecodeQueryString_WhenQueryParamsAreAnArrayWithQuotedElements() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramOne", "[\"id\",\"uuid\",\"created\",\"lastUpdated\",\"displayName\",\"email\",\"givenName\",\"familyName\"]");
}};
final String queryString = String.format("paramOne=%s", "%5B%22id%22,%22uuid%22,%22created%22,%22lastUpdated%22,%22displayName%22,%22email%22,%22givenName%22,%22familyName%22%5D");
final Map<String, String> actualParams = CollectionUtils.constructParamMap(queryString);
assertThat(expectedParams).isEqualTo(actualParams);
}
@Test
public void constructParamMap_ShouldUrlDecodeQueryString_WhenQueryParamsAreAnArrayWithSingleQuoteElements() throws Exception {
final Map<String, String> expectedParams = new HashMap<String, String>() {{
put("paramOne", "['id','uuid','created','lastUpdated','displayName','email','givenName','familyName']");
}};
final String queryString = String.format("paramOne=%s", "[%27id%27,%27uuid%27,%27created%27,%27lastUpdated%27,%27displayName%27,%27email%27,%27givenName%27,%27familyName%27]");
final Map<String, String> actualParams = CollectionUtils.constructParamMap(queryString);
assertThat(expectedParams).isEqualTo(actualParams);
}
}