package io.katharsis.queryParams;
import org.junit.Before;
import org.junit.Test;
import java.util.*;
import static org.assertj.core.api.Assertions.assertThat;
public class DefaultQueryParamsParserTest {
private Map<String, Set<String>> queryParams;
private QueryParamsParser parser = new DefaultQueryParamsParser();
@Before
public void prepare() {
queryParams = new HashMap<>();
}
@Test
public void onGivenFiltersParserShouldReturnOnlyRequestParamsWithFilters() {
// GIVEN
queryParams.put("filter[users][name]", Collections.singleton("John"));
queryParams.put("random[users][name]", Collections.singleton("John"));
// WHEN
Map<String, Set<String>> result = parser.parseFiltersParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(1);
assertThat(result.entrySet().iterator().next().getKey().startsWith("filter"));
assertThat(result.entrySet().iterator().next().getValue().equals(Collections.singleton("John")));
}
@Test
public void onGivenSortingParserShouldReturnOnlyRequestParamsWithSorting() {
// GIVEN
queryParams.put("sort[users][name]", Collections.singleton("asc"));
queryParams.put("random[users][name]", Collections.singleton("desc"));
// WHEN
Map<String, Set<String>> result = parser.parseSortingParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(1);
assertThat(result.entrySet().iterator().next().getKey().startsWith("sort"));
assertThat(result.entrySet().iterator().next().getValue().equals(Collections.singleton("asc")));
}
@Test
public void onGivenGroupingParserShouldReturnOnlyRequestParamsWithGrouping() {
// GIVEN
queryParams.put("group[users]", Collections.singleton("name"));
queryParams.put("random[users]", Collections.singleton("surname"));
// WHEN
Map<String, Set<String>> result = parser.parseGroupingParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(1);
assertThat(result.entrySet().iterator().next().getKey().startsWith("group"));
assertThat(result.entrySet().iterator().next().getValue().equals(Collections.singleton("name")));
}
@Test
public void onGivenPaginationParserShouldReturnOnlyRequestParamsWithPagination() {
// GIVEN
queryParams.put("page[offset]", Collections.singleton("1"));
queryParams.put("page[limit]", Collections.singleton("10"));
queryParams.put("random[offset]", Collections.singleton("2"));
queryParams.put("random[limit]", Collections.singleton("20"));
// WHEN
Map<String, Set<String>> result = parser.parsePaginationParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(2);
assertThat(result.get("page[offset]").equals(Collections.singleton("1")));
assertThat(result.get("page[limit]").equals(Collections.singleton("10")));
}
////////
@Test
public void onGivenIncludedFieldsParserShouldReturnOnlyRequestParamsWithIncludedFields() {
// GIVEN
queryParams.put("fields[users]", Collections.singleton("name"));
queryParams.put("random[users]", Collections.singleton("surname"));
// WHEN
Map<String, Set<String>> result = parser.parseIncludedFieldsParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(1);
assertThat(result.entrySet().iterator().next().getKey().startsWith("fields"));
assertThat(result.entrySet().iterator().next().getValue().equals(Collections.singleton("name")));
}
@Test
public void onGivenIncludedRelationsParserShouldReturnOnlyRequestParamsWithIncludedRelations() {
// GIVEN
queryParams.put("include[user]", Collections.singleton("name"));
queryParams.put("random[user]", Collections.singleton("surname"));
// WHEN
Map<String, Set<String>> result = parser.parseIncludedRelationsParameters(queryParams);
// THEN
assertThat(result.entrySet().size()).isEqualTo(1);
assertThat(result.entrySet().iterator().next().getKey().startsWith("include"));
assertThat(result.entrySet().iterator().next().getValue().equals(Collections.singleton("name")));
}
}