You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by jd...@apache.org on 2026/04/08 04:24:28 UTC

(grails-core) 01/01: WIP

This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch expandedTests/issue-10844_take2
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 6c252f0ca2d42ae5a7012cd9bf341c07d4151d1d
Author: Iván López <lo...@gmail.com>
AuthorDate: Thu Nov 5 10:51:53 2020 +0100

    WIP
---
 .../web/mapping/DefaultUrlMappingEvaluator.java    |  1 +
 .../web/mapping/GroupedUrlMappingSpec.groovy       | 75 +++++++++++++++++++++-
 2 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/DefaultUrlMappingEvaluator.java b/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/DefaultUrlMappingEvaluator.java
index 146f67b2dd..5834b6cff1 100644
--- a/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/DefaultUrlMappingEvaluator.java
+++ b/grails-web-url-mappings/src/main/groovy/org/grails/web/mapping/DefaultUrlMappingEvaluator.java
@@ -578,6 +578,7 @@ public class DefaultUrlMappingEvaluator implements UrlMappingEvaluator, ClassLoa
             this.isInCollection = true;
             try {
                 callable.setDelegate(this);
+//                callable.setResolveStrategy(Closure.DELEGATE_FIRST);
                 callable.call();
             } finally {
                 isInCollection = previousState ;
diff --git a/grails-web-url-mappings/src/test/groovy/grails/web/mapping/GroupedUrlMappingSpec.groovy b/grails-web-url-mappings/src/test/groovy/grails/web/mapping/GroupedUrlMappingSpec.groovy
index 8a1cdab1ed..37d996fdda 100644
--- a/grails-web-url-mappings/src/test/groovy/grails/web/mapping/GroupedUrlMappingSpec.groovy
+++ b/grails-web-url-mappings/src/test/groovy/grails/web/mapping/GroupedUrlMappingSpec.groovy
@@ -3,6 +3,7 @@ package grails.web.mapping
 import grails.util.GrailsWebMockUtil
 import grails.web.http.HttpHeaders
 import org.springframework.web.context.request.RequestContextHolder
+import spock.lang.IgnoreRest
 import spock.lang.Issue
 
 import javax.servlet.http.HttpServletRequest
@@ -29,27 +30,95 @@ import javax.servlet.http.HttpServletResponse
  */
 class GroupedUrlMappingSpec extends AbstractUrlMappingsSpec {
 
+    @IgnoreRest
     @Issue('#10308')
     void "Test mapping with group and nested collection"() {
         given:
         def linkGenerator = getLinkGenerator {
             "/foos"(resources: 'foo') {
                 collection {
-                    '/baz'(controller: 'foo', action: 'baz')
+                    '/baz'(controller: 'foo1', action: 'baz')
                 }
             }
 
             group "/g", {
                 "/bars"(resources: 'bar') {
                     collection {
-                        '/baz'(controller: 'bar', action: 'baz')
+//                        '/baz'(controller: 'bar1', action: 'baz')
+                        '/baz'(resources: 'baz')
                     }
                 }
             }
         }
 
         expect:
-        linkGenerator.link(controller:'bar', action:'baz', params:[barId:1]) == 'http://localhost/g/bars/1/baz'
+        linkGenerator.link(controller:'bar1', action:'baz', params:[barId:1, bazId:2]) == 'http://localhost/g/bars/1/baz' //http://localhost/g/bars/baz?barId=1
+        linkGenerator.link(controller:'foo1', action:'baz', params:[fooId:1]) == 'http://localhost/foos/baz?fooId=1'
+
+//        http://localhost/bar/baz?userId=1
+    }
+
+    @IgnoreRest
+    void "Test mapping with group and nested collection....."() {
+        given:
+        def linkGenerator = getLinkGenerator {
+            "/books"(resources: 'book') {
+                collection {
+                    "/authors"(resources: 'author')
+                }
+            }
+        }
+
+        expect:
+        linkGenerator.link(controller:'author', action:'show', method:'GET', params:[bookId:1, id:2]) == 'http://localhost/books/authors/2?bookId=1'
+
+        //'http://localhost/books/authors/2?bookId=1'
+    }
+
+//    https://github.com/grails/grails-core/issues/10308
+//    https://github.com/grails/grails-core/issues/10844
+
+    @IgnoreRest
+    @Issue('#10844')
+    void "Test mapping with group and nested collection (II)"() {
+        given:
+        def linkGenerator = getLinkGenerator {
+            '/api1/employees'(resources: 'employeea') {
+                collection {
+                    '/search'(controller: 'employee1', action: 'search1', method: 'GET')
+                }
+            }
+
+            group '/api2', {
+                '/employees'(resources: 'employeeb') {
+                    collection {
+                        '/search'(controller: 'employee2', action: 'search2', method: 'GET')
+                    }
+                }
+            }
+
+//            get "/$controller/$id(.$format)?"(action:"show")
+//
+//            "/$controller/$action?/$id?(.$format)?"{
+//                constraints {
+//                    // apply constraints here
+//                }
+//            }
+        }
+
+        expect:
+        linkGenerator.link(controller: 'employee1', action: 'search1', method: 'GET', params: [employeeaId: 1]) == 'http://localhost/api1/employees/search?userId=1'
+        linkGenerator.link(controller: 'employee2', action: 'search2', method: 'GET', params: [employeebId: 1]) == 'http://localhost/api2/employees/search?userId=1'
+
+//        http://localhost/employee2/search2?userId=1
+
+//        and:
+        linkGenerator.link(resource: 'employeea', method: 'PUT', params: [id: 1]) == 'http://localhost/api1/employees/1'
+        linkGenerator.link(resource: 'employeeb', method: 'PUT', params: [id: 1]) == 'http://localhost/api2/employees/1'
+
+        and:
+        linkGenerator.link(resource: 'employeea', method: 'POST', params: [employeeaId: 1]) == 'http://localhost/api1/employees?employeeaId=1'
+        linkGenerator.link(resource: 'employeeb', method: 'POST', params: [employeebId: 1]) == 'http://localhost/api2/employees?employeebId=1'
     }
 
     @Issue('#9417')