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
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
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
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 {
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());
}
}