Skip to content

Commit d5a55fe

Browse files
committed
feat: add criteria list unit tests
1 parent e5e55a9 commit d5a55fe

File tree

2 files changed

+451
-28
lines changed

2 files changed

+451
-28
lines changed

graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/QraphQLJpaBaseDataFetcher.java

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -384,10 +384,11 @@ protected Predicate getArgumentPredicate(CriteriaBuilder cb, From<?,?> path,
384384
.stream()
385385
.filter(it -> !Logical.names().contains(it.getName()))
386386
.map(it -> {
387-
Map<String, Object> arguments = getFieldArguments(environment, it, argument);
387+
Map<String, Object> args = getFieldArguments(environment, it, argument);
388+
Argument arg = new Argument(it.getName(), it.getValue());
388389

389390
if(isEntityType(environment)) {
390-
Attribute<?,?> attribute = getAttribute(environment, new Argument(it.getName(), it.getValue()));
391+
Attribute<?,?> attribute = getAttribute(environment, arg);
391392

392393
if(attribute.isAssociation()) {
393394
GraphQLFieldDefinition fieldDefinition = getFieldDef(environment.getGraphQLSchema(),
@@ -396,17 +397,17 @@ protected Predicate getArgumentPredicate(CriteriaBuilder cb, From<?,?> path,
396397
boolean isOptional = false;
397398

398399
return getArgumentPredicate(cb, reuseJoin(path, it.getName(), isOptional),
399-
wherePredicateEnvironment(environment, fieldDefinition, arguments),
400-
new Argument(it.getName(), it.getValue()));
400+
wherePredicateEnvironment(environment, fieldDefinition, args),
401+
arg);
401402
}
402403
}
403404

404405
return getFieldPredicate(it.getName(),
405406
cb,
406407
path,
407408
it,
408-
argumentEnvironment(environment, arguments),
409-
new Argument(it.getName(), it.getValue()));
409+
argumentEnvironment(environment, args),
410+
arg);
410411
})
411412
.filter(predicate -> predicate != null)
412413
.forEach(predicates::add);
@@ -445,11 +446,20 @@ protected Predicate getArrayArgumentPredicate(CriteriaBuilder cb,
445446
.filter(it -> Logical.names().contains(it.getName()))
446447
.map(it -> {
447448
Map<String, Object> args = e.getValue();
448-
449-
return getArrayArgumentPredicate(cb,
449+
Argument arg = new Argument(it.getName(), it.getValue());
450+
451+
if(ArrayValue.class.isInstance(it.getValue())) {
452+
return getArrayArgumentPredicate(cb,
453+
path,
454+
argumentEnvironment(environment, args),
455+
arg);
456+
}
457+
458+
return getArgumentPredicate(cb,
450459
path,
451460
argumentEnvironment(environment, args),
452-
new Argument(it.getName(), it.getValue()));
461+
arg);
462+
453463
}))
454464
.forEach(predicates::add);
455465

@@ -460,9 +470,10 @@ protected Predicate getArrayArgumentPredicate(CriteriaBuilder cb,
460470
.filter(it -> !Logical.names().contains(it.getName()))
461471
.map(it -> {
462472
Map<String, Object> args = e.getValue();
473+
Argument arg = new Argument(it.getName(), it.getValue());
463474

464475
if(isEntityType(environment)) {
465-
Attribute<?,?> attribute = getAttribute(environment, new Argument(it.getName(), it.getValue()));
476+
Attribute<?,?> attribute = getAttribute(environment, arg);
466477

467478
if(attribute.isAssociation()) {
468479
GraphQLFieldDefinition fieldDefinition = getFieldDef(environment.getGraphQLSchema(),
@@ -472,16 +483,16 @@ protected Predicate getArrayArgumentPredicate(CriteriaBuilder cb,
472483

473484
return getArgumentPredicate(cb, reuseJoin(path, it.getName(), isOptional),
474485
wherePredicateEnvironment(environment, fieldDefinition, args),
475-
new Argument(it.getName(), it.getValue()));
486+
arg);
476487
}
477-
}
488+
}
478489

479490
return getFieldPredicate(it.getName(),
480491
cb,
481492
path,
482493
it,
483494
argumentEnvironment(environment, args),
484-
new Argument(it.getName(), it.getValue()));
495+
arg);
485496
}))
486497
.filter(predicate -> predicate != null)
487498
.forEach(predicates::add);
@@ -495,7 +506,9 @@ private Map<String, Object> getFieldArguments(DataFetchingEnvironment environmen
495506
if (environment.getArgument(argument.getName()) instanceof Collection) {
496507
Collection<Map<String,Object>> list = environment.getArgument(argument.getName());
497508

498-
arguments = list.stream().filter(args -> args.get(field.getName()) != null).findFirst()
509+
arguments = list.stream()
510+
.filter(args -> args.get(field.getName()) != null)
511+
.findFirst()
499512
.orElse(list.stream().findFirst().get());
500513
} else {
501514
arguments = environment.getArgument(argument.getName());
@@ -528,14 +541,15 @@ private Predicate getArrayFieldPredicate(String fieldName,
528541
.map(ObjectValue.class::cast)
529542
.flatMap(it -> it.getObjectFields().stream())
530543
.map(it -> {
531-
Map<String, Object> arguments = getFieldArguments(environment, it, argument);
544+
Map<String, Object> args = getFieldArguments(environment, it, argument);
545+
Argument arg = new Argument(it.getName(), it.getValue());
532546

533547
return getFieldPredicate(it.getName(),
534548
cb,
535549
path,
536550
it,
537-
argumentEnvironment(environment, arguments),
538-
new Argument(it.getName(), it.getValue()));
551+
argumentEnvironment(environment, args),
552+
arg);
539553
})
540554
.forEach(predicates::add);
541555

@@ -561,18 +575,18 @@ private Predicate getFieldPredicate(String fieldName, CriteriaBuilder cb, From<?
561575
expressionValue.getObjectFields().stream()
562576
.filter(it -> Logical.names().contains(it.getName()))
563577
.map(it -> {
564-
Map<String, Object> arguments = getFieldArguments(environment, it, argument);
578+
Map<String, Object> args = getFieldArguments(environment, it, argument);
579+
Argument arg = new Argument(it.getName(), it.getValue());
565580

566581
if(it.getValue() instanceof ArrayValue) {
567582
return getArrayFieldPredicate(fieldName, cb, path, it,
568-
argumentEnvironment(environment, arguments),
569-
new Argument(it.getName(), it.getValue()));
583+
argumentEnvironment(environment, args),
584+
arg);
570585
}
571586

572-
573587
return getFieldPredicate(fieldName, cb, path, it,
574-
argumentEnvironment(environment, arguments),
575-
new Argument(it.getName(), it.getValue()));
588+
argumentEnvironment(environment, args),
589+
arg);
576590
})
577591
.forEach(predicates::add);
578592

@@ -584,20 +598,21 @@ private Predicate getFieldPredicate(String fieldName, CriteriaBuilder cb, From<?
584598
GraphQLFieldDefinition fieldDefinition = getFieldDef(environment.getGraphQLSchema(),
585599
this.getObjectType(environment),
586600
new Field(fieldName));
587-
Map<String, Object> arguments = new LinkedHashMap<>();
601+
Map<String, Object> args = new LinkedHashMap<>();
602+
Argument arg = new Argument(logical.name(), expressionValue);
588603
boolean isOptional = false;
589604

590605
if(Logical.names().contains(argument.getName())) {
591-
arguments.put(logical.name(), environment.getArgument(argument.getName()));
606+
args.put(logical.name(), environment.getArgument(argument.getName()));
592607
} else {
593-
arguments.put(logical.name(), environment.getArgument(fieldName));
608+
args.put(logical.name(), environment.getArgument(fieldName));
594609

595610
isOptional = isOptionalAttribute(getAttribute(environment, argument));
596611
}
597612

598613
return getArgumentPredicate(cb, reuseJoin(path, fieldName, isOptional),
599-
wherePredicateEnvironment(environment, fieldDefinition, arguments),
600-
new Argument(logical.name(), expressionValue));
614+
wherePredicateEnvironment(environment, fieldDefinition, args),
615+
arg);
601616
}
602617

603618
// Let's parse simple Criteria expressions, i.e. EQ, LIKE, etc.

0 commit comments

Comments
 (0)