Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public class PropertyValueExtractorFactory {
new LocalDateValueExtractor(),
new LocalDateTimeValueExtractor(),
new ZonedDateTimeValueExtractor(),
new EnumValueExtractor());
new EnumValueExtractor(),
new UUIDValueExtractor());

@SuppressWarnings("java:S1452")
public static PropertyValueExtractor<?> getPropertyValueExtractor(Class<?> propertyType) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.github.queritylib.querity.common.valueextractor;

import java.util.UUID;

public class UUIDValueExtractor implements PropertyValueExtractor<UUID> {
@Override
public boolean canHandle(Class<?> propertyType) {
return isUUIDType(propertyType);
}

@Override
public UUID extractValue(Class<?> propertyType, Object value) {
if (value == null || isUUIDType(value.getClass()))
return (UUID) value; // at this point we're sure it's not primitive anymore because it's been auto-boxed
return UUID.fromString(value.toString());
}

private static boolean isUUIDType(Class<?> propertyType) {
return UUID.class.isAssignableFrom(propertyType);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.UUID;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -27,7 +28,8 @@ public static Stream<Arguments> providePropertyTypeAndValueExtractor() {
Arguments.of(Date.class, DateValueExtractor.class),
Arguments.of(LocalDate.class, LocalDateValueExtractor.class),
Arguments.of(LocalDateTime.class, LocalDateTimeValueExtractor.class),
Arguments.of(ZonedDateTime.class, ZonedDateTimeValueExtractor.class)
Arguments.of(ZonedDateTime.class, ZonedDateTimeValueExtractor.class),
Arguments.of(UUID.class, UUIDValueExtractor.class)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.UUID;
import java.util.stream.Stream;

class DateValueExtractorTests extends AbstractPropertyValueExtractorTests {
class UUIDValueExtractorTests extends AbstractPropertyValueExtractorTests {

@Override
protected PropertyValueExtractor<?> getValueExtractor() {
return new DateValueExtractor();
return new UUIDValueExtractor();
}

public static Stream<Arguments> provideTypesAndCanHandle() {
Expand All @@ -26,20 +26,17 @@ public static Stream<Arguments> provideTypesAndCanHandle() {
Arguments.of(LocalDate.class, false),
Arguments.of(LocalDateTime.class, false),
Arguments.of(ZonedDateTime.class, false),
Arguments.of(Date.class, true)
Arguments.of(Date.class, false),
Arguments.of(UUID.class, true)
);
}

public static Stream<Arguments> provideInputAndExpectedExtractedValue() {
Date testValue = Date.from(
LocalDateTime.of(2021, 4, 17, 4, 30, 0)
.toInstant(ZoneOffset.UTC));
UUID testValue = UUID.fromString("8c178b3d-99b1-4d82-a54d-477157d30517");
return Stream.of(
Arguments.of(Date.class, null, null),
Arguments.of(Date.class, "2021-06-09T13:45:15Z", Date.from(
LocalDateTime.of(2021, 6, 9, 13, 45, 15)
.toInstant(ZoneOffset.UTC))),
Arguments.of(Date.class, testValue, testValue)
Arguments.of(UUID.class, null, null),
Arguments.of(UUID.class, testValue.toString(), testValue),
Arguments.of(UUID.class, testValue, testValue)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Entity
@Getter
Expand All @@ -24,4 +25,5 @@ public class Order extends AbstractPersistable<Long> implements io.github.querit
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
@Builder.Default
private List<OrderItem> items = new ArrayList<>();
private UUID externalId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Data
@NoArgsConstructor
Expand All @@ -17,4 +18,5 @@ public class Order implements io.github.queritylib.querity.test.domain.Order<Ord
@NonNull
@Builder.Default
private List<OrderItem> items = new ArrayList<>();
private UUID externalId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Data
@NoArgsConstructor
Expand All @@ -17,4 +18,5 @@ public class Order implements io.github.queritylib.querity.test.domain.Order<Ord
@NonNull
@Builder.Default
private List<OrderItem> items = new ArrayList<>();
private UUID externalId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
import java.util.function.Function;
import java.util.function.Predicate;

Expand Down Expand Up @@ -40,6 +41,7 @@ public abstract class QuerityGenericTestSuite<T extends Person<K, ?, ?, ? extend
public static final String PROPERTY_VISITED_LOCATIONS_COUNTRY = "visitedLocations.country";
public static final String PROPERTY_VISITED_LOCATIONS_CITIES = "visitedLocations.cities";
public static final String PROPERTY_FAVOURITE_PRODUCT_CATEGORY = "favouriteProductCategory";
public static final String PROPERTY_ORDERS_EXTERNAL_ID = "orders.externalId";

protected List<T> entities;
protected T entity1;
Expand Down Expand Up @@ -169,6 +171,34 @@ void givenFilterWithBooleanAsStringEqualsCondition_whenFilterAll_thenReturnOnlyF
.toList());
}

@Test
void givenFilterWithUUIDEqualsCondition_whenFilterAll_thenReturnOnlyFilteredElements() {
UUID anOrderExternalId = entity1.getOrders().get(0).getExternalId();
Query query = Querity.query()
.filter(filterBy(PROPERTY_ORDERS_EXTERNAL_ID, EQUALS, anOrderExternalId))
.build();
List<T> result = querity.findAll(getEntityClass(), query);
assertThat(result).isNotEmpty();
assertThat(result).containsExactlyInAnyOrderElementsOf(entities.stream()
.filter(p -> p.getOrders().stream()
.anyMatch(l -> l.getExternalId().equals(anOrderExternalId)))
.toList());
}

@Test
void givenFilterWithUUIDAsStringEqualsCondition_whenFilterAll_thenReturnOnlyFilteredElements() {
UUID anOrderExternalId = entity1.getOrders().get(0).getExternalId();
Query query = Querity.query()
.filter(filterBy(PROPERTY_ORDERS_EXTERNAL_ID, EQUALS, anOrderExternalId.toString()))
.build();
List<T> result = querity.findAll(getEntityClass(), query);
assertThat(result).isNotEmpty();
assertThat(result).containsExactlyInAnyOrderElementsOf(entities.stream()
.filter(p -> p.getOrders().stream()
.anyMatch(l -> l.getExternalId().equals(anOrderExternalId)))
.toList());
}

@Test
void givenFilterWithBigDecimalEqualsCondition_whenFilterAll_thenReturnOnlyFilteredElements() {
Query query = Querity.query()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.github.queritylib.querity.test.domain;

import java.util.List;
import java.util.UUID;

public interface Order<I extends OrderItem> {
Short getYear();
Expand All @@ -14,4 +15,8 @@ public interface Order<I extends OrderItem> {
List<I> getItems();

void setItems(List<I> items);

UUID getExternalId();

void setExternalId(UUID externalId);
}
Loading
Loading