The GitHub Actions job "CI" on grails-core.git/feat/gorm-registry-core-impl has 
failed.
Run started by GitHub user borinquenkid (triggered by borinquenkid).

Head commit for run:
33ec62c3166d924dace9bbaf92408430af517592 / Walter Duque de Estrada 
<[email protected]>
test(grails-datamapping-core): add DynamicFinderCoverageSpec closing PR #15780 
coverage gap

DynamicFinder.java had 19.4% Codecov patch coverage (worst remaining item in
the PR #15780 coverage checklist). The pre-existing DynamicFinderSpec only
covered the static buildMatchSpec helper.

Added DynamicFinderCoverageSpec, exercising the real method-name-parsing /
expression-building pipeline through actual dynamic finder calls on a
SimpleMapDatastore-backed entity (Equal, GreaterThan/LessThan/Between,
Like/InList/NotEqual, IsNull/IsNotNull, Not-negation, And/Or combination,
MissingMethodException on arg-count/conversion failures), list(Map) argument
handling (sort as string/Map, fetch as FetchType map/string alias, cache,
no-sort fallback), getFetchMode's alias table, where{}.list() detached
criteria fetch/order, registerNewMethodExpression's custom-clause extension
hook, the MappingContext-only constructor, the invoke(..., DetachedCriteria,
...) overload, and populateArgumentsForCriteria(BuildableCriteria, Map)
directly (confirmed via repo-wide grep to be dead code - no production
caller uses this overload, only the (Class, Query, Map) one - but still a
public static API worth covering).

Notable findings, neither a bug:
- The operator-style where{ age > 20 } DSL relies on a compile-time AST
  transform this plain test-module compilation doesn't apply; the
  method-call DSL (where { gt('age', 20) }) works without it.
- A custom MethodExpression's finder clause keyword is the registered
  class's simple name exactly (e.g. class AlwaysTrue -> findAllByXAlwaysTrue),
  not a suffixed variant.
- CriteriaBuilder instances from a bare createCriteria() (outside an active
  query-execution closure) have a null internal query field, so join()/
  cache() NPE when called directly; 
populateArgumentsForCriteria(BuildableCriteria,
  Map) is therefore only exercised here via its sort/order branches.

DynamicFinder.java line coverage: 46.5% (194/417) before this item's work ->
74.0% (305/412) after, per local JaCoCo. Full grails-datamapping-core suite
and codeStyle both pass with no regressions.

Co-Authored-By: Claude Sonnet 5 <[email protected]>

Report URL: https://github.com/apache/grails-core/actions/runs/29181868535

With regards,
GitHub Actions via GitBox

Reply via email to