Fix tests
diff --git a/functional-tests/build.gradle b/functional-tests/build.gradle
index 556702d..115a44e 100644
--- a/functional-tests/build.gradle
+++ b/functional-tests/build.gradle
@@ -48,12 +48,14 @@
}
applyMavenExclusions false
}
+
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if(details.requested.group == 'org.grails' && details.requested.name.startsWith('grails-datastore')) {
details.useVersion("$gormVersion")
}
}
+ resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
dependencies {
@@ -93,6 +95,7 @@
exceptionFormat = 'full'
}
}
+
task wrapper(type: Wrapper) {
gradleVersion = gradleWrapperVersion
}
diff --git a/functional-tests/grails-app/domain/functional/tests/Team.groovy b/functional-tests/grails-app/domain/functional/tests/Team.groovy
index 32e48fc..b2ec2c8 100644
--- a/functional-tests/grails-app/domain/functional/tests/Team.groovy
+++ b/functional-tests/grails-app/domain/functional/tests/Team.groovy
@@ -7,5 +7,5 @@
String name
Player captain
List players
- static hasMany = [players:Player]
+ static hasMany = [players: Player]
}
\ No newline at end of file
diff --git a/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy b/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
index fd94e55..1a34a85 100644
--- a/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
+++ b/functional-tests/src/integration-test/groovy/functional/tests/HttpClientSpec.groovy
@@ -1,11 +1,16 @@
package functional.tests
import grails.testing.spock.OnceBefore
+import io.micronaut.http.client.DefaultHttpClient
+import io.micronaut.http.client.DefaultHttpClientConfiguration
import io.micronaut.http.client.HttpClient
+import io.micronaut.http.client.HttpClientConfiguration
import spock.lang.AutoCleanup
import spock.lang.Shared
import spock.lang.Specification
+import java.time.Duration
+
class HttpClientSpec extends Specification {
@Shared
@@ -18,6 +23,8 @@
@OnceBefore
void init() {
this.baseUrl = "http://localhost:$serverPort"
- this.client = HttpClient.create(new URL(baseUrl))
+ DefaultHttpClientConfiguration configuration = new DefaultHttpClientConfiguration()
+ configuration.setReadTimeout(Duration.ofMinutes(5))
+ this.client = new DefaultHttpClient(new URL(baseUrl), configuration)
}
}
diff --git a/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy b/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
index a6804e8..a8a30c2 100644
--- a/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
+++ b/functional-tests/src/integration-test/groovy/functional/tests/TeamSpec.groovy
@@ -53,8 +53,7 @@
resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).isPresent()
resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).get() == 'application/hal+json;charset=UTF-8'
- resp.body() == '{"_embedded":{"captain":{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},"players":[{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/2","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Messi","version":0}]},"_links":{"self":{"href":"http://localhost:'+serverPort+'/teams/1","hreflang":"' + lang + '","type":"application/hal+json"}},"id":1,"name":"Barcelona","sport":"football","another":{"foo":"bar"}}'
-
+ resp.body() == '{"_embedded":{"players":[{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0},{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/2","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Messi","version":0}],"captain":{"_links":{"self":{"href":"http://localhost:'+serverPort+'/player/show/1","hreflang":"' + lang + '","type":"application/hal+json"}},"name":"Iniesta","version":0}},"_links":{"self":{"href":"http://localhost:'+serverPort+'/teams/1","hreflang":"' + lang + '","type":"application/hal+json"}},"id":1,"name":"Barcelona","sport":"football","another":{"foo":"bar"}}'
}
void "Test composite ID rendering"() {
@@ -71,6 +70,6 @@
resp.status == HttpStatus.OK
resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).isPresent()
resp.headers.getFirst(HttpHeaders.CONTENT_TYPE).get() == 'application/json;charset=UTF-8'
- resp.body() == '{"player":{"id":2,"name":"Messi","sport":"football"},"team":{"id":1,"captain":{"id":1},"name":"Barcelona","sport":"football"},"name":"foo"}'
+ resp.body() == '{"player":{"id":2,"name":"Messi","sport":"football"},"team":{"id":1,"name":"Barcelona","captain":{"id":1},"sport":"football"},"name":"foo"}'
}
}
diff --git a/json-templates/build.gradle b/json-templates/build.gradle
index 1f6502f..aa054a4 100644
--- a/json-templates/build.gradle
+++ b/json-templates/build.gradle
@@ -50,10 +50,6 @@
classes.dependsOn(compileViews)
-jar {
- from sourceSets.main.output
-}
-
// Used for publishing to central repository, remove if not needed
apply from:'../publishing/grailsCentralPublishing.gradle'
apply from:'../publishing/bintrayPublishing.gradle'
diff --git a/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy b/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
index c7dbe80..3c0cd99 100644
--- a/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
+++ b/json/src/main/groovy/grails/plugin/json/view/api/internal/DefaultHalViewHelper.groovy
@@ -26,6 +26,8 @@
import org.grails.datastore.mapping.reflect.EntityReflector
import org.springframework.http.HttpMethod
+import java.lang.reflect.Field
+
/**
* Helps creating HAL links
*
@@ -583,8 +585,11 @@
@Override
void call(String name, Iterable coll, Closure c) throws IOException {
+ Field field = delegate.getClass().getDeclaredField("first")
+ field.setAccessible(true)
+ field.set(delegate, false)
writeName(name)
- verifyValue();
+ verifyValue()
def w = writer
w.write(JsonOutput.OPEN_BRACKET)
boolean first = true
@@ -598,7 +603,6 @@
writeObject( it, c)
}
w.write(JsonOutput.CLOSE_BRACKET)
-
}
@Override
diff --git a/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy b/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
index 746d14f..ccd6709 100644
--- a/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
+++ b/json/src/test/groovy/grails/plugin/json/view/api/JsonApiSpec.groovy
@@ -9,6 +9,7 @@
import spock.lang.Specification
class JsonApiSpec extends Specification implements JsonViewTest, GrailsUnitTest {
+
void setup() {
mappingContext.addPersistentEntities(Widget, Author, Book, ResearchPaper)
}
@@ -89,7 +90,6 @@
given:
SuperHero mutepool = new SuperHero()
mutepool.name = ""
- mutepool.id = 5
mutepool.validate()
when:
@@ -227,7 +227,6 @@
String name
}
-@Entity
class SuperHero implements Validateable {
String name
diff --git a/markup/build.gradle b/markup/build.gradle
index 672cbc6..b1c3326 100644
--- a/markup/build.gradle
+++ b/markup/build.gradle
@@ -55,18 +55,12 @@
}
dependencies {
- provided 'org.springframework.boot:spring-boot-starter-logging'
- provided "org.springframework.boot:spring-boot-starter-actuator"
- provided "org.springframework.boot:spring-boot-autoconfigure"
- provided "org.springframework.boot:spring-boot-starter-tomcat"
-
- provided "org.grails:grails-web-boot"
- provided "org.grails:grails-dependencies"
- provided 'javax.servlet:javax.servlet-api:3.1.0'
+ compile "org.grails:grails-core:$grailsVersion"
compile project(":views-core")
testCompile "org.grails:grails-plugin-testing"
+ testCompile "org.grails:grails-web-testing-support:$testingSupportVersion"
console "org.grails:grails-console"
}