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]

Reply via email to