Skip to content

Make SiteMesh 3 the default GSP layout#15713

Draft
codeconsole wants to merge 7 commits into
apache:8.0.xfrom
codeconsole:feat/sitemesh3-default-layout
Draft

Make SiteMesh 3 the default GSP layout#15713
codeconsole wants to merge 7 commits into
apache:8.0.xfrom
codeconsole:feat/sitemesh3-default-layout

Conversation

@codeconsole
Copy link
Copy Markdown
Contributor

Makes SiteMesh 3 the default GSP layout in generated applications, mutually exclusive with the legacy SiteMesh 2 grails-layout feature.

Introduces a GspLayout one-of feature group (enforced by OneOfFeatureValidator):

  • GspLayout — abstract one-of parent (Category.VIEW, WEB/WEB_PLUGIN)
  • Sitemesh3 — default member; auto-applied unless another GspLayout is selected; adds grails-sitemesh3
  • GrailsLayout — opt-in member; adds grails-layout (SiteMesh 2)

GrailsGsp is intentionally not modified: its existing if (!isFeaturePresent(Sitemesh3)) guard already skips grails-layout when SiteMesh 3 applies, so SiteMesh 2 remains available via GrailsLayout. Selecting both sitemesh3 and grails-layout now fails fast.

Depends on #15710

Split out from #15710 per review feedback ("making this the default & updating to sitemesh 3 should be separate PRs"). This branch is stacked on #15710, so until #15710 merges this PR's diff also shows the enable-SiteMesh-3 commits; it will reduce to just the make-default change once #15710 lands. Please merge #15710 first.

…s-layout

Introduce a GspLayout one-of feature group so SiteMesh 3 (grails-sitemesh3)
and the legacy SiteMesh 2 grails-layout are both selectable but never
applied together (enforced by OneOfFeatureValidator):

- GspLayout: abstract OneOfFeature parent (Category.VIEW), WEB/WEB_PLUGIN
- Sitemesh3: default member; auto-applied unless another GspLayout is
  selected; adds grails-sitemesh3
- GrailsLayout: opt-in member; adds grails-layout (SiteMesh 2)

The GspLayout features now own the layout dependency, so GrailsGsp's
'if (!isFeaturePresent(Sitemesh3)) add grails-layout' block is removed.
Selecting both sitemesh3 and grails-layout now fails fast.
@jamesfredley jamesfredley self-requested a review June 3, 2026 15:06
@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 3, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 48.3542%. Comparing base (4836003) to head (f816246).
⚠️ Report is 93 commits behind head on 8.0.x.

Additional details and impacted files

Impacted file tree graph

@@                Coverage Diff                 @@
##                8.0.x     #15713        +/-   ##
==================================================
- Coverage     49.0042%   48.3542%   -0.6500%     
+ Complexity      16759      15108      -1651     
==================================================
  Files            2014       1870       -144     
  Lines           94747      85459      -9288     
  Branches        16547      14901      -1646     
==================================================
- Hits            46430      41323      -5107     
+ Misses          41019      37803      -3216     
+ Partials         7298       6333       -965     

see 157 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jamesfredley
Copy link
Copy Markdown
Contributor

Gaps to review and potentially address before SM3 becomes default

Gap / Open item SM2 / Current state SM3 / Needed
g:applyLayout attributes (template,url,action,controller,params,model,contentType,encoding,parse) Full support - RenderGrailsLayoutTagLib.groovy:100-173 name + body only; other attrs silently ignored - RenderSitemeshTagLib.groovy:77-106
Default-layout config + implicit application fallback Reads grails.views.layout.default (LayoutGrailsPlugin:37); falls back to layout application (GroovyPageLayoutFinder:180) Reads only grails.sitemesh.default.layout (Sitemesh3GrailsPlugin:83); no application fallback
Partial/template render suppression (GrailsRenderViewMutator + GrailsLayoutSelector) Registers both (LayoutGrailsPlugin:74-75); consumed by core ResponseRenderer:340-341,563 Registers neither → beans null → behavior lost
grails.views.layout.enable.nongsp (non-GSP/JSP layouts) LayoutGrailsPlugin:38 + GroovyPageLayoutFinder enableNonGspViews/viewMustExist Sitemesh3LayoutFinder:192-194 GSP locator only; flag unsupported
Captured-page isolation across nested/sibling applyLayout N/A (different mechanism) GrailsSiteMeshViewContext.dispatch:81 sets fresh page, no restore; taglib saves only LAYOUT_ATTRIBUTE (RenderSitemeshTagLib:78,100-104)
No-body captured page + layoutBody Handled CaptureAwareContentProcessor:82 returns used page without data; layoutBody reads only body (RenderSitemeshTagLib:218-225)
<title> strip robustness Regex-based, well-formed extractHead() matches "<title" as prefix - mis-slices <titlebar>/<title-x> (Sitemesh3CapturedPage.java:232)
Aggregate web starter still defaults to SM2 starter-web/build.gradle:53:grails-layout unless SITEMESH3_TESTING_ENABLED=true Default branch must be :grails-sitemesh3
~35 test examples default to SM2 else → grails-layout in every example (e.g. app1/build.gradle:42-47) Default = SM3; SM2 via forced lane
Main unit suite defaults to SM2 grails-test-suite-uber/build.gradle:53-58:grails-layout Default = SM3
SM2-only examples with no SM3 coverage Hardcoded grails-layout: test-phases:42, scaffolding:49, scaffolding-fields:38, jetty:41, database-cleanup:37, gsp-layout:50 Keep as SM2 anchors; add SM3 variants where parity matters
Default path ≠ tested path SITEMESH3_TESTING_ENABLED gates SM3; default build never runs SM3 Retire/invert flag so default == tested
No CI lane exercising SM3 as default Only opt-in env runs SM3 Add SM3-default lane + SM2 lane
Fragile upstream auto-config suppression Disabled NoopSitemeshFilter named sitemesh suppresses upstream SiteMeshAutoConfiguration (Sitemesh3GrailsPlugin:106-124) Robust suppression + guard test
Servlet 6.1 / Tomcat 11 forward→include dispatch SM3 bypasses RequestDispatcher.forward() for absolute layout paths (GrailsSiteMeshViewContext.java:88-93) Functional coverage on Tomcat 11
grails-gsp-spring-boot unpublished In settings.gradle:174, depends on SM3 (spring-boot/build.gradle:37), but absent from publish-root-config.gradle (only grails-sitemesh3 at :75) Publish or don't rely on it

Not gaps (verified parity)

Resolution order (6 steps), NONE_LAYOUT, layoutTitle/layoutHead, pageProperty/ifPageProperty, meta extraction, body.* attrs, grailsLayout:parameter, comma/chained decoration (happy path), unbounded layout cache (SM2 identical).

Minor / cosmetic

Cache-interval key differs: SM3 grails.sitemesh.layout.cache.interval vs SM2 grails.gsp.reload.interval.

@codeconsole codeconsole requested review from matrei and sbglasius June 3, 2026 21:44
Copy link
Copy Markdown
Contributor

@matrei matrei left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There seems to be a glitch in the UI when a default feature is replaced:

Image

Copy link
Copy Markdown
Contributor

@jdaugherty jdaugherty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I forgot about the test apps pointing at grails-layout by default. We'll need to update that as part of this switch and ensure no regressions.

@jamesfredley
Copy link
Copy Markdown
Contributor

I wish github didn't scroll on tables like that in comments, but there are a number of key features that will need to be added to the sitemesh 3 plugin to match sitemesh 2's historical feature set. When the tests are all run against sitemesh 3 it will surface most of these, but the comment above should be close to comprehensive.

…itch

Address review feedback on the SiteMesh 3 default change:

- Align the SiteMesh 3 feature title with SiteMesh 2 ("GSP SiteMesh 3
  Layouts") and clean up GspLayoutSpec (single quotes, drop the
  short-lived SNAPSHOT-repo assertions).
- Fix the UI glitch where replacing the default layout left both
  sitemesh3 and grails-layout selected. The two decorators are now
  driven by a single GspLayoutImpl option (SITEMESH3 default,
  GRAILS_LAYOUT) instead of a visible feature card, mirroring the
  servlet and reloading one-of groups. Both members are invisible
  DefaultFeatures that apply based on the selected option, so the
  default-features endpoint always resolves exactly one member.

Threads the option through Options, FeatureFilter, ApplicationController
and ContextFactory, exposes it via select-options (GspLayoutImplDTO /
GspLayoutImplSelectOptions) for the UI dropdown, and adds a --gsp-layout
CLI option. Updates BuildBuilder and GspLayoutSpec and adds
SelectOptionsControllerSpec.
@codeconsole codeconsole marked this pull request as draft June 5, 2026 20:06
The test apps already gate the layout dependency on the
SITEMESH3_TESTING_ENABLED environment variable, but no CI lane set it,
so the suite only ever exercised the legacy grails-layout. Set the flag
at the workflow level in the CI and Groovy joint builds so the example
apps and grails-test-suite-uber resolve grails-sitemesh3 by default.

No build-script changes needed: the flag stays as-is, the SiteMesh 2
anchors keep their grails-layout coverage, and developers can still drop
the flag to run against SiteMesh 2 locally.
@codeconsole codeconsole force-pushed the feat/sitemesh3-default-layout branch from f816246 to 021059d Compare June 5, 2026 23:47
@codeconsole
Copy link
Copy Markdown
Contributor Author

#15585

In the filterless SiteMesh 3 pipeline the GSP capture taglib writes the
full <head>/<body> markup to the response buffer and also captures the
head/body into a Sitemesh3CapturedPage. When no decorator is selected
(e.g. a view with no <meta name="layout"> and no matching convention or
default layout), SiteMeshView writes content.getData() back. The captured
page had neither renderedContent nor pageBuffer set, so getData()
reconstructed only from (empty) properties and emitted an empty
<html><head></head><body></body></html>.

Attach the original response buffer as the captured page's rendered
content in the no-merge branch so the original page is written back when
nothing decorates it. Decorated (meta-layout) pages are unaffected: they
take the decorate branch, which reads the head/body child properties.

Verified against grails-test-examples/app1 integration tests under
SITEMESH3_TESTING_ENABLED=true: ConfigTestControllerSpec,
ControllerIncludesSpec, ControllerFromPluginSpec and
ConditionalOnPropertyFromPluginYmlSpec now pass, with no regression to
meta-layout pages (BookFunctionalSpec).
@testlens-app
Copy link
Copy Markdown

testlens-app Bot commented Jun 6, 2026

🚨 TestLens detected 440 failed tests 🚨

Here is what you can do:

  1. Inspect the test failures carefully.
  2. If you are convinced that some of the tests are flaky, you can mute them below.
  3. Finally, trigger a rerun by checking the rerun checkbox.

Test Summary (first 80 of 440)

Check Project/Task Test Runs
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-database-cleanup:integrationTest ClassLevelCleanupSpec > test 1 - insert data and verify it was persisted 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Can navigate from list to create to list 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Can navigate from list to show to edit to show 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Create department with valid data succeeds 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Create employee with valid data succeeds 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Create page displays correctly 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Delete removes employee from list 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Department list page displays correctly 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Edit employee with valid data succeeds 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Edit page displays correctly with existing data 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Employee list page displays correctly 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > List page shows create new button 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Project list page displays correctly 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Show page displays employee details 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CrudFunctionalSpec > Show page has edit and delete buttons 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest CustomTemplatesSpec > custom biography wrapper template is used on create page 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Association select contains existing options 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > BelongsTo association renders as select dropdown 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > BigDecimal property renders as number input 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Boolean property renders as checkbox 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Byte array property renders as file input 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Currency property renders as select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Date property renders as date input or text 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Embedded object properties are rendered inline 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Enum property renders as select dropdown 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Enum select contains all enum values 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Field #fieldName is present on create form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Field #fieldName is present on create form > Field active is present on create form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Field #fieldName is present on create form > Field email is present on create form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Field #fieldName is present on create form > Field firstName is present on create form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Field #fieldName is present on create form > Field lastName is present on create form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Fields have associated labels 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > HasMany association renders as multi-select or list 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Integer property renders as number input 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Locale property renders as select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Property with inList constraint renders as select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > Required fields have visual indicator 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > String property renders as text input 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > String property with email constraint renders as email input 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > String property with widget:textarea renders as textarea 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > TimeZone property renders as select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest FieldTypesSpec > URL property renders as url input or text 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-test-phases:functionalTest GreetingControllerFunctionalSpec > test greeting controller renders response 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-test-phases:integrationTest GreetingServiceIntegrationSpec > test greeting service is wired in integration context 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-app1:integrationTest LayoutWithTemplateSpec > Test that a layout is not applied to a template rendered by a controller by default 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-database-cleanup:integrationTest MethodLevelCleanupSpec > test 1 - insert data with @DatabaseCleanup and explicit type on method 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest PaginationSpec > employee list displays data table with records 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > BelongsTo association displays toString representation 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > BelongsTo renders as select dropdown with existing entities 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > BelongsTo select includes null/empty option for nullable associations 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can change belongsTo association on edit 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can create entity without selecting optional belongsTo association 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can save entity with embedded object data 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can select belongsTo association when creating entity 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can select multiple hasMany items on edit page 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Can update embedded object values 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Creating employee with department creates bidirectional relationship 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Deleting department shows appropriate warning or behavior 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Department list page renders correctly with hasMany relationship 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Department show page displays hasMany employees list 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Edit page handles null associations gracefully 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Edit page preserves belongsTo selection 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Edit page preserves embedded object values 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Embedded address fields render inline with dotted notation 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Embedded fields are grouped together in form 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > HasMany collection is displayed as list or table on show page 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > HasMany items display as links to associated entities 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > HasMany multi-select shows available options from database 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > HasMany on child side renders as multi-select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Project create page shows employees multi-select 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Project edit allows selecting multiple employees 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Project shows many-to-many employees 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Removing department association from employee works correctly 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Show page displays belongsTo association as link or text 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Show page displays embedded object properties 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Show page handles empty hasMany collection gracefully 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest RelationshipsFunctionalSpec > Show page handles null belongsTo association gracefully 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest ValidationFunctionalSpec > Age above maximum (120) shows error 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest ValidationFunctionalSpec > Age at minimum boundary (18) is accepted 🚫 ❌
CI - Groovy Joint Validation Build / build_grails :grails-test-examples-scaffolding-fields:integrationTest ValidationFunctionalSpec > Age below minimum (18) shows error 🚫 ❌

🏷️ Commit: 920c12c
▶️ Tests: 14647 executed
⚪️ Checks: 43/43 completed

Test Failures (first 10 of 440)

ClassLevelCleanupSpec > test 1 - insert data and verify it was persisted (:grails-test-examples-database-cleanup:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@667b3972 testClass = dbcleanup.ClassLevelCleanupSpec, locations = [], classes = [dbcleanup.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@315105f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@17b37e9a, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@29c17c3d, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@d6147cc1], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at dbcleanup.Application.main(Application.groovy:27)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 13 more
CrudFunctionalSpec > Can navigate from list to create to list (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Can navigate from list to show to edit to show (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Create department with valid data succeeds (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Create employee with valid data succeeds (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Create page displays correctly (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Delete removes employee from list (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Department list page displays correctly (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Edit employee with valid data succeeds (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more
CrudFunctionalSpec > Edit page displays correctly with existing data (:grails-test-examples-scaffolding-fields:integrationTest in CI / Functional Tests (Java 21, indy=false))
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e5aac4c testClass = scaffoldingfields.CrudFunctionalSpec, locations = [], classes = [scaffoldingfields.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@6963b88c, org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@557b6a37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@41ef1ea2, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@85d7cd2f], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
	at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:156)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
	at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
	at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:156)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:102)
	at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
	at groovy.lang.Closure.call(Closure.java:433)
	at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:101)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'jspViewResolver' is expected to be of type 'org.springframework.context.ApplicationListener' but was actually of type 'org.grails.plugins.sitemesh3.GrailsSiteMeshViewResolver'
	at org.springframework.beans.factory.support.AbstractBeanFactory.adaptBeanInstance(AbstractBeanFactory.java:418)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:399)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:266)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:222)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:140)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:448)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1016)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
	at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:100)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:394)
	at grails.boot.GrailsApp.run(GrailsApp.groovy:383)
	at scaffoldingfields.Application.main(Application.groovy:30)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
	... 17 more

Muted Tests (first 20 of 440)

Select tests to mute in this pull request:

  • ClassLevelCleanupSpec > test 1 - insert data and verify it was persisted
  • CrudFunctionalSpec > Can navigate from list to create to list
  • CrudFunctionalSpec > Can navigate from list to show to edit to show
  • CrudFunctionalSpec > Create department with valid data succeeds
  • CrudFunctionalSpec > Create employee with valid data succeeds
  • CrudFunctionalSpec > Create page displays correctly
  • CrudFunctionalSpec > Delete removes employee from list
  • CrudFunctionalSpec > Department list page displays correctly
  • CrudFunctionalSpec > Edit employee with valid data succeeds
  • CrudFunctionalSpec > Edit page displays correctly with existing data
  • CrudFunctionalSpec > Employee list page displays correctly
  • CrudFunctionalSpec > List page shows create new button
  • CrudFunctionalSpec > Project list page displays correctly
  • CrudFunctionalSpec > Show page displays employee details
  • CrudFunctionalSpec > Show page has edit and delete buttons
  • CustomTemplatesSpec > custom biography wrapper template is used on create page
  • FieldTypesSpec > Association select contains existing options
  • FieldTypesSpec > BelongsTo association renders as select dropdown
  • FieldTypesSpec > BigDecimal property renders as number input
  • FieldTypesSpec > Boolean property renders as checkbox

Reuse successful test results:

  • ♻️ Only rerun the tests that failed or were muted before

Click the checkbox to trigger a rerun:

  • Rerun jobs

Learn more about TestLens at testlens.app.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

5 participants