testlens-app[bot] commented on PR #15987: URL: https://github.com/apache/grails-core/pull/15987#issuecomment-4994411038
## 🚨 TestLens detected 2 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 #### [CI / Build Grails Forge \(Java 21, indy\=true\)](https://github.com/apache/grails-core/actions/runs/29515213169/job/87678491109?pr=15987) > :grails-forge-core:test [grails-forge] | Test | Runs | Flakiness | |---|---|--:| | GrailsGspSpec > test default layout includes the language selector dropdown | ❌ | 0% 🟢 | | GrailsGspSpec > test default layout keeps the navbar minimal and pins the default language | ❌ | 0% 🟢 | 🏷️ Commit: 3af80d727e0dba8794439ef93dff45e65a87129a ▶️ Tests: 16167 executed 🟡 Checks: 23/55 completed ### Test Failures <details> <summary><strong>GrailsGspSpec > test default layout includes the language selector dropdown</strong> (:grails-forge-core:test [grails-forge] in <a href="https://github.com/apache/grails-core/actions/runs/29515213169/job/87678491109?pr=15987">CI / Build Grails Forge (Java 21, indy=true)</a>)</summary> ``` Condition not satisfied: layout.contains('?lang=${availableLocale.toLanguageTag()}') | | | false <!doctype html> <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title><g:layoutTitle default="Grails"/></title> <asset:link rel="icon" href="favicon.ico" type="image/x-ico"/> <asset:stylesheet src="application.css"/> <asset:javascript src="theme.js"/> <g:layoutHead/> </head> <body> <nav class="navbar navbar-expand-lg bg-body border-bottom shadow-sm"> <div class="container-lg"> <a class="navbar-brand d-flex align-items-center" href="${request.contextPath}/"> <asset:image class="w-75" src="grails.svg" alt="Grails Logo"/> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav" aria-controls="mainNav" aria-expanded="false" aria-label="${message(code: 'layout.nav.toggle', default: 'Toggle navigation')}"> <span class="navbar-toggler-icon"></span> </button> <g:set var="navControllers" value="${grailsApplication.controllerClasses.toList().sort { it.fullName }}"/> <div class="collapse navbar-collapse" id="mainNav"> <g:if test="${navControllers}"> <%-- A filter earns its place only once the list is long enough to be a chore to scan; below the threshold the plain list is quicker. --%> <g:set var="showNavFilter" value="${navControllers.size() > 8}"/> <ul class="navbar-nav me-auto"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="controllersDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <g:message code="welcome.artefact.controllers"/> </a> <ul class="dropdown-menu" id="controllersMenu" aria-labelledby="controllersDropdown" style="max-height: 60vh; overflow-y: auto;"> <g:if test="${showNavFilter}"> <li class="position-sticky top-0 bg-body border-bottom px-2 pt-1 pb-2" style="z-index: 2;"> <input type="search" class="form-control form-control-sm nav-filter-input" data-filter-scope="#controllersMenu" placeholder="${message(code: 'welcome.filter.name')}" aria-label="${message(code: 'welcome.filter.name')}"> </li> </g:if> <g:each var="c" in="${navControllers}"> <g:set var="navControllerName" value="${(c.fullName ?: '') .tokenize('.') .last() .replaceFirst(/Controller$/, '')}"/> <g:set var="navControllerLabel" value="${((c.namespace ?: '').trim()) ? "${c.namespace} / ${navControllerName}" : navControllerName}"/> <li data-name="${navControllerLabel}"> <g:link controller="${c.logicalPropertyName}" namespace="${c.namespace}" class="dropdown-item">${navControllerLabel}</g:link> </li> </g:each> <g:if test="${showNavFilter}"> <li class="nav-filter-empty dropdown-item-text small text-body-secondary d-none"> <g:message code="welcome.filter.none"/> </li> </g:if> </ul> </li> </ul> </g:if> <ul class="navbar-nav ms-auto"> <g:set var="availableLocales" value="${application.getAttribute('availableLocales')}"/> <g:if test="${availableLocales && availableLocales.size() > 1}"> <g:set var="currentLocale" value="${org.springframework.web.servlet.support.RequestContextUtils.getLocale(request)}"/> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="localeDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <i class="bi bi-globe me-1"></i>${currentLocale.getDisplayName(currentLocale)} </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="localeDropdown"> <%-- g:localeSelect (body form) renders each translated locale, already autonym-sorted by AvailableLocaleResolver, and flags the active and default entries; this layout supplies only the Bootstrap markup. pinDefault emits the configured default first (index 0), so a user who switched to a language they cannot read always has a recognizable way back at the top, above the divider. --%> <g:localeSelect available="true" pinDefault="true" var="loc"> <g:if test="${loc.index == 1}"><li><hr class="dropdown-divider"></li></g:if> <li> <a class="dropdown-item${loc.active ? ' active' : ''}" href="?lang=${loc.tag}">${loc.autonym}</a> </li> </g:localeSelect> </ul> </li> </g:if> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle d-flex align-items-center" href="#" id="themeDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="${message(code: 'layout.theme.toggle')}"> <i class="bi bi-circle-half theme-icon-active"></i> <span class="d-lg-none ms-2"><g:message code="layout.theme.toggle"/></span> </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="themeDropdown"> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false"> <i class="bi bi-sun-fill me-2"></i><g:message code="layout.theme.light"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false"> <i class="bi bi-moon-stars-fill me-2"></i><g:message code="layout.theme.dark"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="false"> <i class="bi bi-circle-half me-2"></i><g:message code="layout.theme.auto"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> </ul> </li> </ul> </div> </div> </nav> <div class="bg-body-tertiary"> <div class="container-lg py-4"> <g:flashMessages /> <g:layoutBody/> </div> </div> <footer class="border-top py-5" role="contentinfo"> <div class="container-lg"> <div class="row g-4"> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://guides.grails.org" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.guides.title"/></h6> <asset:image src="advancedgrails.svg" alt="${message(code: 'layout.guides.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.guides.text"/> </p> </div> </a> </div> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://grails.apache.org/docs/" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.docs.title"/></h6> <asset:image src="documentation.svg" alt="${message(code: 'layout.docs.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.docs.text"/> </p> </div> </a> </div> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://grails.apache.org/community.html" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.community.title"/></h6> <asset:image src="community.svg" alt="${message(code: 'layout.community.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.community.text"/> </p> </div> </a> </div> </div> </div> </footer> <div id="spinner" class="position-absolute top-0 end-0 p-1" style="display:none;"> <div class="spinner-border spinner-border-sm" role="status"> <span class="visually-hidden"><g:message code="layout.loading"/></span> </div> </div> <asset:javascript src="application.js"/> </body> </html> at org.grails.forge.feature.view.GrailsGspSpec.test default layout includes the language selector dropdown(GrailsGspSpec.groovy:131) ``` </details> <details> <summary><strong>GrailsGspSpec > test default layout keeps the navbar minimal and pins the default language</strong> (:grails-forge-core:test [grails-forge] in <a href="https://github.com/apache/grails-core/actions/runs/29515213169/job/87678491109?pr=15987">CI / Build Grails Forge (Java 21, indy=true)</a>)</summary> ``` Condition not satisfied: layout.contains("getProperty('spring.web.locale', 'en')") | | | false <!doctype html> <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title><g:layoutTitle default="Grails"/></title> <asset:link rel="icon" href="favicon.ico" type="image/x-ico"/> <asset:stylesheet src="application.css"/> <asset:javascript src="theme.js"/> <g:layoutHead/> </head> <body> <nav class="navbar navbar-expand-lg bg-body border-bottom shadow-sm"> <div class="container-lg"> <a class="navbar-brand d-flex align-items-center" href="${request.contextPath}/"> <asset:image class="w-75" src="grails.svg" alt="Grails Logo"/> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNav" aria-controls="mainNav" aria-expanded="false" aria-label="${message(code: 'layout.nav.toggle', default: 'Toggle navigation')}"> <span class="navbar-toggler-icon"></span> </button> <g:set var="navControllers" value="${grailsApplication.controllerClasses.toList().sort { it.fullName }}"/> <div class="collapse navbar-collapse" id="mainNav"> <g:if test="${navControllers}"> <%-- A filter earns its place only once the list is long enough to be a chore to scan; below the threshold the plain list is quicker. --%> <g:set var="showNavFilter" value="${navControllers.size() > 8}"/> <ul class="navbar-nav me-auto"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="controllersDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <g:message code="welcome.artefact.controllers"/> </a> <ul class="dropdown-menu" id="controllersMenu" aria-labelledby="controllersDropdown" style="max-height: 60vh; overflow-y: auto;"> <g:if test="${showNavFilter}"> <li class="position-sticky top-0 bg-body border-bottom px-2 pt-1 pb-2" style="z-index: 2;"> <input type="search" class="form-control form-control-sm nav-filter-input" data-filter-scope="#controllersMenu" placeholder="${message(code: 'welcome.filter.name')}" aria-label="${message(code: 'welcome.filter.name')}"> </li> </g:if> <g:each var="c" in="${navControllers}"> <g:set var="navControllerName" value="${(c.fullName ?: '') .tokenize('.') .last() .replaceFirst(/Controller$/, '')}"/> <g:set var="navControllerLabel" value="${((c.namespace ?: '').trim()) ? "${c.namespace} / ${navControllerName}" : navControllerName}"/> <li data-name="${navControllerLabel}"> <g:link controller="${c.logicalPropertyName}" namespace="${c.namespace}" class="dropdown-item">${navControllerLabel}</g:link> </li> </g:each> <g:if test="${showNavFilter}"> <li class="nav-filter-empty dropdown-item-text small text-body-secondary d-none"> <g:message code="welcome.filter.none"/> </li> </g:if> </ul> </li> </ul> </g:if> <ul class="navbar-nav ms-auto"> <g:set var="availableLocales" value="${application.getAttribute('availableLocales')}"/> <g:if test="${availableLocales && availableLocales.size() > 1}"> <g:set var="currentLocale" value="${org.springframework.web.servlet.support.RequestContextUtils.getLocale(request)}"/> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="localeDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <i class="bi bi-globe me-1"></i>${currentLocale.getDisplayName(currentLocale)} </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="localeDropdown"> <%-- g:localeSelect (body form) renders each translated locale, already autonym-sorted by AvailableLocaleResolver, and flags the active and default entries; this layout supplies only the Bootstrap markup. pinDefault emits the configured default first (index 0), so a user who switched to a language they cannot read always has a recognizable way back at the top, above the divider. --%> <g:localeSelect available="true" pinDefault="true" var="loc"> <g:if test="${loc.index == 1}"><li><hr class="dropdown-divider"></li></g:if> <li> <a class="dropdown-item${loc.active ? ' active' : ''}" href="?lang=${loc.tag}">${loc.autonym}</a> </li> </g:localeSelect> </ul> </li> </g:if> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle d-flex align-items-center" href="#" id="themeDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="${message(code: 'layout.theme.toggle')}"> <i class="bi bi-circle-half theme-icon-active"></i> <span class="d-lg-none ms-2"><g:message code="layout.theme.toggle"/></span> </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="themeDropdown"> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light" aria-pressed="false"> <i class="bi bi-sun-fill me-2"></i><g:message code="layout.theme.light"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark" aria-pressed="false"> <i class="bi bi-moon-stars-fill me-2"></i><g:message code="layout.theme.dark"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> <li> <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto" aria-pressed="false"> <i class="bi bi-circle-half me-2"></i><g:message code="layout.theme.auto"/><i class="bi bi-check ms-auto d-none"></i> </button> </li> </ul> </li> </ul> </div> </div> </nav> <div class="bg-body-tertiary"> <div class="container-lg py-4"> <g:flashMessages /> <g:layoutBody/> </div> </div> <footer class="border-top py-5" role="contentinfo"> <div class="container-lg"> <div class="row g-4"> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://guides.grails.org" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.guides.title"/></h6> <asset:image src="advancedgrails.svg" alt="${message(code: 'layout.guides.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.guides.text"/> </p> </div> </a> </div> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://grails.apache.org/docs/" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.docs.title"/></h6> <asset:image src="documentation.svg" alt="${message(code: 'layout.docs.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.docs.text"/> </p> </div> </a> </div> <div class="col-12 col-md-4"> <a class="card h-100 text-decoration-none shadow-sm border-1" href="https://grails.apache.org/community.html" target="_blank" rel="noopener"> <div class="card-body p-4"> <div class="d-flex align-items-center justify-content-between mb-2"> <h6 class="card-title mb-0 fw-semibold"><g:message code="layout.community.title"/></h6> <asset:image src="community.svg" alt="${message(code: 'layout.community.title')}" width="34" height="34"/> </div> <p class="card-text text-body-secondary mb-0"> <g:message code="layout.community.text"/> </p> </div> </a> </div> </div> </div> </footer> <div id="spinner" class="position-absolute top-0 end-0 p-1" style="display:none;"> <div class="spinner-border spinner-border-sm" role="status"> <span class="visually-hidden"><g:message code="layout.loading"/></span> </div> </div> <asset:javascript src="application.js"/> </body> </html> at org.grails.forge.feature.view.GrailsGspSpec.test default layout keeps the navbar minimal and pins the default language(GrailsGspSpec.groovy:185) ``` </details> ### Muted Tests > [!NOTE] > Checks are currently running using the configuration below. Select tests to mute in this pull request: 🔲 GrailsGspSpec > test default layout includes the language selector dropdown <!-- uniqueId=[engine:spock]/[spec:org.grails.forge.feature.view.GrailsGspSpec]/[feature:$spock_feature_1_7] --> 🔲 GrailsGspSpec > test default layout keeps the navbar minimal and pins the default language <!-- uniqueId=[engine:spock]/[spec:org.grails.forge.feature.view.GrailsGspSpec]/[feature:$spock_feature_1_10] --> 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](https://testlens.app)._ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
