caio.co/de/cerberus

SearchQuery: Expose a few helpful derived methods

Id
ca2069ef7f19e2c22c247d8ad32a0d4ac00eefa3
Author
Caio
Commit time
2019-05-04T10:58:19+02:00

Modified src/main/java/co/caio/cerberus/model/SearchQuery.java

@@ -6,6 +6,7
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.Map;
import java.util.Optional;
+import java.util.stream.Stream;
import org.immutables.value.Value;

@ImmutableStyle
@@ -32,6 +33,32
Optional<RangedSpec> carbohydrateContent();

Map<String, Float> dietThreshold();
+
+ @Value.Derived
+ default long numSelectedFilters() {
+ return Stream.of(
+ numIngredients(),
+ prepTime(),
+ cookTime(),
+ totalTime(),
+ calories(),
+ fatContent(),
+ proteinContent(),
+ carbohydrateContent())
+ .flatMap(Optional::stream)
+ .count()
+ + dietThreshold().size();
+ }
+
+ @Value.Derived
+ default boolean isFulltextOnly() {
+ return fulltext().isPresent() && numSelectedFilters() == 0;
+ }
+
+ @Value.Derived
+ default boolean isEmpty() {
+ return numSelectedFilters() == 0 && fulltext().isEmpty();
+ }

@Value.Default
default int maxResults() {

Modified src/test/java/co/caio/cerberus/model/SearchQueryTest.java

@@ -1,8 +1,9
package co.caio.cerberus.model;

import static org.junit.jupiter.api.Assertions.*;

import co.caio.cerberus.model.SearchQuery.Builder;
+import co.caio.cerberus.model.SearchQuery.RangedSpec;
import org.junit.jupiter.api.Test;

class SearchQueryTest {
@@ -52,5 +53,14
assertThrows(
IllegalStateException.class, () -> new Builder().putDietThreshold("vegan", 1.1f).build());
assertDoesNotThrow(() -> new Builder().putDietThreshold("paleo", 1.0f).build());
+ }
+
+ @Test
+ void numSelectedFilters() {
+ var builder = new SearchQuery.Builder().fulltext("salt");
+ assertEquals(0, builder.build().numSelectedFilters());
+ assertEquals(1, builder.numIngredients(RangedSpec.of(1, 10)).build().numSelectedFilters());
+ assertEquals(2, builder.carbohydrateContent(RangedSpec.of(0, 30)).build().numSelectedFilters());
+ assertEquals(3, builder.addMatchDiet("keto").build().numSelectedFilters());
}
}